jueves, 28 de julio de 2016

Servidor Proxy transparente con SQUID en NetBSD 6.1.5

Hola amigo :), continuamos escribiendo algunos bits para internet, en ésta oportunidad anotamos cómo hacer un servicio proxy con squid en NetBSD 6.1.5, por alguna razón en la última release de NetBSD 7.0.1 el servicio no esta funcionando como se espera, filtra, pero algo falta, estoy revisando y espero encontrar el detalle, pero esta versión 6.1.5 es muy similar en muchos aspectos, se usa también como gestor de binarios a pkgin, aquí si esta funcionando el proxy con squid, por eso publicamos este apunte para que sea de guía para alguien y vea qué se necesita para un servicio proxy transparente a usuario, que por cierto es muy similar los conceptos para hacer funcionar en un sistema operativo GNU/Linux.

Actualización: 
Efectivamente en NetBSD existe Ipfilter versión 5 y en NetBSD 6.1.5 existe la versión de Ipfilter 4, puedes comprobar con el siguiente comando:
#ipf -V

En la lista de correo de squid-cache, alguien ha probado lo mismo y el mismo ERROR, NAT/TPROXY, no funciona bien, es un bug y alguien recomienda hacer un patch y le ha funcionado. Ya estamos en la versión 7.0.1 de NetBSD y sigue el mismo problema, en fin ya lo sabemos, ya lo arreglaran o ya se arregló, no sabemos, aquí se trata de ayudar a difundir NetBSD, pero si no funciona como queremos pues tenemos a otros grandes como FreeBSD y OpenBSD que son sus colegas tan buenos y más documentación existe en internet :), y por qué no también usar a GNU/Linux que son muy buenos para servidores, pronto novedades, aquí muestro los mensajes donde dicen que es un bug de ipfilter 5.



Fuente: http://lists.squid-cache.org/pipermail/squid-users/2016-January/008805.html

Pueden seguir leyendo en el el siguiente mensaje y lo soluciona.

Software necesario:
  • SQUID 3.5.19, no está en la base, hay que añadir con pkgin o usando pkgsrc.
  • NetBSD 6.1.5, versión stable y que cuenta con mantenimiento por el equipo de desarrolladores de NetBSD.
  • Firewall usado para redireccionar puertos: ipfilter.

¿Qué es SQUID?
Squid es el software que se usará para hacer un servicio proxy, caché de páginas web y filtrado a nivel de http, para filtrar https yo recomiendo usar el firewall, squid en su versión reciente tiene soporte para hacer dicho trabajo, pero esta fuera del alcance de éste apunte, aquí hacemos filtrado básico para http, para más información visitar squid-cache en su sitio principal, una googleada por favor.

Nuestro escenario sigue siendo el siguiente:

Internet----(router del ISP)----(wm0)NetBSD 6.1.5(wm1,wm2)----LAN1, LAN2
wm0=192.168.1.85/24, interface interna del router.
wm1=192.168.2.85/24
wm2=192.168.3.85/24

Con esto hacemos que toda petición al puerto 80 (páginas web http) de ambas redes LAN pasen por NetBSD y se rediriga al puerto 3128 (podría ser otro puerto, pero aquí usamos ese) y controlamos y hacemos caché de páginas web, y ¿Por qué? Cuando se hace caché se almacena una web en el servidor proxy, la próxima vez que alguien haga una petición a esa misma página ya no tendrá que ir hasta afuera, el proxy lo va a proporcionar y de igual manera imagina que alguien ha descargado algo y otro también quiere descargar lo mismo, lo hará en un tiempo mínimo ya que el proxy alamacenó dicho archivo en caché, ahora depende de la configuración del squid, darle bastante espacio, etc.

Como ven seguimos el mismo escenario anterior, NetBSD es router, firewall, dhcp server y ahora es un proxy. No es recomendable agregar muchos servicios a un servidor, un DNS autoritativo podría añadirse como último servicio, si desean uno para base de datos como un mysql, un servicio web con apache debería estar en otra máquina.

Agregar Squid:
Squid no está en la base asi que añadimos, squid en su versión estable esta en los repositorios de NetBSD, se puede usar pkgsrc el cual descarga la fuente y recompila el software, toma mucho tiempo, pero es la forma tradicional en los BSD, nosotros no nos complicamos y decidimos usar a un gestor llamado PKGIN, en la instalación de NetBSD nos aparece en opciones para añadirlo, nosotros lo hemos añadido desde ese punto.

Con pkgin podemos añadir a squid de la siguiente manera:

#pkgin install squid

Al finalizar nos muestra el mensaje que debemos de copiar de /usr/pkg/share/examples/rc.d/squid a /etc/rc.d/. ahi estan los demonios por decir, nos indica que debe tener permiso 0755, yo no lo cambié de permiso porque ya esta con ese permiso.


x=1, w=2, r=4, comienza de derecha a izquierda, como ven los primeros son para visitantes y tiene x-r, sumados dan 5, no tiene a w, para el gruo igual es 5 y para el propietario es 7=1+4+2

Reglas en ipnat.conf
Ya tenemos lo necesario ahora debemos tener bien claro que debemos usar a ipfilter u otro firewall para hacer redirección de puerto.
Si miramos la página man de ipnat(5) y buscamos proxy por ahi esta la regla a usar.
Escribimos en ipnat.conf


El proxy será transparente al usuario, se usa modo intercept, el usuario no hace nada, es redirigida todas sus peticiones al puerto 80 al 3128.

Configurando squid.conf
Ahora tenemos que modificar el archivo mencionado, está en la ruta /usr/pkg/etc/squid, ahí esta todo de squid.

#pwd
#vi squid.conf


Mis acls, ahi comienza lo que he añadido, mas arriba borro o comento las redes que squid permite, las redes privadas como 192.168.0.0/16, 172.16.0.0/12 y asi, las borro y abajo también lo relacionado a localnet :).

Ahora habilitamos las acls, asi:


Donde dice mis reglas, es importante el orden de las reglas, miren arriba esta localhost y último esta deny all.

Ahora vamos a ubicar al puerto, cache_mem, cache_mgr, visible_hostname, cache_dir, será suficiente, luego inicamos a squid :)

http_port, modo transparente al usuario


cache_mem, esto va deacuerdo a los recursos que cuentes


cache_mgr, es informativo, correo del administrador del servidor.


cache_dir, es importate y también depende de cuanto le quieras dar en caché, depende del tráfico en la red.


visible_hostname, como dice ahí el sistema automáticamente lo ubicará, yo lo puse, no era necesario squid lo ubicaba ese nombre sin que lo haga explícito.


También pongo:
cache_swap_low 90
cache_swap_high 95

Estos ultimos hacen que squid se limpie apenas llegue a ese porcentaje.

Existen otros parámetros más, muchos más para hacer más interesante, pero ya se los dejo a ustedes, squid es un gran proxy para caché de páginas webs y filtrado.

Las reglas que usé para expresiones regulares que será denegadas, eso que leyeron de url_regex en las acls y para dominios dstdomain que también figuran en las acls, tambien muestro su contenido en la ruta indicada.


Rc.conf


Iniciar squid con
Antes de iniciar construyamos a squid
#squid -z
#/etc/rc.d/squid start

Para ver los logs y los accesos usa a /var/squid/logs/, puedes usar los comandos:
#tail -f /var/squid/logs/cache.log
También a access.log

Veamos como funciona en los clientes:

Lan 1



Lan 2



Revisando los logs, para pensar ese ERROR que nos muestra verdad? Dejo para que ayuden sobre ese mensaje, funciona el proxy, pero el error nos dice sobre puertos configurados, en squid-cache existe sobre ese mensaje da unas recomendaciones, pero no se entiende por qué nos muestra eso :)

Muchos diran no pasa nada con el proxy transparente, me los salto con https, uso tuneles y asi, es cierto se puede saltar, pero siempre se molesta, ya no es igual, no todas las páginas usan https, los tuneles que ofrecen en internet tiene publicidad molestosa, pero siempre se puede saltar, pero ya queda hacerlo difícil el lograr saltar :)


Gracias por leer nuestro tutorial, y no olvides que squid.conf es igual en GNU/Linux, nada más que ahi se usa a otro firewall como iptables, motivo para continuar con los tutoriales :), thanks for watching
Of course it runs NetBSD

sábado, 16 de julio de 2016

DHCP Server con NetBSD 7.0.1

Hola amigos seguimos con los tutoriales, en la anterior entrada pusimos en marcha nuestro Router y Firewall con NetBSD, nuestros clientes en los segmentos 192.168.2.0/24, 192.168.3.0/24 ya pueden salir a internet gracias a NAT que se hizo en NetBSD con ipfilter.

Ahora hacemos que NetBSD de automáticamente parámetros de red (ip, máscara de subred, puerta de enlace, servidores dns) a los clientes o terminales, en éste ejemplo son terminales Windows xp desatendidos :).

Para saber más sobre qué es DHCP (Dynamic Host Configuration Protocol), por favor revisar en internet, en resumen le digo que es un software que hace que el servicio dé auotmáticamente parámetros de red a los clientes, en NetBSD por defecto ya incluye el software necesario para habilitar el servicio, ya está en la base solo queda iniciarlo y claro configurarlo adecuadamente a nuestras necesidades, para más detalles en el servidor mirar la página man:

#man dhcpd.conf

Iniciar el servicio en tiempo de arranque
Como dijimos el servicio ya está en la base, eso lo averiguamos mirando el archivo /etc/default/rc.conf y buscamos con /dhcpd (escribimos luego de hacer less /etc/default/rc.conf) y vemos la forma que tiene, ya con eso vamos a /etc/rc.conf y escribimos como en las capturas:




Archivo dhcpd.conf
Copiar el ejemplo dhcpd.conf ubicado en /usr/share/examples/dhcp/dhcpd.conf a /etc, para ellos usamos el comando:
#cp /usr/share/examples/dhcp/dhcpd.conf /etc
No preocupes ya tiene los permisos base, pero te voy avisando que cuando edites ese archivo con vi (editor de texto nativo en muchos unix-like), luego de editar queremos guardar con el clásico :wq, pues nos indica que es un archivo de lectura y que para escribir debemos añadir !, hacemos caso :)
:wq!, con eso ya escribe jijiji

No te olvides de buscar ese archivo en caso que no sepas donde está, usa éste comando para ubicar el ejemplo y copiarte a /etc

#find / -iname dhcpd.conf

Ya tenemos copiado ahora lo editamos a nuestra necesidad:
Recuerda tenemos tres interfaces wm0, wm1, wm2, nuestras LANS estan en wm1 y wm2, a esas queremos darle parámetros automáticamente, NetBSD con el servicio dhcp lo va a hacer, nuestro archivo dhcpd.conf debe quedar como en las capturas, es intuitivo, leer lo que dice, lo vamos a hacer de manera que resuelva nuestro objetivo, de hecho debe haber más cosas interesantes y más complejas, reitero esto ha resuelto la necesidad que se requiere.



Iniciamos el servicio:
#/etc/rc.d/dhcpd start

Clientes Windows
Vemos que las terminales reciben parámetros de red automáticamente y salen a internet.
Usamos los comandos en símbolo del sistema de windows:
>cls
>ipconfig /release
>ipconfig /renew
>ipconfig /all

 Y vemos que todo ha funcionado.
Cliente 1


Cliente 2



Hemos tenido éxito ha tomado las primeras ips del rango que le dimos, ahora que te parece si hacemos algo más, por ahi en la red debe haber un equipo que deba tener ip fija y no dinámica, el servicio DHCP lo puede hacer, miramos la MAC de esa estación windows la anotamos y la enlazamos por decir con una ip ya seleccionada, cada vez que inicie el servicio le dará esa ip a esa MAC de la interface ethernet de esa máquina.

Cliente 2 con ip 192.168.3.65/24, luego de escribir en dhcpd.conf reiniciamos el servicio (/etc/rc.d/dhcpd restart) y nuevamente en el cliente hacemos que pida otra vez ip a NetBSD


Mismo nombre y MAC



Hemos tenido éxito.

No preocupes ya se ha creado un archivo en /va/db/dhcpd.leases al inicar por primera vez el servicio, en ese archivo puedes ver detalles de asignación, saludos y espero haya agradado el tutorial :), estamos trabajando para el servidor proxy server con squid :), thanks for watching :)

Of course it runs NetBSD

viernes, 15 de julio de 2016

Router y Firewall con NetBSD 7.0.1

Hola amigos, en ésta entrada les mostraremos como hacemos que nuestro NetBSD 7.0.1 haga de gateway y firewall, la pregunta que muchos se harán y ¿para qué? Pues la respuesta es estructurar una red, y agregar servicios como dhcp, proxy, dns, y aparte será por donde pase todo el tráfico desde segementos de red diferentes, en éste caso son dos segmentos  LAN (192.168.2.0/24 y 192.168.3.0/24), para ellos usaremos a uno de los BSD de la vieja escuela :), NetBSD, en networking juntos a sus "colegas" como son FreeBSD y OpenBSD pues no cabe duda que tienen un rendimiento impecable.

Nuestro escenario será aproximadamente el siguiente:
Donde nuestro NetBSD tiene tres interfaces de red ethernet (wm0,wm1,wm2).
Interfaces:
wm0 de cara a internet (a lado del router), wm1 y wm2 detras del firewall, la denomiación wmx, las pone NetBSD.

Configuración de red:
En la instalación de NetBSD el asistente sysinst, nos proporciona una interface amigable para ingresar datos, nosotros hemos configurado wm0 con sysinst y para wm1 y wm2 creamos dos archivos en /etc, antes miramos /etc/rc.conf y tenemos:


wm0 tiene ip 192.168.1.85/24
wm1 tiene ip 192.168.2.85/24
wm2 tiene ip 192.168.3.85/24

wm0 ya tiene configurado bajo /etc un archivo con susparámetros:

 Para las demás interfaces copiamos, pero cambiamos ifconfig.wmx, donde x es 1 y 2, luego reiniciamos el servicio de red.



Ya tenemos listas las interfaces 

 
También recordar que bajo /etc esta nuestro resolfv.conf que contiene los servidores dns, agregamos uno más:

 Ya tenemos todo lo necesario para hacer nuestro router casero que hará que las LANS que estan detras de wm1 y wm2 salgan a internet usando solo una ip de nuestro proveedor, eso es NAT, IPFILTER nos va a ayudar a hacer eso, ipfilter se incluye en la base de NetBSD, es un firewall en software, debe ser muy bueno que aunque ya no se actualiza o exista poca información en internet ORACLE SOLARIS lo usa, sigue vigente y la sintaxis es similar a PF de OpenBSD, a comandos de reglas en routers y switches CISCO, eso pude notar alguna vez.

Asi que ha habilitar y crear lo necesario para hacer NAT y FORWARDING y nuestro clientes de las LANS 192.168.2.0/24 y 192.168.3.0/24, salgan a internet.

NAT y Firewall:
Leemos el archivo que dice /etc/default/rc.conf y buscamos algo a ipfilter y aparece por ahí lo necesario que debemos incluir a /etc/rc.conf, creamos los archivos /etc/ipf.conf  y /etc/ipnat.conf y agregamos unas reglas como en las fotos.


 Escribimos en /etc/rc.conf

Con eso ya inicia los servicios en tiempo de arranque.
Creamos los archivos ipf.conf e ipnat.conf y escribimos como en las fotos, luego habilitamos el forwarding en /etc/sysctl.conf.

Ya todo en lo básico esta listo, reiniciamos el servidor, podrías inciar /etc/rc.d/ipfilter start, /etc/rc.d/ipnat start, pero hay algo raro, ya escribí en /etc/sysctl.conf el forwarding y me dice cuando inicio ipnat que esta en cero, asi que mejor reinicio y todo saldrá bien :), LAN1 y LAN2 ya salen a internet a través de nuestro NetBSD jejeje...



Ahora que de interesante podemos hacer? La respuesta es simple, qué te parece si añadimos un servicio DHCP a NetBSD y hacemos que desde ambas LANS reciban ips, gateway y dns automáticamente? También podemos añadir reglas a ipfilter y restringir tal vez su administración remota, un servidor proxy para caché de páginas web, todo eso con software libre como NetBSD que como dije en networking es implecable, en una pc con recursos aceptables podrías poner un router y firewall en tus entornos LAN, y también se usa en equipos servidores en casos críticos, para eso fue diseñado NetBSD y sus colegas :), espero que te haya gustado el tutorial y que conozcas más sobre administrar servicios desde cero, con software de alto rendimiento :), saludos.


Of course it runs NetBSD

martes, 12 de julio de 2016

Firewalls / routings con Pfsense y ZeroShell

Hola amigos :), en esta oportunidad les comento sobre dos sistemas operativos muy buenos y no complicados para hacer Firewalls y Routers, elegí estos dos luego de usarlos y vaya que brindan cosas muy interesantes, les hablo de PfSense y de ZeroShell.

En las siguientes entradas haremos tutoriales de ambos SO, espero os guste y sigan visitando mi blog :), les presento a los dos "Amigos" que usaremos para dar seguridad a nuestras LANs.

PfSense:
pfSense es una distribución personalizada de FreeBSD adaptado para su uso como Firewall y Router. Se caracteriza por ser de código abierto, puede ser instalado en una gran variedad de ordenadores, y además cuenta con una interfaz web sencilla para su configuración. El proyecto es sostenido comercialmente por Electric Sheep Fencing LLC.
Fuente: https://es.wikipedia.org/wiki/PfSense

ZeroShell:
Zeroshell es una distribución Linux para servidores y dispositivos integrados destinados a proporcionar los servicios de red principal de una LAN requiere. Está disponible en forma de Live CD o de imagen de Compact Flash y se puede configurar y administrar utilizando el navegador web.

Una es basada en FreeBSD y la otra en  Linux, no está basada exáctamente en alguna distro sino su desarrolo es desde cero, asi dice :), pues saludos y pronto los tutoriales :)