Este documento describe cómo configurar y usar un servidor proxy Squid en Ubuntu 12.04. Explica cómo instalar e iniciar Squid, configurar listas de control de acceso para permitir o denegar sitios web y palabras, y montar el proxy de forma transparente para los usuarios de la red. También cubre el uso de Webmin para administrar la configuración de Squid de forma gráfica.
1. Ramón Jesús Suárez Pérez 2ºASIR
SQUID 3 – Servidor Proxy en Ubuntu 12.04
Introducción y requisitos del sistema
Squid es un popular programa de software libre bajo licencia GPL diseñado para
ejecutarse en entornos tipo Unix, que implementa un servidor proxy y un dominio para
cache de páginas web.
Entre las principales características de squid, destacan:
- Permitir conectarse a internet a una serie de equipos a través de una sola IP.
- Filtrado de contenidos.
- Capacidad de almacenar una caché de páginas webs para que el acceso a ellas
sea mucho más rápido desde los equipos de la red.
Aunque está orientado principalmente a HTTP y FTP es compatible con otros
protocolos como Internet Gopher. Implementa varias modalidades de cifrado como
TLS, SSL, y HTTPS.
2. Ramón Jesús Suárez Pérez 2ºASIR
Instalación de Squid3 en Ubuntu 12.04
Para instalar Squid3 en Ubuntu 12.04, bastará con ejecutar el siguiente comando en el
terminal: “sudo aptitude install squid3”.
Este comando descargará e instalará el paquete squid3 de forma automática
directamente de los repositorios de Ubuntu.
Es conveniente tener configurada en nuestro equipo una dirección IP estática, no
obstante para la prueba no será necesario.
Utilizaremos el comando “ifconfig”, para obtener la dirección IP de nuestro servidor
que será el encargado de actuar como proxy.
3. Ramón Jesús Suárez Pérez 2ºASIR
Si comprobamos el estado de los puertos abiertos en nuestro servidor mediante el
comando “nmap” ejecutado desde otra máquina, podremos comprobar que ha
quedado habilitado el puerto por defecto de squid (3128), lo cual nos indica que
nuestro proxy está activo en el sistema.
Configuración de Squid3 en Firefox
Para utilizar un servidor proxy en un navegador, en nuestro caso firefox, bastará con
acceder al menú de configuración del navegador, y una vez dentro buscaremos en el
apartado de configuración oportuno (en nuestro caso “Avanzado” las propiedades de
la “Configuración de la conexión”.
Una vez allí, en el apartado de configuración de proxy, debemos especificar la
dirección IP de nuestro servidor y el puerto de nuestro proxy (por defecto 3128).
4. Ramón Jesús Suárez Pérez 2ºASIR
Configuración básica y Listas de control de acceso (ACL)
Si comprobamos el funcionamiento de nuestro servidor proxy desde un navegador,
podremos darnos cuenta de que por defecto SQUID bloquea el acceso a todas las
direcciones HTTP.
Para solventar esto y poder disfrutar de un acceso total al contenido web desde los
equipos que utilicen nuestro proxy, debemos dirigirnos al fichero:
“/etc/squid3/squid.conf” y una vez allí modificar la línea “http_access deny all” por
“http_access allow all”.
Es recomendable que antes de realizar modificaciones en el fichero squid.conf
realicemos copias de seguridad para evitar fallos en la ejecución del programa.
5. Ramón Jesús Suárez Pérez 2ºASIR
Cada vez que realicemos cambios en el archivo de configuración del programa, será
necesario reiniciar el servicio de squid para que se apliquen al sistema.
Para reiniciar el servicio bastará con ejecutar el comando: “sudo service squid3 restart”
Una vez hecho esto, podremos comprobar como volvemos a navegar con total libertad
desde los equipos clientes que utilicen nuestro proxy.
6. Ramón Jesús Suárez Pérez 2ºASIR
Definición y denegación de ACL (Listas de control de acceso)
Las listas de control de acceso son un conjunto de reglas que permiten controlar el
tráfico de la red a través de la aprobación o la denegación de estas.
La definición, aprobación y denegación de ACLs se realiza desde el fichero de
configuración de squid (/etc/sqiud3/squid.conf).
Las acls deben de especificarse en el fichero de manera ordenada ya que las acls
superiores tendrán prioridad sobre las inferiores.
Bloqueando el acceso a un determinado dominio.
Para definir una acl para un determinado sitio web utilizaremos la siguiente sintaxis:
“acl nombre_acl dstdomain dominio_o_ip_del_sitio_web”
Para denegar el acceso a una detemrinado sitio web, en este caso únicamente
tendremos que haber definido previamente la acl y después denegarla mediante:
“http_access deny nombre_acl”
Como se vió anteriormente, tras reiniciar el servicio de squid, podremos comprobar
que ninguna de las webs especificadas es accesible por los equipos clientes.
7. Ramón Jesús Suárez Pérez 2ºASIR
Bloqueando el acceso a una lista negra de dominios
Para facilitar el bloqueo a varios sitios webs de una sola vez, podemos recurrir a las
llamadas “listas negras”.
Una lista negra no es otra cosa que una acl que carga los dominios o palabras de un
fichero y permite así garantizar o denegar el acceso a dichos sitios web.
Para definir una acl de este tipo usaremos la siguiente estructura:
“acl nombre_acl dstdomain “/direccion_del_fichero_lista_negra”
8. Ramón Jesús Suárez Pérez 2ºASIR
Aquí podemos comprobar el funcionamiento de la lista negra:
Bloqueando el acceso a una lista negra de palabras
De la misma forma que definimos listas negras de dominios, es posible bloquear el
acceso a direcciones que contengan determinadas palabras:
“acl nombre_acl url_regex “/direccion_del_fichero_lista_negra”
9. Ramón Jesús Suárez Pérez 2ºASIR
Si comprobamos el funcionamiento de nuestra lista negra de palabras podemos
observar como nos bloquea directamente todas las urls que contengan las palabras
indicadas en el fichero.
No nos deja incluso buscarlas desde el navegador.
Excepciones de reglas (listas blancas)
Las listas blancas se definen de la misma forma que cualquier otra acl...
Son utilizadas para especificar excepciones en las reglas del proxy.
Podemos habilitar el acceso a una lista blanca mediante la siguiente sintaxis (habiendo
definido previamente la acl correspondiente)
“http_access allow nombre_acl”
10. Ramón Jesús Suárez Pérez 2ºASIR
Cambiando el nombre a nuestro proxy
Es posible cambiar el nombre que nuestro proxy muestra a la hora de bloquear el
acceso a cierto contenido.
Para cambiar el nombre a nuestro proxy debemos buscar la linea “visible_hostname”
dentro del fichero “/etc/squid3/squid.conf”. En dicha linea podremos especificar el
nombre de nuestro proxy.
11. Ramón Jesús Suárez Pérez 2ºASIR
Configuración en Webmin
Para poder acceder a configurar squid3 desde Webmin, primero hemos de instalar el
módulo adecuado.
Para ello, nos dirigiremos a:
“Webmin Configuración de Webmin Módulos de Webmin”
Una vez dentro del menú de instalación de módulos de webmin, procederemos a
instalar el módulo estandar “squid”
12. Ramón Jesús Suárez Pérez 2ºASIR
Hecho esto, podremos observar como squid3 dispondrá de un menú de configuración
en webmin bajo el nombre “Squid – Servidor Proxy” dentro de la categoría
“Servidores”.
Tras acceder a dicho menú de administración, haremos clic en la utilidad
“Control de Acceso”.
Una vez dentro del menú de control de acceso podemos observar varias pestañas.
En la pestaña de “listas de control de Acceso” podemos observar las ACLs definidas en
nuestro sistema. Para definir una nueva ACL mediante Webmin, nos dirigiremos a la
parte inferior de la página, donde debemos especificar el tipo de acl y una vez hecho
esto pulsar en “Crear nueva ACL”.
13. Ramón Jesús Suárez Pérez 2ºASIR
La acción anterior lanzará un nuevo formulario html en el que podremos definir los
diferentes parámetros de la ACL. En este caso definición de dominios.
Hecho esto, únicamente tendremos que hacer clic en “Salvar” para almacenar la ACL.
Para aprobar o denegar una determinada ACL, nos dirigiremos a la pestaña
”Restricciones Proxy” y haremos clic en el enlace “Añadir restricción proxy”.
14. Ramón Jesús Suárez Pérez 2ºASIR
A continuación elegiremos la ACL sobre la que queremos trabajar del listado (es
necesario haberla especificado antes mediante el paso anterior) y especificaremos la
acción a realizar (Permitir o Denegar).
Recordemos que la posición de las restricciones llevadas a cabo en nuestro proxy juega
un papel importante en el funcionamiento de este…
Podemos hacer uso de las flechas para cambiar el orden de las acls en el fichero de
configuración.
Las acls deben de especificarse en el fichero de manera ordenada ya que las acls
superiores tendrán prioridad sobre las inferiores.
Recordemos que después de llevar a cabo algún cambio en este servicio será necesario
“Aplicar cambios” y reiniciar Squid3.
15. Ramón Jesús Suárez Pérez 2ºASIR
Comprobación de acl definida desde webmin:
16. Ramón Jesús Suárez Pérez 2ºASIR
Proxy transparente
Para montar nuestro servidor proxy de forma transparente al usuario, será necesario
disponer de un segundo adaptador de red.
En nuestro caso, al estar funcionando con una máquina virtual, podemos agregarlo
fácilmente desde el panel de configuración de este.
Una vez agregado, lo configuraremos de forma manual para asignarle una dirección IP
estática en otra subred.
El archivo de configuración para llevar a cabo esta operación lo encontraremos en:
“/etc/networking/interfaces”
17. Ramón Jesús Suárez Pérez 2ºASIR
Tras reiniciar el servicio de red mediante el comando:
“sudo /etc/init.d/networking restart”
Podremos comprobar mediante la utilidad “ifconfig” que la configuración de red se ha
aplicado de forma correcta.
Una vez configurado nuestro segundo adaptador de forma estática, accederemos al
fichero de configuración de squid3 (/etc/squid3/squid.conf) para activar el modo
transparente añadiendo a la línea “http_port 3128” la cláusula “transparent”.
18. Ramón Jesús Suárez Pérez 2ºASIR
Hecho esto, tras reiniciar el servicio nuestro proxy estará activo de manera invisible
(transparente) para el usuario, de manera que el usuario no tendrá que tener activo el
proxy en su navegador.
Los equipos clientes deberán de utilizar como puerta de enlace la dirección IP de
nuestro segundo adaptador, obligando así a redirigir el tráfico hacia nuestro proxy.
Ahora únicamente faltará realizar unos últimos ajustes para redirigir el tráfico entrante
de nuestra subred (segundo adaptador), hacia nuestro primer adaptador con conexión
a internet a través del puerto 3128 (puerto por defecto de squid3) y viceversa, es decir
montar el puente de conexión para que los clientes de nuestra subred puedan acceder
a internet usando obligatoriamente nuestro proxy.
Esta acción la llevaremos a cabo mediante los siguientes comandos:
19. Ramón Jesús Suárez Pérez 2ºASIR
Podemos valernos del siguiente script si tenemos dificultades a la hora de redirigir
manualmente las conexiones:
#!/bin/sh
# squid server IP
SQUID_SERVER="192.168.1.1"
# 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
20. Ramón Jesús Suárez Pérez 2ºASIR
Si hemos llevado a cabo todas las configuraciones de forma correcta, nuestro proxy
invisible deberá de estar totalmente activo.
Ejemplo de acceso a una web no autorizada (en nuestro caso Facebook)
21. Ramón Jesús Suárez Pérez 2ºASIR
Interesante (Proxy vs Proxy)
Para evitar las acls de dominio de un determinado proxy, podemos hacer uso otro
servidor proxy que no esté denegado en ellas.
Un ejemplo de proxy de los más utilizados para eludir estos controles es:
http://anonymouse.org/
No obstante si el proxy dispone de un filtrado de palabras (lista negra) este método no
funcionará.