33.6. Configuración de un proxy transparente

Normalmente la forma en la que se trabaja con servidores proxy es la siguiente: el navegador web envía peticiones a un puerto determinado del servidor proxy, y este se encarga de servirle las páginas, se encuentren o no en su caché. A la hora de trabajar con una red real se pueden dar los siguientes casos:

En cualquiera de estos casos se puede utilizar un proxy transparente. El principio es muy sencillo: el proxy intercepta y responde a las peticiones del navegador web, así que el navegador recibirá las páginas solicitadas sin saber exactamente de dónde provienen. El proceso completo se realiza de forma transparente, de ahí el nombre que este procedimiento recibe.

33.6.1. Configuración del kernel

Primero hay que comprobar si el kernel del servidor proxy dispone de soporte para proxy transparente. El kernel incluido en SUSE LINUX ya está configurado en consecuencia. Si no lo soporta, habrá que añadir estas opciones al kernel y compilarlo de nuevo. Puede obtener más información sobre este proceso en el Capítulo 9, El kernel de Linux.

33.6.2. Opciones de configuración en /etc/squid/squid.conf

Para implementar un proxy transparente es necesario activar las siguientes opciones del archivo /etc/squid/squid.conf:

  • httpd_accel_host virtual

  • httpd_accel_port El número de puerto donde se encuentra el servidor HTTP.

  • httpd_accel_with_proxy on

  • httpd_accel_uses_host_header on

33.6.3. Configuración del cortafuegos con SuSEfirewall2

Todas las peticiones que se reciban a través del cortafuegos deben ser redirigidas al puerto de Squid por medio de una norma de reenvío de puertos. Para la configuración utilizaremos la herramienta SuSEfirewall2 incluida en la distribución. El archivo de configuración correspondiente se encuentra en /etc/sysconfig/SuSEfirewall2. Este archivo está formado por diferentes entradas muy bien documentadas. Aunque sólo se quiera implementar un proxy transparente, es necesario configurar algunas opciones del cortafuegos:

  • Dispositivo apuntando a Internet: FW_DEV_EXT="eth1"

  • Dispositivo apuntando a la red: FW_DEV_INT="eth0"

Aquí pueden definirse puertos y servicios (ver /etc/services) del cortafuegos a los que se podrá acceder desde redes no seguras como Internet. En este ejemplo sólo se especifican servicios web hacia el exterior:

   FW_SERVICES_EXT_TCP="www"

Aquí pueden definirse puertos y servicios (ver /etc/services) del cortafuegos a los que se podrá acceder desde la red segura (interna) a través de TCP y UDP:

FW_SERVICES_INT_TCP="domain www 3128"
FW_SERVICES_INT_UDP="domain"

Accedemos a servicios web y al programa Squid (cuyo puerto predeterminado es 3128). El servicio “domain” especificado anteriormente se trata del DNS o Domain Name Service. Lo más normal es utilizar este servicio, pero en caso contrario, se elimina de las entradas superiores y se asigna a la opción siguiente el valor no:

FW_SERVICE_DNS="yes"

La opción más importante es la número 15:

Ejemplo 33.1. Opción 15 de la configuración del cortafuegos

#
# 15.)
# Which accesses to services should be redirected to a local port
# on the firewall machine?
#
# This can be used to force all internal users to surf via your
# Squid proxy, or transparently redirect incoming web traffic to
# a secure web server.
#
# Choice: leave empty or use the following explained syntax of
# redirecting rules, separated with spaces.
# A redirecting rule consists of 1) source IP/net,
# 2) destination IP/net, 3) original destination port and
# 4) local port to redirect the traffic to, separated by a colon,
# e.g. "10.0.0.0/8,0/0,80,3128 0/0,172.20.1.1,80,8080"
#

Los comentarios indican la sintaxis que hay que seguir. En primer lugar, se escribe la dirección IP y la máscara de las “redes internas” de donde vienen nuestros datos. En segundo lugar, la dirección IP y la máscara de red a donde se “dirigen” las peticiones. En el caso de navegadores web, especificaremos la dirección de red 0/0. Este valor es un comodín que significa “a cualquier dirección”. A continuación, el número de puerto original al que fueron dirigidas las peticiones y, finalmente, el puerto a donde redirigimos las peticiones. Como Squid soporta más protocolos además de http, existe la posibilidad de desviar las peticiones dirigidas a otros puertos al proxy, como por ejemplo FTP (puerto 21), HTTPS o SSL (Puerto 443). En el ejemplo dado, los servicios web (puerto 80) se desvían al puerto del proxy (aquí 3128). En el caso de disponer de más redes para añadir, sólo hace falta separar las diferentes entradas con un espacio en blanco en la línea correspondiente.

FW_REDIRECT_TCP="192.168.0.0/16,0/0,80,3128 192.168.0.0/16,0/0,21,3128"
FW_REDIRECT_UDP="192.168.0.0/16,0/0,80,3128 192.168.0.0/16,0/0,21,3128"

Para que el cortafuegos se inicie y con él la nueva configuración, se debe editar una entrada en el archivo /etc/sysconfig/SuSEfirewall2 y asignar el valor "yes" a la entrada START_FW:

Inicie Squid tal y como se describe en la Sección 33.4, “Arrancar Squid”. Para comprobar que todo funciona correctamente, compruebe los archivos de registro de Squid en /var/log/squid/access.log.

Para verificar que todos los puertos están correctamente configurados, se puede realizar un escaneo de puertos en la máquina desde un ordenador que se encuentre fuera de la red local. Sólo deberá estar abierto el puerto de servicios web (80). Para llevar a cabo el portscan se puede utilizar nmap -O dirección_IP.


SUSE LINUX Manual de administración 9.3