next up previous contents
Siguiente: Servicios requeridos Subir: El núcleo y el Anterior: El núcleo y el   Índice General

startsectionparagraph4@-3.25ex plus -1ex minus -.2ex1.5ex plus .2exConfiguración de red

El equipo terminador de túneles IPSec cuenta con una sola interfaz de red física conectada a la red privada de la universidad, y con una sola dirección IP pública con la que accede tanto al exterior como al interior de la red. La configuración concreta es la siguiente:

minimum root # ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:00:24:C8:0A:98
          inet addr:193.147.184.193  Bcast:193.147.184.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:14905358 errors:3 dropped:0 overruns:0 frame:0
          TX packets:534587 errors:3999 dropped:0 overruns:0 carrier:3999
          collisions:32135 txqueuelen:1000
          RX bytes:1438569655 (1371.9 Mb)  TX bytes:48817647 (46.5 Mb)
          Interrupt:5 Base address:0xe800
minimum root # route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
193.147.184.0   0.0.0.0         255.255.255.0   U     0      0        0 eth0
127.0.0.0       127.0.0.1       255.0.0.0       UG    0      0        0 lo
0.0.0.0         193.147.184.1   0.0.0.0         UG    0      0        0 eth0

Para que esta configuración se aplique automáticamente al arrancar la máquina, modificamos el fichero de configuración /etc/conf.d/net:

# configuración del interfaz de red
iface_eth0="193.147.184.193 broadcast 193.147.184.255 netmask 255.255.255.0"
# gateway por defecto de la red
gateway="eth0/193.147.184.1"

Gentoo proporciona scripts para activar o desactivar los interfaces de red de forma automática. Utilizándolos resulta trivial conseguir que esta configuración se aplique en el arranque del PC:

minimum root # rc-update add net.eth0 default

Una vez configurada la red, podemos proceder a configurar el cortafuegos que filtrará el tráfico del terminador de túneles. Para empezar, es fundamental activar la opción del núcleo de redirección de IP (IP Forwarding) y desactivar la comprobación de la ruta de origen de los paquetes IP (sin hacer esto último IPSec no funcionará correctamente). Podemos hacerlo interactivamente de forma sencilla:

minimum root # echo 1 > /proc/sys/net/ipv4/ip_forward
minimum root # for f in /proc/sys/net/ipv4/conf/*/rp_filter 
> do echo 1 > $f
> done

Nuevamente, deseamos que estos cambios se realicen de forma automática al arrancar el servidor, sin necesidad de la intervención de un operador, por lo que modificamos el fichero /etc/sysctl.conf:

# Habilitamos la redireccion de paquetes
net.ipv4.ip_forward = 1
# Deshabilitamos ECN
net.ipv4.tcp_ecn = 0
# Habilitamos la verificacion de la ruta origen
net.ipv4.conf.default.rp_filter = 0

Nos aseguramos de que el módulo ipsec (recordemos que hemos habilitado el soporte IPSec en el núcleo en forma de módulo, no como parte del mismo. En caso contrario no sería necesario este paso) se cargue al arrancar el sistema operativo:

minimum root # echo ipsec >> /etc/modules.autoload.d/kernel-2.4

Dado que como ya se ha dicho, la maqueta no cuenta con teclado ni monitor conectados, la única forma de trabajar con ella se reduce a alguna forma de acceso remoto. En particular SSH3.4 es fundamental para nuestros propósitos, por lo que instalamos un servidor:

minimum root # emerge openssh

y modificamos su fichero de configuración /etc/ssh/sshd_config adecuadamente:

Port 22
Protocol 2
ListenAddress 193.147.184.193

# Logging
#obsoletes QuietMode and FascistLogging
SyslogFacility AUTH
LogLevel INFO

# Authentication:

#LoginGraceTime 2m
PermitRootLogin yes
#StrictModes yes

# Set this to 'yes' to enable PAM authentication (via challenge-response)
# and session processing. Depending on your PAM configuration, this may
# bypass the setting of 'PasswordAuthentication' and 'PermitEmptyPasswords'
UsePAM yes

# override default of no subsystems
#Subsystem      sftp    /usr/lib/misc/sftp-server

Lo arrancamos y le indicamos al sistema que lo arranque al iniciarse el sistema operativo:

minimum root # /etc/init.d/sshd start
 * Starting sshd...                                      [ ok ]
minimum root # rc-update add sshd default

En todo momento podemos comprobar el estado de los servicios del nivel por defecto de ejecución con el comando rc-status. Una vez llegados a este punto, configuraremos un cortafuegos mediante iptables para asegurar los accesos al PC terminador de túneles. Creamos un sencillo script que nos permita modificar rápidamente estas reglas, y lo probamos simplemente ejecutándolo:

#!/bin/bash
IPTABLES='/sbin/iptables'
# Interfaces
EXTIF='eth0'
IPSECIF='ipsec+'
# IP's de interés
PUBIP='193.147.184.193'
# Terminadores túneles IPSec Telefónica
TERM1='195.55.47.10'
TERM2='195.55.47.11'
# Radius de la universidad
RADIUS1='193.147.184.3'
RADIUS2='193.147.184.22'
# DNS de la universidad
DNS1='193.147.184.2'
DNS2='193.147.71.64'
# Pools de usuarios de la VPN
POOLGSM='193.147.59.160/27'

# Habilitamos IP forwarding en el núcleo
/bin/echo 1 > /proc/sys/net/ipv4/ip_forward

# Eliminar reglas y cadenas
$IPTABLES -F
$IPTABLES -X

##
## ADMINISTRACIÓN DE SERVICIOS
##
# Acceso para el servicio ssh
$IPTABLES -A INPUT -s 193.147.184.0/24 -d $PUBIP -i $EXTIF \
 -p tcp --sport 1024:65535 --dport 22 -j ACCEPT
$IPTABLES -A INPUT -s 193.147.72.0/24 -d $PUBIP -i $EXTIF \
 -p tcp --sport 1024:65535 --dport 22 -j ACCEPT

# Acceso a los interfaces telnet de administración de zebra y ripd
$IPTABLES -A INPUT -s 193.147.184.0/24 -d $PUBIP -i $EXTIF \
 -p tcp --sport 1024:65535 --dport 2601 -j ACCEPT
$IPTABLES -A INPUT -s 193.147.72.0/24 -d $PUBIP -i $EXTIF \
 -p tcp --sport 1024:65535 --dport 2601 -j ACCEPT
$IPTABLES -A INPUT -s 193.147.184.0/24 -d $PUBIP -i $EXTIF \
 -p tcp --sport 1024:65535 --dport 2602 -j ACCEPT
$IPTABLES -A INPUT -s 193.147.72.0/24 -d $PUBIP -i $EXTIF \
 -p tcp --sport 1024:65535 --dport 2602 -j ACCEPT

# Bloqueamos el acceso desde la VPN a los servicios del gateway
$IPTABLES -A INPUT -d $PUBIP -i $IPSECIF -p tcp \
 --dport 22 -j DROP
$IPTABLES -A INPUT -d $PUBIP -i $IPSECIF -p tcp \
 --dport 2601 -j DROP
$IPTABLES -A INPUT -d $PUBIP -i $IPSECIF -p tcp \
 --dport 2602 -j DROP

##
## Servicios públicos
##
# Acceso UDP al demonio RIP
$IPTABLES -A INPUT -d $PUBIP -i $EXTIF -p udp \
 --dport 520 -j ACCEPT

# Acceso consultas Radius
$IPTABLES -A INPUT -s $TERM1 -d $PUBIP -p udp \
 --dport 1812 -j ACCEPT
$IPTABLES -A INPUT -s $TERM2 -d $PUBIP -p udp \
 --dport 1812 -j ACCEPT
$IPTABLES -A INPUT -s $RADIUS1 -d $PUBIP -p udp \
 --dport 1812 -j ACCEPT
$IPTABLES -A INPUT -s $RADIUS2 -d $PUBIP -p udp \
 --dport 1812 -j ACCEPT

# Permitimos protocolo ESP de IPSec
$IPTABLES -A INPUT -s $TERM1 -d $PUBIP -p esp -j ACCEPT
$IPTABLES -A INPUT -s $TERM2 -d $PUBIP -p esp -j ACCEPT

# Permitimos las transacciones IKE
$IPTABLES -A INPUT -s $TERM1 -d $PUBIP -p udp --sport 500 \
 --dport 500 -j ACCEPT
$IPTABLES -A INPUT -s $TERM2 -d $PUBIP -p udp --sport 500 \
 --dport 500 -j ACCEPT

# Permitimos el tráfico entre las VPN y la red de la universidad
$IPTABLES -A INPUT -d $POOLGSM -i $EXTIF -j ACCEPT
$IPTABLES -A INPUT -s $POOLGSM -i $IPSECIF -j ACCEPT

# Permitimos consultas DNS con los servidores privados
$IPTABLES -A INPUT -s $DNS1 -d $PUBIP -i $EXTIF -p udp \
 --sport 53 -j ACCEPT
$IPTABLES -A INPUT -s $DNS2 -d $PUBIP -i $EXTIF -p udp \
 --sport 53 -j ACCEPT

# Permitimos el tráfico originado desde el terminador
# (conexiones TCP ya abiertas)
$IPTABLES -A INPUT -d $PUBIP -i $EXTIF -p tcp \
 ! --tcp-flags SYN,RST,ACK SYN -j ACCEPT

# Bloqueamos todo el tráfico
$IPTABLES -A INPUT -i $EXTIF -p tcp -j DROP
$IPTABLES -A INPUT -i $EXTIF -p udp -j DROP

Verificamos el correcto funcionamiento de la red una vez ejecutado este script, y comprobamos que las reglas se han aplicado correctamente:

minimum root # iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  193.147.184.0/24     193.147.184.193
     tcp spts:1024:65535 dpt:22
ACCEPT     tcp  --  193.147.72.0/24      193.147.184.193
     tcp spts:1024:65535 dpt:22
ACCEPT     tcp  --  193.147.184.0/24     193.147.184.193
     tcp spts:1024:65535 dpt:2601
ACCEPT     tcp  --  193.147.72.0/24      193.147.184.193
     tcp spts:1024:65535 dpt:2601
ACCEPT     tcp  --  193.147.184.0/24     193.147.184.193
     tcp spts:1024:65535 dpt:2602
ACCEPT     tcp  --  193.147.72.0/24      193.147.184.193
     tcp spts:1024:65535 dpt:2602
DROP       tcp  --  0.0.0.0/0            193.147.184.193
     tcp dpt:22
DROP       tcp  --  0.0.0.0/0            193.147.184.193
     tcp dpt:2601
DROP       tcp  --  0.0.0.0/0            193.147.184.193
     tcp dpt:2602
ACCEPT     udp  --  0.0.0.0/0            193.147.184.193
     udp dpt:520
ACCEPT     udp  --  195.55.47.10         193.147.184.193
     udp dpt:1812
ACCEPT     udp  --  195.55.47.11         193.147.184.193
     udp dpt:1812
ACCEPT     udp  --  193.147.184.3        193.147.184.193
     udp dpt:1812
ACCEPT     udp  --  193.147.184.22       193.147.184.193
     udp dpt:1812
ACCEPT     esp  --  195.55.47.10         193.147.184.193
ACCEPT     esp  --  195.55.47.11         193.147.184.193
ACCEPT     udp  --  195.55.47.10         193.147.184.193
     udp spt:500 dpt:500
ACCEPT     udp  --  195.55.47.11         193.147.184.193
     udp spt:500 dpt:500
ACCEPT     all  --  0.0.0.0/0            193.147.59.160/27
ACCEPT     all  --  193.147.59.160/27    0.0.0.0/0
ACCEPT     udp  --  193.147.184.2        193.147.184.193
     udp spt:53
ACCEPT     udp  --  193.147.71.64        193.147.184.193
     udp spt:53
ACCEPT     tcp  --  0.0.0.0/0            193.147.184.193
     tcp flags:!0x16/0x02
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0
DROP       udp  --  0.0.0.0/0            0.0.0.0/0

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Si todo está correcto, guardamos el estado de las reglas actuales, y configuramos iptables para que se ejecute al inicio:

 minimum root # /etc/init.d/iptables save
 minimum root # rc-update add iptables default

El funcionamiento de este cortafuegos es muy básico. Simplemente nos aseguramos de que sólo usuarios de subredes autorizadas de la universidad (la red de servidores y la de trabajadores de Servicios Centrales) tienen acceso a la administración de servicios que existirán en este PC. Esto incluye tanto SSH como los interfaces telnet de configuración de Zebra y RIP, que veremos más adelante. Prohibimos el acceso a estos servicios también a los usuarios de la VPN. Permitimos el acceso al demonio del protocolo RIP y al Radius delegado, desde las direcciones IP necesarias. Permitimos la entrada de datagramas IP conteniendo paquetes con el protocolo ESP, que se corresponderán con tráfico IPSec, desde las direcciones legítimas de los terminadores de túneles de Telefónica. Permitimos por último el tráfico al puerto 500 UDP desde dichos terminadores, utilizado para las transacciones del protocolo IKE. Por último, denegamos el resto del tráfico en su totalidad.


next up previous contents
Siguiente: Servicios requeridos Subir: El núcleo y el Anterior: El núcleo y el   Índice General
Jaime Perez Crespo 2005-02-09