Configurando SQUID en modo transparente + IPTABLES con soporte para clientes outlook

Tema: 

Que tal en esta ocasión les detallaré como implementé un servidor proxy en Ubuntu Server 10.04.3 LTS

Un poco de historia de squid lo tenemos por acá

La computadora que utilizo posee 2 tarjetas de red, eth0 para la wan la cual está directamente conectada a mi modem infinitum y la eth1 que está conectada a mi switch que a su vez interconecta a mi red de área local.

Teniendo instalado Ubuntu Server escribimos en la terminal sudo apt-get install squid (esto instalará squid).

Nota: Ubuntu server por default viene sin entorno grafico, si deseas instalarle entorno grafico eres libre de hacerlo con el comando sudo apt-get install ubuntu-desktop.

Como pueden ver poseo 2 tarjetas de red cada una con su direccion ip fija si no sabes como situar una ip fija desde consola lo puedes hacer facilmente con el comando ifconfig bajo la siguiente sintaxis:

ifconfig eth0 192.168.1.1 netmask 255.255.255.0 broadcast 192.168.1.255

con eso lo que haces es que asignas dirección IP, máscara y broadcast al mismo tiempo XD.

como la eth0 es la que va al modem de infinitum le agregamos la puerta de enlace con:

route add default gw 192.168.1.254 (que es la direccion por default del modem)

y la otra interface la configuras de igual forma con ifconfig pero OJO esta como va hacia la lan NO LLEVA gateway.

Una ves instalado SQUID tenemos que editar el archivo de configuracions squid.conf situado en /etc/squid. siempre es bueno respaldar este archivo ya que podemos disponer y hacer malabares con el que vamos a ocupar.

Nos cambiamos al directorio de squid con: cd /etc/squid

Respaldamos el squid.conf con: cp squid.conf squid.bak

ahora en el directorio de squid tendremos el archivo squid.conf y squid.bak con esto podremos editar libremente el squid.conf si algo sale mal, no te preocupes pues tenemos el squid.bak.

Vale pues a configurar el squid.conf para ello escribo en la terminal: sudo nano squid.conf
a continuación borro todo lo que hay ahí (si lo quiero consultar pues tengo el squid.bak)

y pego el siguiente código:

http_port 3128 transparent
httpd_accel_host virtual
httpd_accel_port 3128
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
cache_mem 500 MB
cache_dir ufs /var/spool/squid 750 16 256
cache_mgr pon_tu_correo@gmail.com
access_log /var/log/squid/access.log squid
#############################################################
## Creamos las acl a las que daremos acceso al Proxy
#############################################################
acl sitios_bloqueados url_regex “/etc/squid/sitios_bloqueados”
acl bloquea_msn url_regex “/etc/squid/bloquea_msn”
acl servidores src “/etc/squid/servidores”
acl contraloria src “/etc/squid/contraloria”
acl contabilidad src “/etc/squid/contabilidad”
acl cajas src “/etc/squid/cajas”
acl gerencia src “/etc/squid/gerencia”

acl ventas src “/etc/squid/ventas”
acl reservaciones src “/etc/squid/reservaciones”
acl recepcion src “/etc/squid/recepcion”
acl rh src “/etc/squid/rh”
acl banquetes src “/etc/squid/banquetes”
acl almacen src “/etc/squid/almacen”
acl ayb src “/etc/squid/ayb”

###################################################
## Ahora permitimos el acceso a las acl creadas
###################################################
acl localhost src 127.0.0.1/32
acl all src all
http_access allow localhost
http_access allow contraloria
http_access allow contabilidad !sitios_bloqueados !bloquea_msn
http_access allow ventas !sitios_bloqueados !bloquea_msn
http_access allow reservaciones
http_access allow recepcion !sitios_bloqueados !bloquea_msn
http_access allow almacen !sitios_bloqueados !bloquea_msn
http_access allow ayb !sitios_bloqueados
http_access allow banquetes !sitios_bloqueados !bloquea_msn
http_access allow cajas !sitios_bloqueados !bloquea_msn
http_access allow rh !sitios_bloqueados
http_access allow servidores !sitios_bloqueados
http_access allow gerencia

grabamos los cambios con CONTROL + o y salimos de nano con CONTROL + x.

Explicacion:

http_port 3128 transparent //Le digo a squid que escuche peticiones por el puerto 3128 y en modo transparente.

httpd_accel_host virtual
httpd_accel_port 3128
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

//Con esos parametros establecemos politicas de proxy acelerado.

cache_mem 500 MB //Establecemos una cache de 500 MB para almacenar paginas que visitan los clientes, mientras mas grande la cache mas ahorro de ancho de banda tenemos. Nota: en este parametro debemos tener enn cuenta el tamaño de nuestro disco duro (si establecemos una cache muy grande y no tenemos espacio en nuestro disco duro, squid se colapsará)

cache_mgr tucorreo@gmail.com //Para que aparesca nuestro mail en la página de acceso denegado

access_log /var/log/squid/access.log squid //Activamos el log de squid para futuras auditorias hacia nuestros usuarios (podemos utilizar sarg para obtener reportes mas rápidos y legibles)

Lo demas son ACL mejor conocidas como listas de control de acceso, en ellas decimos quien tiene derecho al proxy y quien no.

como podemos notar yo hago referencia a archivos, o sea mis ACL hacen referencia a archivos que estan en la ruta /etc/squid. Como en mi red poseo direcciones ip fijas, cada archivo que en si es una ACL tiene las direcciones ip que pertenecen al departamento o al bloque de usuarios.

para crear tu archivo en el directorio /etc/squid hazlo con: sudo touch /etc/squid/nombre_de_tu_archivo

y cuando lo abras con nano pon la o las direcciones ip que pertenecen al nombre_de_tu_archivo

de tal suerte que tu ACL (referenciado por el archivo que acabas de crear contendrá algo como esto:

154.5.4.30

154.5.4.31

y asi para cada archivo o ACL que quieras crear.

Una vez que tienes creados tus archivos con las ip correspondientes inicia squid de la siguiente forma: /etc/init.d/squid start

Para que squid se inicie de manera automatica al iniciar o reiniciar el sistema, escribir en consola: sudo chkconfig squid on

Ahora lo que sigue son las IPTABLES

Activando el bit de forward
Por defecto un equipo GNU/Linux no permite que se pasen paquetes entre sus interfaces de red, pero si queremos que actúe como router o como dispositivo de NAT tenemos que cambiar este comportamiento, activando lo que se denomina bit de forward de alguna de las siguientes maneras:

escribiendo en consola: echo 1 > /proc/sys/net/ipv4/ip_forward

O de forma definitiva para que no nos importe si el equipo se reinicia, editamos el archivo /etc/sysctl.conf, buscamos la línea net.ipv4.ip_forward=1 y la descomentamos.

Ahora escribimos la instruccion de iptables que hace que nuestro router linux actue como dispositivo de NAT para nuestra red.


## FLUSH de reglas
iptables -F
iptables -X
iptables -Z
iptables -t nat -F

iptables -t nat -A POSTROUTING -s 154.5.4.0/24 -o eth0 -j SNAT –to 192.168.1.1

la ip 192.168.1.1 esta asignada de manera fija y pertenece a mi interface de red eth0 (que uso para la wan). eth0 va conectada al modem de infinitum. Si esta IP la obtuviéramos de manera dinámica tendriamos que sustituir la instruccion por ésta otra:


iptables -t nat -A POSTROUTING -s 154.5.4.0/24 -o eth0 -j MASQUERADE

Redirigiendo todo hacia SQUID
Como squid.conf esta configurado de manera transparente redirigimos todo lo que provenga de nuestra LAN y quiera ir hacia el puerto 80, lo redirigimos al 3128 de nuestro proxy para que escuche las peticiones.


iptables -t nat -A PREROUTING -i eth1 -p tcp –dport 80 -j DNAT –to 192.168.1.1:3128

y reforzamos con:


iptables -t nat -A PREROUTING -p tcp -s 0.0.0.0/0 –dport 80 -j REDIRECT –to 3128

Permitiendo el envío y recepción de mails a los clientes de outlook
Para hacer que los clientes de outlook envien y reciban mails a traves de SQUID hay que permitir el forward de datos de todo lo que provenga de nuestra LAN hacia la interface externa.

iptables –append FORWARD -s 154.5.4.0/24 –in-interface eth0 -j ACCEPT
iptables -A INPUT -s 154.5.4.0/24 -j ACCEPT

Como aqui en el trabajo tenemos una VPN con otro lugar mediante Fortinets se tuvo que añadir una ruta estática en mi router Linux para que todas las peticiones hacia la red del otro lugar, las encaminara por el fortinet.

# Añadimos una ruta estática para que todo lo que valla a la red de diamante pase por el fortinet

sudo route add -net 154.7.0.0 netmask 255.255.0.0 gw 154.5.4.101

y con esto terminamos el procedimiento de como implementar un servidor proxy en modo transparente con SQUID para Ubuntu Server.

En las computadoras cliente no tienes que configurar nada mas que poner como puerta de enlace la ip 154.5.4.100 que es la IP de nuestro Server Squid (que actúa como Router) y a probar, Suerte a Todos.

Ah otra cosa: si quieres que tu server squid figure tambien como server DNS, pues instalate BIND9 con sudo apt-get install bind9 y listo.

Comentarios

Con esta línea estás

Imagen de deathUser

Con esta línea estás enmascarando todas las conexiones, y en ninguna parte estás excluyendo las conexiones al puerto 443 TCP que es el puerto que usa el protocolo HTTPS por default.

[quote=angeldres22]$IPT -t nat -A POSTROUTING -o $WAN -j MASQUERADE[/quote]

Si quieres bloquear HTTPS bloquea dicho puerto ...

PD: deberías crear otro POST para mantener ordenado el foro y obtener más y mejores respuestas.

bye
;)

Páginas