Saltar la navegación

10.4.5. Cortafuegos y Proxy-caché en un sólo equipo

10.4.5.1. Proxies transparentes

Muchas organizaciones (incluyendo empresas, colegios y familias) usan los proxies para reforzar las políticas de uso de la red o para proporcionar seguridad y servicios de caché. Normalmente, un proxy Web o NAT no es transparente a la aplicación cliente: debe ser configurada para usar el proxy, manualmente. Por lo tanto, el usuario puede evadir el proxy cambiando simplemente la configuración.

../_images/tema11-030.png

Configuración de proxy en Firefox

../_images/tema11-031.png

Configuración de proxy en Internet Explorer

Un proxy transparente combina un servidor proxy con un cortafuegos de manera que las conexiones son interceptadas y desviadas hacia el proxy sin necesidad de configuración en el cliente, y habitualmente sin que el propio usuario conozca de su existencia.

Además, suele ser frecuente en el proxy-caché la instalación de un servicio de control de acceso a la web y algún antivirus de red. El control de acceso a la web normalmente se implementa mediante algún tipo de software de filtrado por contenido (además de URL e IP, puede bloquear accesos a páginas web según el contenido de estás (palabras desagradables, obscenas o similares e incluso por imágenes -aunque esté último método suele dar peores resultados-). Un software libre muy utilizado para ello es Dansguardian y sus listas negras asociadas.

../_images/tema11-032.png

Squid + Dansguardian.png

A continuación se muestra un ejemplo de script Linux para cortafuegos con reglas activadas para habilitar un proxy-transparente. Básicamente lo que hace es dirigir todas las petición a puertos destino 80 (web), 3128 (cliente despistado con configuración manual de proxy) y algunos otros puertos que nos interesen al puerto 8080 (dansguardian) donde tenemos el filtro de contenido.

#!/bin/sh
### BEGIN INIT INFO
# Provides:          cortafuegos
# Required-Start:    balanceo-de-carga
# Required-Stop:
# Should-Start:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Cortafuegos para IES Guadalpeña - Dpto. Informática
# Description:       Cortafuegos contiene las reglas de iptables que se aplicarán
#                    después de la configuración del soporte de red o networking
#                    y del balanceo de carga (si está habilitado).
#                    Proporciona redirección de puertos en el canal PREROUTING
#                    para dar soporte a un proxy transparente.
### END INIT INFO


# Variables generales
PATH=/sbin:/usr/sbin:/bin:/usr/bin
NAME=cortafuegos
PIDFILE=/var/run/$NAME.pid

# Variables de red
IF_ADSL1="p1p1"            # Interface conectada a ADSL1
IF_ADSL2="p4p1"            # Interface conectada a ADSL2
IF_LOCAL="p2p1"            # Interface conectada a la LAN
IP_ADSL1="192.168.1.2"     # IP de la IF_ADSL1
IP_ADSL2="192.168.2.2"     # IP de la IF_ADLS2
IP_LOCAL="10.0.0.1"        # IP de la IF_LOCAL, Gateway Local
NET_ADSL1="192.168.1.0/24" # Red para IF_ADSL1
NET_ADSL2="192.168.2.0/24" # Red para IF_ADLS2
NET_LOCAL="10.0.0.0/8"     # Red para IF_LOCAL
GW_ADSL1="192.168.1.1"     # Gateway para ADSL1
GW_ADSL2="192.168.2.1"     # Gateway para ADSL2


###### START
do_start () {
  # Reglas de iptables
  echo "Limpiando Reglas Anteriores..."
  iptables -F
  iptables -X
  iptables -Z
  iptables -t nat -F
  iptables -t mangle -F

  # Ahora hago el NAT
  echo "Activando NAT ..."
  echo 1 > /proc/sys/net/ipv4/ip_forward
  # iptables -t nat -A POSTROUTING -s ${NET_LOCAL} -o ${IF_ADSL1} -j MASQUERADE
  # iptables -t nat -A POSTROUTING -s ${NET_LOCAL} -o ${IF_ADSL2} -j MASQUERADE
  iptables -t nat -A POSTROUTING -o ${IF_ADSL1} -j SNAT --to-source ${IP_ADSL1}
  iptables -t nat -A POSTROUTING -o ${IF_ADSL2} -j SNAT --to-source ${IP_ADSL2}

  # Redirecciono al Proxy
  echo "Creando reglas para proxy transparente..."
  iptables -t nat -A PREROUTING -i ${IF_LOCAL} -p tcp --dport http      -j DNAT --to ${IP_LOCAL}":8080"
  iptables -t nat -A PREROUTING -i ${IF_LOCAL} -p tcp --dport 81        -j DNAT --to ${IP_LOCAL}":8080"
  iptables -t nat -A PREROUTING -i ${IF_LOCAL} -p tcp --dport 8080:8099 -j DNAT --to ${IP_LOCAL}":8080"
  iptables -t nat -A PREROUTING -i ${IF_LOCAL} -p tcp --dport 3128:3130 -j DNAT --to ${IP_LOCAL}":8080"

  #echo "Reglas Aplicadas"
}


###### STATUS
do_status () {
  echo "Listado de Reglas activas"
  iptables -L -n -v
  iptables -t nat -L -n -v
  iptables -t mangle -L -n -v
}


###### STOP
do_stop () {
  echo "Limpiando Reglas anteriores..."
  iptables -F
  iptables -X
  iptables -Z
  iptables -t nat -F
  iptables -t mangle -F
}


case "$1" in
  start|"")
        do_start
        ;;
  restart)
        do_stop
        do_start
        ;;
  reload|force-reload)
        echo "Error: el argumento '$1' no está soportado" >&2
        exit 3
        ;;
  stop)
        do_stop
        ;;
  status)
        do_status
        ;;
  *)
        echo "Uso: cortafuegos [start|stop|restart|status]" >&2
        exit 3
        ;;
esac
: