La máquina que hará de proxy debe de tener dos tarjetas de red. Le instalamos una Debian seleccionando como interfaz de red primaria la que irá conectada al router externo, en mi caso la eth0
. La instalación ha de ser mínima (sólo sistema estandard) para que la máquina no tenga ningún servicio superfluo.
Al final, el diagrama de red que perseguimos es como este:
Después del primer arranque configuramos las tarjetas de red en /etc/network/interfaces
. Las mías quedan de la siguiente forma:
allow-hotplug eth0 iface eth0 inet static address 192.168.1.2 netmask 255.255.255.252 gateway 192.168.1.1 network 192.168.1.0 broadcast 192.168.1.3 allow-hotplug eth1 iface eth1 inet static address 192.168.100.1 netmask 255.255.255.0 network 192.168.100.0 broadcast 192.168.100.255
Instalamos ahora los paquetes correspondientes a los servicios que vamos a necesitar y que no vienen incorporados en la instalación por defecto: dhcp y squid:
sudo apt-get install dhcp squid
Usaremos el servicio dhcp para asignar direcciones en nuestra red interna. Para configurarlo debemos, primero, editar el fichero /etc/default/dhcp
para especificar la interface que queremos que use el servicio (por defecto es eth0
y nosotros lo queremos en eth1
). Para ello basta con completar la siguiente línea en dicho fichero:
INTERFACES="eth1"
Luego editamos el fichero /etc/dhcpd.conf
y configuramos los datos correspondientes a la subred que vamos a administrar:
subnet 192.168.100.0 netmask 255.255.255.0 { range 192.168.100.100 192.168.100.254; option broadcast-address 192.168.100.255; option routers 192.168.100.1; option domain-name-servers 80.58.61.250, 80.58.61.254; }
Y ahora ya arrancamos el servicio de dhcp con /etc/init.d/dhcp start
- El paquete de instalación se llama ahora dhcp3-server
- El fichero de configuración principal (donde seleccionamos el interface de escucha) se llama ahora isc-dhcp-server y sigue estando en el directorio /etc/default
- El fichero donde configuramos los pool de direcciones se sigue llamando dhcpd.conf pero se encuentra ahora en el directorio /etc/dhcp
- El daemon del servicio se llama ahora isc-dhcp-server
Ya casi estamos. Ahora vamos a hacer unos cambios en el fichero de configuración de squid (/etc/squid/squid.conf
). Primero localizamos la lÃnea con el puerto de entrada de squid (por defecto http_port 3128
) y añadimos el parámetro transparente
. Debe de quedarnos algo asÃ:
http_port 3128 transparent
A continuación de esto, y en el mismo fichero, añadimos la siguiente lÃnea:
acl lan src 192.168.1.2 192.168.100.0/24
Y, por último, buscamos la siguiente lÃnea y la descomentamos (o la escribimos si no aparece):
http_access allow localnet
Ahora sólo nos queda configurar la máquina como router y direccionar el tráfico web que recibe por el interfaz interno (eth1
) al puerto 3128 que es el que usa squid. Esto lo hacemos gracias a IPtables (que vienen instaladas en Debian por defecto) y al script que os copio a continuación (que he tomado de las páginas de Unixcraft) y que debes de configurar para que se ejecute de forma automática en el arranque de la máquina:
#!/bin/sh # squid server IP SQUID_SERVER="192.168.1.2" # Interface connected to Internet INTERNET="eth0" # Interface connected to LAN LAN_IN="eth1" # Squid port SQUID_PORT="3128" # DO NOT MODIFY BELOW # Clean old firewall iptables -F iptables -X iptables -t nat -F iptables -t nat -X iptables -t mangle -F iptables -t mangle -X # Load IPTABLES modules for NAT and IP conntrack support modprobe ip_conntrack modprobe ip_conntrack_ftp # For win xp ftp client #modprobe ip_nat_ftp echo 1 > /proc/sys/net/ipv4/ip_forward # Setting default filter policy iptables -P INPUT DROP iptables -P OUTPUT ACCEPT # Unlimited access to loop back iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # Allow UDP, DNS and Passive FTP iptables -A INPUT -i $INTERNET -m state --state ESTABLISHED,RELATED -j ACCEPT # set this system as a router for Rest of LAN iptables --table nat --append POSTROUTING --out-interface $INTERNET -j MASQUERADE iptables --append FORWARD --in-interface $LAN_IN -j ACCEPT # unlimited access to LAN iptables -A INPUT -i $LAN_IN -j ACCEPT iptables -A OUTPUT -o $LAN_IN -j ACCEPT # DNAT port 80 request comming from LAN systems to squid 3128 ($SQUID_PORT) aka transparent proxy iptables -t nat -A PREROUTING -i $LAN_IN -p tcp --dport 80 -j DNAT --to $SQUID_SERVER:$SQUID_PORT # if it is same system iptables -t nat -A PREROUTING -i $INTERNET -p tcp --dport 80 -j REDIRECT --to-port $SQUID_PORT # DROP everything and Log it iptables -A INPUT -j LOG iptables -A INPUT -j DROP
Si hemos arrancado de forma manual el script anterior, a continuación hay que reiniciar el daemon de squid:
service squid restart
Y lo que nos queda ya es bien fácil: personalizar la página que muestra Squid cuando tratas de visitar una página restringida (esto es opcional, claro, pero conveniente) y configurar las reglas de páginas prohibidas y permitidas. Si tenéis problemas con el tema de las reglas u os resulta más cómodo contar con una interfaz web para la configuración de estas, webmin tiene un módulo para la configuración de squid.