Implementando SQUID Transparente con soporte para Outlook

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.

Visualizando mis ip

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 os preocupeis pues tenemos el squid.bak.

Vale pues a configurar el squid.conf para ello escribo en la terminal: sudo nano squid.conf a continuacion borro todo lo que hay ahi (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, hacia el puerto 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, inicias el servicio y listo.

Acerca de Gerardo Jacinto Astudillo

Interesado en el mundo de las tecnologias de informacion y telecomunicaciones. Vivo en constante aprendizaje. Mis pasatiempos: La música y convivencia familiar. Mi familia es lo mas importante!
Esta entrada fue publicada en Linux. Guarda el enlace permanente.

5 respuestas a Implementando SQUID Transparente con soporte para Outlook

  1. Rafael H dijo:

    Amigo tengo un caso particular, CentOs 5.8
    eth0 186.117.xxx.xxx es mi wan
    eth1 192.168.1.228 es mi lan

    Tengo accesoa todo menos a accear a mis correos por Outlook
    Me colaborarias ? perdona el abuso me revente con esto logro todo menos el outlook

    • Hola Rafael, ¿que configuracion tienes en tu firewall? escribe en consola sudo iptables -L -n y pega lo que te arroja?
      ¿lo tratas de configurar en modo transparente?
      Saludos

      • Rafael H dijo:

        Seguro, Mi proxi esta apuntando al 8080 de modo traspárente
        Chain INPUT (policy ACCEPT)
        target prot opt source destination
        ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpt:10000
        ACCEPT all — 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED /* Permitir conexiones existentes */
        ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
        ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80
        ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpt:21 state NEW
        ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:110
        ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpt:25
        ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpt:25
        ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpt:110

        Chain FORWARD (policy ACCEPT)
        target prot opt source destination

        Chain OUTPUT (policy ACCEPT)
        target prot opt source destination
        esto es lo que sale al comando

    • puedes pegar tus lineas para manejar tu firewall? ¿manejas algun script? si es asi pega su contenido.

      Veo que tienes la politica ACCEPT por defecto y no tienes nada definido en el CHAIN de Forward…
      Puedes probar haciendo forward de los puertos que utiliza tu cliente de correo para salir y para recibir (cerciórate de que sean los correctos)

      iptables -A FORWARD -p tcp –dport 25 -j ACCEPT
      iptables -A FORWARD -p tcp –dport 110 -j ACCEPT

  2. ¿En tu configuracion de outlook, sales por el puerto 25?
    aqui en mexico este puerto se cerró, ahora para SMTP puedes utilizar el 587 (puerto de submission) o el puerto 465 (SMTP con SSL) ¿utilizas algun script para situar los parámetros en el firewall?

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s