Página siguiente Página anterior Índice general

8. Conexión mediante modem y PPP de un proxy/firewall a un ISP

El asunto de conectar una red a internet de modo que uno de los equipos trabaje como un servidor de conexión compartida con tareas de proxy/cache de páginas web y cortafuegos (firewall) de seguridad entre la red interna y externa es un asunto complejo que escapa al objetivo de este documento y que ya han tratado de forma fantástica otros documentos «Como» similares a este. Al final de este documento se pueden encontrar referencias y enlaces.

Aquí tan solo se va a tratar de configurar Diald suponiendo que el equipo ya hace IP-Masquerading, tiene un proxy como Squid o similar trabajando, una conexión con un ISP configurada correctamente y que la seguridad de acceso a puertos TCP/UDP ha sido revisada (fichero /etc/inetd.conf y algunos otros como securetty, host.allow, etc).

Básicamente, se trata de reconfigurar las reglas de enmascaramiento/filtrado/acceso cada vez que cambia el conjunto de interfaces del equipo, es decir, cuando se establece el interface ppp0 y cuando deja de existir. Un buen sitio para hacer esto son los scripts de ip-up e ip-down de pppd.

8.1 Ejemplo para Debian 2.1

En Debian, basta con montar el paquete ipmasq y durante su configuración indicar que se desea que se cambien las reglas de forma sincronizada con pppd. De esta manera, se crean scripts en los directorios /etc/ppp/ip-up.d y /etc/ppp/ip-down.d que llaman a /sbin/ipmasq, un script que analiza las interfaces actuales y hace una configuración sencilla valida en muchos casos, aunque se puede personalizar con facilidad revisando los ficheros de reglas de /etc/ipmasq/rules.

Tan solo es necesario realizar una corrección tras la instalación de este paquete. Se trata de cambiar el orden de ejecución del script de lanzamiento de ipmasq durante el arranque del equipo, eliminandolo del directorio /etc/rcS.d y poniendolo para que se ejecute despues de S20diald en /etc/rc2.d de modo que ya exista la interface sl0. S90ipmasq es un lugar valido para el enlace simbólico a /etc/init.d/ipmasq.

En Debian no es necesario preocuparse de la version del kernel, ya que el script /sbin/ipmasq usa ipfwadm o ipchains según corresponda.

8.2 Ejemplo para Suse 6.1

Este ejemplo se debe a Mr Cornish Rex, troll@tnet.com.au.

Los comandos de control de ip-masp y routing que se presentan a continuación son para kernels de la versión 2.2, mediante ipchains, pero no son válidos para kernels de las versiones 2.0. Para estos ultimos habría que traducir dichos comandos a su equivalente en el antiguo comando ipmasq.

Además, vamos a suponer que la interface ethernet del equipo tiene la dirección 192.168.1.1 con máscara de 16 bits, es decir, 255.255.0.0.

El fichero /etc/ppp/ip-up sería valido de la siguiente forma:

#!/bin/sh
# $1 = Interface
# $2 = Tty device
# $3 = speed
# $4 = local ip
# $5 = remote ip
# $6 = ipparam
/sbin/ipchains -F input
/sbin/ipchains -P input DENY
/sbin/ipchains -A input -j ACCEPT -i eth0 -s 192.168.0.0/16 -d 0.0.0.0/0
/sbin/ipchains -A input -j DENY -p udp -i $1 -s 0.0.0.0/0 -d $4/32 0:52 -l
/sbin/ipchains -A input -j DENY -p udp -i $1 -s 0.0.0.0/0 -d $4/32 54:1023 -l
/sbin/ipchains -A input -j DENY -p tcp -i $1 -s 0.0.0.0/0 -d $4/32 0:112 -l
/sbin/ipchains -A input -j DENY -p tcp -i $1 -s 0.0.0.0/0 -d $4/32 114:1023 -l
/sbin/ipchains -A input -j DENY -p tcp -i $1 -s 0.0.0.0/0 -d $4/32 6000:6010 -l
/sbin/ipchains -A input -j DENY -p icmp --icmp-type echo-request \
-i $1 -s 0.0.0.0/0 -l
/sbin/ipchains -A input -j DENY -p icmp -f -i $1 -s 0.0.0.0/0 -l
/sbin/ipchains -A input -j DENY -p udp -i $1 -s 0.0.0.0/0 -d $4/32 5555 -l
/sbin/ipchains -A input -j DENY -p udp -i $1 -s 0.0.0.0/0 -d $4/32 8000 -l
/sbin/ipchains -A input -j DENY -p tcp -i $1 -s 0.0.0.0/0 -d $4/32 8000 -l
/sbin/ipchains -A input -j DENY -p udp -i $1 -s 0.0.0.0/0 -d $4/32 6667 -l
/sbin/ipchains -A input -j DENY -p tcp -i $1 -s 0.0.0.0/0 -d $4/32 6667 -l
/sbin/ipchains -A input -j DENY -p tcp -i $1 -s 0.0.0.0/0 -d $4/32 4557 -l
/sbin/ipchains -A input -j DENY -p tcp -i $1 -s 0.0.0.0/0 -d $4/32 4559 -l
/sbin/ipchains -A input -j DENY -p tcp -i $1 -s 0.0.0.0/0 -d $4/32 4001 -l
/sbin/ipchains -A input -j DENY -p tcp -i $1 -s 0.0.0.0/0 -d $4/32 2005 -l
/sbin/ipchains -A input -j DENY -p tcp -i $1 -s 0.0.0.0/0 -d $4/32 6711 -l
/sbin/ipchains -A input -j DENY -i $1 -s 192.168.0.0/16 -d 0.0.0.0/0 -l
/sbin/ipchains -A input -j ACCEPT -i $1 -s 0.0.0.0/0 -d $4/32
/sbin/ipchains -A input -j ACCEPT -i lo -s 0.0.0.0/0 -d 0.0.0.0/0
/sbin/ipchains -A input -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0 -l

/sbin/ipchains -F output
/sbin/ipchains -P output DENY
/sbin/ipchains -A output -j ACCEPT -i eth0 -s 0.0.0.0/0 -d 192.168.0.0/16
/sbin/ipchains -A output -j DENY -i $1 -s 192.168.0.0/16 -d 0.0.0.0/0 -l
/sbin/ipchains -A output -j ACCEPT -i $1 -s $4/32 -d 0.0.0.0/0
/sbin/ipchains -A output -j ACCEPT -i lo -s 0.0.0.0/0 -d 0.0.0.0/0
/sbin/ipchains -A output -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0

/sbin/ipchains -F forward
/sbin/ipchains -P forward DENY
/sbin/ipchains -M -S 120 120 120
/sbin/ipchains -A forward -j MASQ -s 192.168.1.0/24 
/sbin/ipchains -A forward -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0

exit 0

El fichero /etc/ppp/ip-down sería valido de la siguiente forma:

#!/bin/sh
# $1 = Interface
# $2 = Tty device
# $3 = Speed
# $4 = Local ip
# $5 = Remote ip
/sbin/ipchains -F input
/sbin/ipchains -F output
/sbin/ipchains -F forward
/sbin/ipchains-restore < /etc/ppp/orig.chains

Y el fichero que aparece al final del script anterior, orig.chains, es el siguiente (el estado original de la configuración de ipchains):

# orig.chains
# creado con: ipchains-save > orig.chains
:input ACCEPT
:forward ACCEPT
:output ACCEPT
-A input -s 0.0.0.0/0.0.0.0 -d 192.168.1.1/255.255.255.255
-A output -s 192.168.1.1/255.255.255.255 -d 0.0.0.0/0.0.0.0

8.3 Ejemplo para Slackware 3.6

Este ejemplo se debe a Hoo Kok Mun, hkmun@pacific.net.sg.

Este es el ejemplo más sencillo que he visto, aunque perfectamente funcional. Desde el principio establece la norma de enmascaramiento, antes de que exista la interface sl0, y no cambia cuando se establece ppp0. Si son necesarias medidas de seguridad, probablemente quede un poco limitado.

#/etc/rc.d/rc.local
/sbin/ipfwadm -F -p deny
/sbin/ipfwadm  -F -a m -S 192.168.0.0/24 -D 0.0.0.0/0

Como se puede ver, es para kernels de la versión 2.0.


Página siguiente Página anterior Índice general