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.

Update :)
También se debe crear el archivo en /etc/ipf.conf y poner reglas básicas como
pass in from any to any
pass out from any to any

Y cómo yo se donde crear el archivo? Fácil pues, mira un archivo en /etc/defaults/rc.conf por ahi dice junto con la sintaxis que debes poner en /etc/rc.conf

Ojo debes poner los servicios en /etc/rc.conf
ipfilter=YES
ipfilter_flags=""
ipnat=YES

Y para activar que sea un gateway agrega al final del archivo /etc/sysctl.conf lo siguiente:
net.inet.ip.forwarding=1

NetBSD 8.0 ha sido "testeado" y ipfilter es el firewall para proxy transparente o intercept

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

No hay comentarios.:

Publicar un comentario

Cambiar el puerto de SSH en Derivados Red Hat Enterprise Linux 8

 En esta entrada mostraremos una forma de cambiar el puerto por defecto del servicio ssh en Rocky Linux 8. En primer lugar debemos de editar...