Si fuese cristiano pensarÃa que Zaryn Dentzel es el anticristo y esa abominación suya que se llama tuenti el camino a la perdición de toda una generación de adolescentes que prefieren perder el tiempo con estas bobadas en lugar de atender a las clases… O eso hacÃan, antes de que instalara el proxy con squid, claro. ¿Necesitáis un filtro de contenido eficiente y barato que funcione con software libre? Pues acompañadme…
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.
Hola amigo, excelente POST, con una pregunta:
Tengo Windows server 2012 con dos tarjetas de red , y quiero tener una maquina virtual con debian para el proxy, mi pregunta es como configuro la red en la maquina virtual, para que me funcione. Muchas gracias por tu comentario, excelente trabajo el que realizas en el blog.
Saludos.
Buenas ben. Si quieres usarla como proxy para tu red local, ambos interfaces deberÃan de estar configurados en modo bridge (puente). Gracias a ti por pasar por aquà 🙂
Brillante: ojalá Google hubiera puesto ésta página en primer lugar. Me habrÃa ahorrado 3 dÃas de otros scripts caducos.
¡Muchas gracias!
Para que luego nos cuenten que Google funciona bien 😉
Gracias y que aproveche!
Hola buen dia con una consulta el proxy funcionaria si lo pongo atras de un firewall si es asi como direcciono la red lan, tengo que cambiar la configuracion de red en los host. para decirles que ya no vayan al fw sino que pasen por el proxy? o hay otra forma.
Gracias por el tutorial, lo segui paso a paso y esta andando mi proxy en un ubuntu 11.10.
Lo que ma interesa es ver la forma que en la misma pc que esta instalado el proxie se pueda hacer uso de el, por que para navegar en el servidor tengo que ponerle los datos del proxie al navegador.
En los clientes si me funciona de forma transparente el provie.
Puede usted ayudarme en eso por favor.
Excelente Post amigo. Tengo una duda. Si no tenfo el router del diagrama (192.168.1.1) sino que la conexión de internet llega directamente al eth0 (192.168.1.2), y recibe ip por dhcp, como debo cambiar mi regla del firewall para que funciones???
Hola esto como lo aplico a una pc en mi hogar pero quiero que un usuario de terminado en mi ordenador restringirle ciertas paginas
un saludo
hola amigo, soy nuevo en el mundo de linux y quisiera preguntarte donde configuro el script de iptables,que archivo hay q abrir y modificar para hacer funcionar el iptables
Hola Jose Maria
soy nuevo en todo esto de Ubuntu , y me encontre con tu pagina,este script que pusite aqui, me ha servido de mucho para hacer funcionar iptables y poder implementar reglas con solo ver tus ejemplos
muchisimas gracias
Tengo un problema al accesar a las paginas de windows live nose a que se deva esto, quisiera que pudieran ayudarme
Sepias translúcidas… ¿A la plancha y con su mojo verde! ¡hmmm!¡Qué hambre a estas horas, Mariache!
Joé, y yo que pensaba que esto iba de calamares transparentes…