GUL-UCA

Grupo de Usuarios GNU/Linux UCA

Proxy Transparente en Ubuntu

| 5 Comentarios

En este pequeño tutorial explicaré la configuración BÁSICA de un Proxy Transparente a solicitud de un asistente del Pizza Bash 2.4 realizado el pasado miércoles 4 de mayo, mas info aquí. No explicaré los conceptos usados, supongo que a los que le interese este post tienen conocimientos medios de Linux.

Les recomiendo leer los libros: “O’Reilly – Squid: The Definitive Guide” y “Ziegler, Firewalls Linux”.

Utilicé Ubuntu por que era la distro que tenía a mano instalada en mi desktop, pero si se comprende la teoría podrá aplicarse en cualquier otra.

NOTA: La autenticación de proxy no funciona cuando se utilizan proxys transparentes.

En la configuración propuesta usaré el siguiente escenario:

Los programas a utilizar serán:

  • squid3 (Servidor Proxy)
  • iptables (Firewall de Linux, todos las distros nuevas con kernel 2.6.x lo traen)
  • dhcp3-server

Instalamos los paquetes:

sudo apt-get update && sudo apt-get install squid3 dhcp3-server

Configuración de Squid

El archivo de configuración de Squid está en /etc/squid3/squid.conf

Abrimos el archivo con el editor de nuestra preferencia para modificar el parámetro http_port y agregamos las demás acl

http_port 3128 transparent
acl la_red src 192.168.1.0/24
acl redlocal src 127.0.0.1/255.255.255.255
http_access allow redlocal
http_access allow la_red

No voy a hacer filtrado de páginas ni horarios de acceso para los usuarios porque no es el objetivo del tutorial, para eso leer sobre Listas de Control de Acceso (Access Control List, ACL) en el libro de Squid que les recomendé al inicio.

Nos puede interesar cambiar el tamaño del caché del proxy, para eso buscamos esta linea:

cache_dir ufs /var/spool/squid3 700 16 256

El primer número representa el tamaño del caché en MB

Reiniciamos Squid

service squid3 restart

Con esto el proxy ya está funcionando, pero aún tenemos que configurar manualmente en cada host los datos de conexión de red y el proxy.

 

Configuración de IPTables

Primero vaciar la config de  IPTables (Si es necesario):

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X

Para lograr hacer transparente el proxy tenemos que agregar unas cuantas reglas en la configuración de IPTables

modprobe ip_conntrack
modprobe ip_conntrack_ftp
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
iptables --append FORWARD --in-interface eth1 -j ACCEPT
iptables -A INPUT -i eth1 -j ACCEPT
iptables -A OUTPUT -o eth1 -j ACCEPT
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to 192.168.1.1:3128
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -A INPUT -j LOG
iptables -A INPUT -j DROP

eth0 es la interfaz del proxy conectada a internet, eth1 es la interfaz del proxy conectada a la LAN. 3128 es el puerto del proxy y 192.168.1.1 es la IP interna del proxy. No voy a explicar cada linea, para eso pueden leer el libro de IPTables que puse al comienzo o leer este post donde se detalla un poco que hace cada linea.

Con esto ya tenemos proxy transparente, pero aun tenemos que configurar manualmente los datos de red en los host, aunque ya no sea necesario especificar el proxy, nos falta configurar el servidor DHCP.

Configuración de dhcp3-server

Primero hay que especificar la interfaz donde dhcp3-server va a escuchar las solicitudes.

Editamos el archivo /etc/default/dhcp3-serve, en la line:

INTERFACES="eth1"

Especificamos la interfaz de escucha, en nuestro caso la eth1.

Y configuramos los datos de la red en el archivo /etc/dhcp3/dhcpd.conf (Borrar las configuraciones anteriores):

subnet 192.168.1.0 netmask 255.255.255.0 {
 option routers 192.168.1.1;
 option subnet-mask 255.255.255.0;
 option ip-forwarding off;
 option domain-name-servers 208.67.222.222, 208.67.220.220;
 range dynamic-bootp 192.168.1.50 192.168.1.250;
 default-lease-time 21600;
 max-lease-time 43200;
}

E iniciamos el servicio DHCP

service dhcp3-server restart

 

¡LISTO!

Les dejo un vídeo de demostración de todo esto trabajando:

Preguntas, comentarios, críticas, trolleadas son bien recibidas :)

Saludos!

GUL-UCA is Stephen Fry proof thanks to caching by WP Super Cache