Ejercicios de Seguridad en Redes. Firewalls y t´ uneles cifrados ´ Indice

Anuncio
Ejercicios de Seguridad en Redes. Firewalls y túneles cifrados
SSI 2011/12
31 de octubre de 2011
Índice
1. Entorno de prácticas
1
1.1. Software de virtualización VirtualBOX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1.2. Imágenes a utilizar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
1.3. Establecer el entorno virtualizado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
2. Ejercicio 1: Configuración de una DMZ (DeMilitarized Zone) usando el firewall netfilter/iptables
4
2.1. Descripción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
2.2. Tareas a realizar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
2.2.1. Restriciones de acceso a implementar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
2.2.2. Pasos a seguir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
3. Ejercicio 2: Uso de enlaces cifrados OpenVPN y configuración del firewall Shorewall
10
3.1. Parte 1: Creación de un enlace OpenVPN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
3.1.1. Pasos a seguir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
3.2. Parte 2: Configuración del firewall con Shorewall (Shoreline Firewall) . . . . . . . . . . . . . . . . . . .
13
3.2.1. Pasos a seguir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
3.3. Parte 3: Integración del enlace OpenVPN con Shorewall . . . . . . . . . . . . . . . . . . . . . . . . . .
16
3.3.1. Pasos a seguir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
3.4. Anexo 2:
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4. Documentación y entrega
1.
1.1.
17
17
Entorno de prácticas
Software de virtualización VirtualBOX
En estas prácticas se empleará el software de virtualización VirtualBOX para simular pequeñas redes formadas por
equipos GNU/Linux.
Página principal: http://virtualbox.org
Más información: http://es.wikipedia.org/wiki/Virtualbox
1
1.2.
Imágenes a utilizar
Imágenes de partida (comunes a todas las MVs) [son las mismas de la práctica anterior]
Imagen comprimida: base.vdi.gz [740 MB comprimida], base.vdi.zip [740 MB comprimida]
Imagen del área de intercambio (SWAP): swap.vdi.gz [156 KB comprimida, swap.vdi.zip [156 KB comprimida]
Usuarios configurados:
login
root
usuario1
usuario2
1.3.
password
purple
usuario1
usuario2
Establecer el entorno virtualizado
Creación de las redes donde se realizarán los ejercicios:
Red interna (10.10.10.0 ... 10.10.10.255): máquina dentro (eth0) + interfaz eth0 de firewall3
Red DMZ (10.20.20.0 ... 10.20.20.255): máquina dmz (eth0) + interfaz eth1 de firewall3
Red externa (193.147.87.0 ... 193.147.87.255): máquina fuera (eth0) + interfaz eth2 de firewall3
1. Se partirá de las imágenes base VirtualBOX utilizadas en el ejercicio anterior
Si no se hizo para la práctica anterior, descomprimirlas y registrarlas
2
gunzip base.vdi.gz
gunzip swap.vdi.gz
2. Configurar y registrar las máquinas virtuales en VirtualBOX (sólo la primera vez)
Script de configuración y arranque:
ejercicio-iptables.sh
ejercicio-iptables.bat (pendiente)
Nota: ejecutar desde el directorio donde se hayan descomprimido las imágenes
$ bash ejercicio-iptables.sh
3. Arrancar las instancias VirtualBOX (desde el interfaz gráfico o desde la lı́nea de comandos)
VBoxManage
VBoxManage
VBoxManage
VBoxManage
startvm
startvm
startvm
startvm
FUERA
DENTRO
DMZ
FIREWALL3
Importante: Después de finalizar cada ejercicio terminar la ejecución de cada una de las máquinas virtuales
desde lı́nea de comandos con halt o desde el interfaz gráfico LXDE.
4. Comprobar las redes establecidas.
Acceder a firewall3 como ”root” (password ”purple”)
Comprobar la asignación de direcciones IP con ifconfig -a
firewall3:~# ifconfig -a
Comprobar las redes haciendo ping a las otras máquinas
firewall3:~# ping 193.147.87.33
firewall3:~# ping 10.10.10.11
firewall3:~# ping 10.20.20.22
En caso de error, asegurar que la asignación de direciones IP es la correcta.
Nota: En caso de confusión, para identificar el equipo concreto se puede usar ifconfig -a para comprobar las dirección
MAC asociadas a cada interfaz de red.
Red interna
Red externa
Red DMZ
DENTRO
08:00:27:11:11:11
. . .
. . .
DMZ
. . .
08:00:27:22:22:22
. . .
FUERA
. . .
. . .
08:00:27:33:33:33
FIREWALL3
08:00:27:44:44:44
08:00:27:55:55:55
08:00:27:66:66:66
en dentro
en fuera
en firewall
con MAC 08:00:27:11:11:11 (eth0)
con MAC 08:00:27:33:33:33 (eth0)
# ifconfig eth0 10.10.10.11
# hostname dentro
# route add default gw 10.10.10.1
# ifconfig eth0 193.147.87.33
# hostname fuera
# route add default gw 193.147.87.47
con MAC 08:00:27:44:44:44 (eth0)
con MAC 08:00:27:55:55:55 (eth1)
con MAC 08:00:27:66:66:66 (eth2)
en dmz
con MAC 08:00:27:22:22:22 (eth0)
# ifconfig eth0 10.20.20.22
# hostname dmz
# route add default gw 10.20.20.1
#
#
#
#
#
ifconfig
ifconfig
ifconfig
hostname
echo 1 >
eth0 10.10.10.1
eth0 10.20.20.1
eth1 193.147.87.47
firewall3
/proc/sys/net/ipv4/ip_forward
En el equipo dentro (10.10.10.11) se modifica la tabla de enrutado para establecer como gateway para
la ruta por defecto (direcciones fuera de la red 10.10.10.0) al firewall3 (10.10.10.1).
3
En el equipo (10.20.20.22) se modifica la tabla de enrutado para establecer como gateway para la ruta
por defecto (direcciones fuera de la red 10.20.20.0) al firewall3 (10.20.20.1).
En el equipo firewall3 (10.10.10.1, 10.20.20.1 y 193.147.87.47) se habilita el reenvio de paquetes, para
que pueda realizar funciones de encaminamiento (router).
Nota 1: El interfaz de red asignado (eth0, eth1, ...) puede variar de unas ejecuciones a otras. Se puede
comprobar cúal está activo con el comando ’’ifconfig -a’’
Nota 2: Estas configuraciones son temporales, para que se mantengan al volver a arrancar es necesario configurar
una conexión estática en el fichero /etc/network/interfaces.
5. Habilitar la redirección de tráfico en la máquina firewall3 [10.10.10.1, 10.20.20.1, 193.147.87.47]
firewall3:~#
echo 1 > /proc/sys/net/ipv4/ip_forward
6. Arrancar los servicios a utilizar (el servidor ssh está activado por defecto).
dentro:~# /etc/init.d/mysqld start
dentro:~# /etc/init.d/openbsd-inetd start
dmz:~# /etc/init.d/apache2 start
dmz:~# /etc/init.d/postfix start
dmz:~# /etc/init.d/dovecot start
(servidor web)
(servidor smtp)
(servidor pop3)
fuera:~# /etc/init.d/apache2 start
fuera:~# /etc/init.d/openbsd-inetd start
2.
2.1.
Ejercicio 1: Configuración de una DMZ (DeMilitarized Zone) usando
el firewall netfilter/iptables
Descripción
Se desarrollarán una serie de ejercicios para comprobar el funcionamiento y la configuración del firewall del kernel de
Linux netfilter/iptables.
El entorno de trabajo contará con un firewall con 3 interfaces que separa una red externa insegura de dos redes internas
que definen 2 zonas de seguridad: la red interna (confiable) y la zona desmilitarizada (DMZ) (no confiable).
Sobre este cortafuegos se experimentará con polı́ticas de filtrado y traducción de direcciones.
2.2.
Tareas a realizar
El primer ejercicio consistirá en la configuración de las reglas de filtrado y NAT de netfilter empleando la herramienta
de lı́nea de comandos iptables.
Página del proyecto netfilter: http://netfilter.org
Manual y opciones detalladas: http://iptables-tutorial.frozentux.net
(Versión PDF en español: http://ccia.ei.uvigo.es/docencia/SSI/practicas/iptables-tutorial.es.pdf)
Manual y ejemplos de uso de iptables (en español): http://www.pello.info/filez/firewall/iptables
La configuración se hará mediante scripts bash que contendrán los comandos iptables necesarios.
4
Nota: En el directorio ”/root/iptables/” se proporciona un esquema para un posible
script Bash a utilizar en el ejercicio.
Recibe un parámetro (stop y stop)
firewall3:~# cd /root/iptables/
firewall3:~# ./firewall-iptables.sh stop
firewall3:~# ./firewall-iptables.sh start
(recupera la configuración inicial de netfilter)
(lanza los comandos iptables que definen las reglas del firewall)
Podrı́a utilizarse directamente como un script de arranque (opcional)
Para Debian (como root)
firewall3:~# cp firewall-iptables.sh /etc/init.d
firewall3:~# update-rc.d firewall-iptables.sh defaults
firewall3:~# update-rc.d firewall-iptables.sh remove
2.2.1.
(copia el script en /etc/init.d)
(crea los links desde /etc/rcX.d)
(elimina los links desde /etc/rcX.d)
Restriciones de acceso a implementar
1. Enmascaramiento (SNAT) de la red interna (10.10.10.0/24) y de la DMZ (10.20.20.0/24)
2. Redireccionamiento (DNAT) de los servicios públicos que ofrecerá la red hacia la máquina dentro (10.20.20.22)
de la DMZ
a) peticiones WEB (http y https)
b) tráfico de correo saliente (smtp) y entrante (pop3)
3. Control de tráfico con polı́tica ”denegar por defecto” (DROP)
a) desde la red externa sólo se permiten las conexiones hacia la DMZ contempladas en las redirecciones del
punto anterior (http, https, smtp, pop3)
b) desde la red interna hacia la red externa sólo se permite tráfico de tipo WEB y SSH
c) desde la red interna hacia la DMZ sólo se permite tráfico WEB (http, https), e-mail (smtp, pop3) y SSH
d ) desde la máquina dmz (10.20.20.22) se permiten conexiones MySQL hacia la máquina dentro (10.10.10.11)
de la red interna
e) se permite la salida a la red externa de las consultas DNS originadas en la red interna
f ) firewall sólo admite conexiones SSH desde la red interna
4. Registro (log) de intentos de acceso no contemplados desde red externa a firewall3 (193.147.87.47) y a equipos
internos con la etiqueta Acceso no autorizado
5. Limitar el tráfico de control ICMP recibido desde la red externa para mitigar posibles ataques DOS (denial of
service)
Nota: Antes de hacer las pruebas: habilitar acceso exterior a MySQL en la máquina dentro(10.10.10.11) y arrancar
el servidor.
dentro~# leafpad /etc/mysql/my.cf
(comentar la linea donde aparece bind-address 127.0.0.1)
...
# bind-address 127.0.0.1
...
dentro~# /etc/init.d/mysql start
5
2.2.2.
Pasos a seguir
1. Comprobar la configuración actual de firewall3
firewall3:~# iptables -L
firewall3:~# iptables -t nat -L
2. Comprobar el tipo de tráfico admitido inicialmente
Probar conexión telnet hacia el exterior y conexión WEB hacia el interior
dentro~# telnet 193.147.87.33
fuera:~# lynx 193.147.87.47
fuera:~# lynx 10.20.20.22
Comprobar servicios abiertos
fuera:~# nmap -T4 10.10.10.11 10.20.20.22 193.147.87.47
dentro:~# nmap -T4 10.20.20.22 193.147.87.33
dmz:~#
nmap -T4 10.10.10.11 193.147.87.33
3. Esquema general del script a emplear
-
Borrado de la reglas actuales y reinicio de contadores
Establecimiento de polı́ticas por defecto
Reglas de NAT
Reglas de filtrado (red interna, firewall, ...)
Importante: En este ejemplo se emplearán polı́ticas de filtrado con comportamiento de denegar por defecto
(drop).
Se complica ligeramente la definición de la reglas:
Hay que habilitar explı́citamente los servicios y redirecciones admitidos
Es necesario tener en cuenta el tráfico en ambos sentidos, tenemos 2 opciones:
• Opción 1: habilitar explı́citamente el tráfico en ambos sentidos
Para cada servicio autorizado definiremos un par de reglas: una para permitir el tráfico de peticiones y
otra para el tráfico de sus respectivas respuestas
• Opción 2: usar las capacidades de connection tracking (firewall con estado) de netfilter
El filtrado de servicios se realizará controlando los paquetes de inicio de tráfico/conexión.
El tráfico de respuesta o relacionado con tráfico/conexiones ya inicadad se aceptará todo.
En este ejemplo usaremos la aproximación 2.
Script de partida (”firewall-iptables.sh”)
#!/bin/bash
#VARIABLES
eth_INT=eth0
eth_DMZ=eth1
eth_EXT=eth2
RED_INTERNA=10.10.10.0/24
RED_DMZ=10.20.20.0/24
case "$1" in
start)
6
# Borrar
iptables
iptables
iptables
iptables
reglas anteriores
-F
-X
-Z
-t nat -F
y reiniciar las tablas actuales
# Establecer politicas por defecto (DESCARTAR)
iptables -P INPUT DROP
# descartar entradas al firewall
iptables -P OUTPUT DROP
# descartar salidas del firewall
iptables -P FORWARD DROP
# descartar reenvios a traves del firewall
# Habilitar retransmisión de paquetes
echo 1 > /proc/sys/net/ipv4/ip_forward
# Permitir todo al interfaz local del firewall (loopback)
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# Permitir el trafico de conexiones ya establecidas (el control de tráfico se hace al inicar las conexiones)
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
# 2.1 Establecer NAT de red interna y DMZ (SNAT, enmascaramiento)
# <<< COMPLETAR AQUI
# 2.2 Establecer redireccionamientos hacia DMZ (DNAT)
# <<< COMPLETAR AQUI
# 3 Reglas de filtrado del tráfico
# <<< COMPLETAR AQUI
;;
stop)
# Borrar
iptables
iptables
iptables
iptables
reglas anteriores
-F
-X
-Z
-t nat -F
y reiniciar las tablas actuales
# Establecer politicas por defecto (ACEPTAR)
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
;;
restart)
$0 stop
$0 start
;;
status)
iptables -L
;;
*)
echo "Uso:
;;
firewall-iptables.sh {start|stop}"
esac
4. Añadir reglas para establecer NAT y habilitar redirecciones
eth0: interfaz conectado a la red interna (10.10.10.0/24)
eth1: interfaz conectado a la red DMZ (10.20.20.0/24)
eth2: interfaz conectado a la red externa (193.147.87.0/24)
# 2.1 Establecer NAT de red interna y DMZ (SNAT, enmascaramiento)
7
# SNAT (enmascaramiento de lo que sale de red interna 10.10.10.0/24) hacia exterior
iptables -t nat -A POSTROUTING -s $RED_INTERNA -o $eth_EXT -j MASQUERADE
# SNAT (enmascaramiento de lo que sale de red DMZ 10.20.20.0/24) hacia exterior
iptables -t nat -A POSTROUTING -s $RED_DMZ -o $eth_EXT -j MASQUERADE
# 2.2 Establecer redireccionamientos hacia DMZ (DNAT)
# DNAT (redireccionamiento servicio HTTP [puerto 80, 443] a red DMZ)
iptables -t nat -A PREROUTING -i $eth_EXT -p tcp --dport 80 -j DNAT --to-destination 10.20.20.22
iptables -t nat -A PREROUTING -i $eth_EXT -p tcp --dport 443 -j DNAT --to-destination 10.20.20.22
# DNAT (redireccionamiento servicio SMTP [puerto 25] y POP3 [puerto 110] a red DMZ)
iptables -t nat -A PREROUTING -i $eth_EXT -p tcp --dport 25 -j DNAT --to-destination 10.20.20.22
iptables -t nat -A PREROUTING -i $eth_EXT -p tcp --dport 110 -j DNAT --to-destination 10.20.20.22
## NOTA: Con el módulo multiport podrı́a hacerse con una sola regla
## iptables -t nat -A PREROUTING -i $eth_EXT -p tcp -m multiport --dports 80,443,25,110 \
##
-j DNAT --to-destination 10.20.20.22
# 3 Reglas de filtrado del tráfico
# REGLA TEMPORAL: permite todo el tráfico a través del firewall (sólo para pruebas con NAT)
iptables -A FORWARD -j ACCEPT
Comprobaciones:
a) Lanzar el script del firewalll
firewall3:~# /root/iptables/firewall-iptables.sh start
b) Comprobar la configuración actual de firewall
firewall3:~# iptables -L
firewall3:~# iptables -t nat -L
c) Realizar conexión telnet desde dentro (10.10.10.11) a fuera (193.147.87.33)
dentro:~# telnet 193.147.87.33
Trying 193.147.87.33 ...
Connected to fuera.
Escape character is ’^]’.
Linux 2.6.18-6-686 (193.147.87.33) (pts/18)
login: usuario1
Password: usuario1
d ) En fuera (193.147.87.33), verificar las conexiones establecidas actualmente
fuera:~# netstat -t
ó
fuera:~# w
e) Realizar conexion web desde el equipo fuera (193.147.87.33) hacia firewall3 (193.147.87.47)
fuera:~# lynx 193.147.87.47
5. Script final (”firewall-iptables.sh”)
Sobre el script anterior:
Quitar la regla temporal (iptables -A FORWARD -j ACCEPT)
8
Añadir las siguientes reglas para filtrado de tráfico:
# 3. Reglas de filtrado del tráfico
# Limitar tráfico ICMP (permitir hasta un maximo de 5 peticiones/segundo)
iptables -A INPUT -p icmp -m limit --limit 5/second -j ACCEPT
iptables -A OUTPUT -p icmp -m limit --limit 5/second -j ACCEPT
iptables -A FORWARD -p icmp -m limit --limit 5/second -j ACCEPT
# FILTRADO ENTRADA RED DMZ
# - permitir paso de servicios redireccionados
iptables -A FORWARD -i $eth_EXT -d $RED_DMZ -p
iptables -A FORWARD -i $eth_EXT -d $RED_DMZ -p
iptables -A FORWARD -i $eth_EXT -d $RED_DMZ -p
iptables -A FORWARD -i $eth_EXT -d $RED_DMZ -p
(solo peticiones, las respuestas
tcp --dport 80 -m state --state
tcp --dport 443 -m state --state
tcp --dport 25 -m state --state
tcp --dport 110 -m state --state
siempre se autorizan)
NEW -j ACCEPT
NEW -j ACCEPT
NEW -j ACCEPT
NEW -j ACCEPT
## NOTA: Con el módulo multiport podrı́a hacerse con una sola regla
## iptables -A FORWARD -i $eth_EXT -d $RED_DMZ -p tcp \
##
-m multiport --dports 80,443,25,110 -m state --state NEW -j ACCEPT \
# - log de otros accesos a red dmz (se denegaran por defecto)
iptables -A FORWARD -i $eth_EXT -d $RED_DMZ -j LOG --log-prefix "Acceso red dmz:"
# - log de otros accesos a red interna (se denegaran por defecto)
iptables -A FORWARD -i $eth_EXT -d $RED_INTERNA -j LOG --log-prefix "Acceso red interna:"
# FILTRADO SALIDA RED INTERNA
# - permitir conexiones salientes HTTP (solo peticiones, las respuestas siempre se autorizan)
iptables -A FORWARD -o $eth_EXT -s $RED_INTERNA -p tcp --dport 80 -m state --state NEW -j ACCEPT
iptables -A FORWARD -o $eth_EXT -s $RED_INTERNA -p tcp --dport 443 -m state --state NEW -j ACCEPT
# - permitir conexiones salientes SSH (solo peticiones, las respuestas siempre se autorizan)
iptables -A FORWARD -o $eth_EXT -s $RED_INTERNA -p tcp --dport 22 -m state --state NEW -j ACCEPT
# - permitir consultas DNS salientes (sobre TCP y UDP)
iptables -A FORWARD -o $eth_EXT -s $RED_INTERNA -p tcp --dport 53 -m state --state NEW -j ACCEPT
iptables -A FORWARD -o $eth_EXT -s $RED_INTERNA -p udp --dport 53 -m state --state NEW -j ACCEPT
# - permitir conexiones HTTP hacia la DMZ (solo peticiones, las respuestas siempre se autorizan)
iptables -A FORWARD -d $RED_DMZ -s $RED_INTERNA -p tcp --dport 80 -m state --state NEW -j ACCEPT
iptables -A FORWARD -d $RED_DMZ -s $RED_INTERNA -p tcp --dport 443 -m state --state NEW -j ACCEPT
# - permitir conexiones SMTP y POP3 hacia la DMZ (solo peticiones, las respuestas siempre se autorizan)
iptables -A FORWARD -d $RED_DMZ -s $RED_INTERNA -p tcp --dport 25 -m state --state NEW -j ACCEPT
iptables -A FORWARD -d $RED_DMZ -s $RED_INTERNA -p tcp --dport 110 -m state --state NEW -j ACCEPT
# - rechazar los demás intentos de salida informando con ICMP (por defecto se harı́a simplemente DROP)
iptables -A FORWARD -s $RED_INTERNA -m state --state NEW -j REJECT --reject-with icmp-port-unreachable
# FILTRADO ACCESO RED INTERNA DESDE DMZ
# - permitir tráfico MySQL (puerto 3306) de 10.20.20.22 a 10.10.10.11
iptables -A FORWARD -d 10.10.10.11 -s 10.20.20.22 -p tcp --dport 3306 -m state --state NEW -j ACCEPT
# - todos los demás intentos de salida están bloqueados por la polı́tica por defecto DROP
# FILTRADO CONEXIONES HACIA EL FIREWALL
# - permitir conexione SSH desde red interna, resto bloqueado por politica por defecto
iptables -A INPUT -i $eth_INT -s $RED_INTERNA -p tcp --dport 22 -m state --state NEW -j ACCEPT
# - log de los intentos de acceso al firewall desde exterior (serán denegados)
iptables -A INPUT -i $eth_EXT -j LOG --log-prefix "Acceso firewall:"
Comprobaciones:
a) Lanzar el script del firewalll
firewall3:~# /root/iptables/firewall-iptables.sh start
b) Comprobar la configuración actual de firewall
firewall:~# iptables -L
9
firewall:~# iptables -t nat -L
c) Realizar conexiones ssh a firewall3 desde fuera (193.147.87.33), dentro (10.10.10.11) y dmz (10.20.20.22)
dentro:~# ssh [email protected]
dmz:~# ssh [email protected]
fuera:~# ssh [email protected]
Otra posibilidad (más rápida): realizar escaneo nmap al puerto 22.
dentro:~# nmap -T4 10.10.10.1 -p 22
dmz:~#
nmap -T4 10.20.20.1 -p 22
fuera:~# nmap -T4 193.147.87.47 -p 22
d ) Realizar conexión telnet desde dentro (10.10.10.11) hacia fuera (193.147.87.33).
dentro:~# telnet 193.147.87.33
...
e) Realizar conexión web desde dentro (10.10.10.11) hacia fuera (193.147.87.33).
interno:~# lynx 193.147.87.33
...
f ) Comprobar el fichero de log (/var/log/syslog) de firewall2
firewall2:~# tail /var/log/syslog
...
g) Comprobar servicios abiertos
fuera:~# nmap -T4 10.10.10.11 10.20.20.22 193.147.87.47
dentro:~# nmap -T4 10.20.20.22 193.147.87.33
dmz:~#
nmap -T4 10.10.10.11 193.147.87.33
Nota: Otra alternativa cómoda para comprobar las reglas de filtrado de un firewall es la herramienta hping3.
hping3 emula el funcionamiento de la utilidad ping generalizándolo, al permitir realizar sondeos con la posibilidad
de especificar los puertos origen y/o destino, las flags TCP, etc.
3.
Ejercicio 2: Uso de enlaces cifrados OpenVPN y configuración del
firewall Shorewall
Se desarrollará un ejercicio de creación de enlaces OpenVPN y una configuración básica de un firewall con DMZ
empleando Shorewall.
Se usará un equipo con tres interfaces para hacer el papel de firewall
Se creará un enlace cifrado OpenVPN a un equipo de la red externa.
3.1.
Parte 1: Creación de un enlace OpenVPN
Se creará un enlace cifrado OpenVPN desde la máquina firewall3 (193.147.87.47) a la máquina externa fuera
(193.147.87.33). Se usará un esquema SSL completo
Usaremos el modo de funcionamiento de OpenVPN “roadwarrior“, donde un servidor OpenVPN crea enlaces cifrados
para equipos autorizados situados en redes externas.
10
La autentiación se realizará mediante certificados digitales (la otra posibilidad serı́a emplear cifrado simétrico
con claves secretas estáticas preacordadas)
A las máquinas que se conecten por VPN se les asignarán direcciones IP del rango 10.30.30.0/24, donde la
máquina firewall3 (el servidor OpenVPN) tendrá la IP 10.30.30.1
Para simplificar el ejercicio se usarán las claves y certificados de ejemplo que provee OpenVPN. En un entorno real
no se podrı́an usar esas claves, sino que deberı́amos generar las nuestras propias.
Claves de ejemplo: /usr/share/doc/openvpn/examples/sample-keys/
Certificados y claves necesarias:
Para el servidor:
• certificado digital de la Autoridad Certificadora (CA) reconocida por ambos participantes: ca.crt
• clave privada del servidor: server.key
• certificado digital del servidos: server.crt (emitido por la CA)
• parámetros para intercambio de clave Diffie-Hellam: dh1024.pem
Para cada uno de los clientes que se conecten con OpenVPN:
• certificado digital de la Autoridad Certificadora reconocida por ambos participantes: ca.crt
• clave privada del servidor: client.key
• certificado digital del servidor: client.crt (emitido por la CA)
Se incluye en el Anexo 2 ?? las indicaciones para generar nuestra propia autoridad de certificación (CA) con la que
crear nuestros propios certificados digitales.
3.1.1.
Pasos a seguir
Previo: Deshabilitar el firewall del ejercicio1
firewall3:~# /root/iptables/firewall-iptables.sh stop (importante)
1. Configuración del servidor: en la máquina firewall3
Copiar las claves/certificados necesarios al directorio /etc/openvpn :
firewall3:~# cd /etc/openvpn
firewall3:/etc/openvpn# cp /usr/share/doc/openvpn/examples/sample-keys/ca.crt .
firewall3:/etc/openvpn# cp /usr/share/doc/openvpn/examples/sample-keys/server.crt
firewall3:/etc/openvpn# cp /usr/share/doc/openvpn/examples/sample-keys/server.key
firewall3:/etc/openvpn# cp /usr/share/doc/openvpn/examples/sample-keys/dh1024.pem
.
.
.
Crear el fichero de configuración del servidor:
Se usará como base el ejemplo disponible en /usr/share/doc/openvpn/examples/sample-config-files/
firewall3:/etc/openvpn# cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz
firewall3:/etc/openvpn# gunzip server.conf.gz
Editar los parámetros concretos para nuestros túneles VPN:
firewall3:/etc/openvpn# leafpad server.conf &
Parámetros destacados (con ”→” se señalan los cambios efectuados para nuestro ejemplo):
11
.
port 1194
proto udp
dev tun
→
→
→
→
→
→
→
/* puerto por defecto del servidor OpenVPN */
/* protocolo por defecto del servidor OpenVPN */
/* tipo de dispositivo de red virtual (= tarjeta de red "software") a través
del cual se accederá al tunel cifrado establecido */
...
ca
/etc/openvpn/ca.crt
/* parametros de cifrado */
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
...
dh
/etc/openvpn/dh1024.pem
...
server 10.30.30.0 255.255.255.0 /* rango de direcciones a asignar a los clientes
OpenVPN que se vayan conectando*/
push "route 10.10.10.0 255.255.255.0"
push "route 10.20.20.0 255.255.255.0"
/* configuración de las rutas a establecer ("empujar") en los
clientes para las conexiones cifradas que se vayan creando */
/* en nuestro caso son las rutas hacia las 2 redes (interna
y dmz) gestionadas por firewall3 */
2. Configuración de los clientes: en la máquina fuera (193.147.87.33)
Copiar las claves/certificados necesarios al directorio /etc/openvpn :
fuera:~# cd /etc/openvpn
fuera:/etc/openvpn# cp /usr/share/doc/openvpn/examples/sample-keys/ca.crt .
fuera:/etc/openvpn# cp /usr/share/doc/openvpn/examples/sample-keys/client.crt
fuera:/etc/openvpn# cp /usr/share/doc/openvpn/examples/sample-keys/client.key
.
.
Crear el fichero de configuración del cliente
Se usará como base el ejemplo disponible en /usr/share/doc/openvpn/examples/sample-config-files/
fuera:/etc/openvpn# cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf
.
Editar los parámetros concretos para nuestros túneles VPN
fuera:/etc/openvpn# nano client.conf
Parámetros destacados (con ”→” se señalan los cambios efectuados para nuestro ejemplo):
client
/* indica que es la configuración para un cliente */
dev tun
→
→
→
→
/* tipo de dispositivo de red virtual (= tarjeta de red "software") a traves
del cual se accederá al tunel cifrado establecido con el servidor */
remote 193.147.87.47 1194
/* dirección IP y puerto de escucha del servidor OpenVPN
con el que se establecera el tunel cifrado */
ca
/etc/openvpn/ca.crt
cert /etc/openvpn/client.crt
key /etc/openvpn/client.key
...
/* parametros de cifrado */
3. Crear el túnel OpenVPN
Inciar OpenVPN en servidor (firewall3), ejecutar /etc/init.d/openvpn start
Inicar OpenVPN en cliente (fuera), ejecutar /etc/init.d/openvpn start
En ambos extremos del túnel cifrado se crea un interfaz de red ”virtual” /dev/tun0 por el que se accede al
enlace cifrado que conforma la red privada virtual.
Un interfaz tun (también los interfaces tap) simula un dispositivo de red ethernet, pero en lugar de enviar los
datagramas Ethernet sobre un cable de red, los encapsula dentro de los paquetes de una conexión TCP/IP
establecida.
• En nuestro caso se trata de una conexión SSL al puerto 1194 UDP de la máquina firewall3
El enlace OpenVPN definirá la red 10.30.30.0/24
• El servidor tendrá la dir. IP 10.30.30.1
• A los clientes se les asignarán direcciones a partir de 10.30.30.6
• El gateway (puerta de enlace) de los clientes conectado por VPN será 10.30.30.5, que reenvı́a a
10.30.30.1
12
Se puede comprobar la configura en ambos extremos con ifconfig -a
En este caso las rutas hacia las dos ”redes internas” (red dmz y red interna) se ”inyectan” en el cliente
VPN al crear el tunel
• La ruta por defecto de los equipos internos usa como gateway a firewall3 que a su vez conoce la ruta
hacia las máquinas clientes VPN
• Por ello, en este caso concreto no es necesario indicar rutas adicionales para que los equipos dentro y
dmz respondan y se comuniquen con los clientes OpenVPN
Para el equipo firewall3 tendremos 4 redes
•
•
•
•
10.10.10.0/24: red interna en el interfaz eth0
10.20.20.0/24: red dmz en el interfaz eth1
10.30.30.0/24: equipos externos conectados sobre VPN en el interfaz ”virtual” tun0
red externa en el interfaz eth2
4. Comprobar el tunel creado
Comprobar el acceso desde la máquina cliente (fuera) a las 2 redes internas detrás de firewall3.
Desde fuera:
fuera:~# nmap -T4 10.10.10.11
fuera:~# nmap -T4 10.20.20.22
[escaneo de dentro]
[escaneo de dmz]
Otra opción: hacer conexión ssh + comprobar con comando who quien está conectado
fuera:~# ssh [email protected]
fuera:~# ssh [email protected]
{\footnotesize
\begin{verbatim}
3.2.
Parte 2: Configuración del firewall con Shorewall (Shoreline Firewall)
Nota: Por el momento omitiremos en la configuración del firewall el enlace OpenVPN que tenemos configurado.
Se usará el esquema three-interfaces incluido en la distribución estándar de Shorewall y descrito en http://www.shorewall.net/thre
interface.htm.
La plantilla para configurar el firewall está en el directorio /usr/share/doc/shorewall/examples/three-interfaces/
3.2.1.
Pasos a seguir
Todas las tareas de configuración de Shorewall se realizarán en la máquina firewall3.
1. Copiamos y descomprimimos los ficheros de configuración en el directorio de configuración de Shorewall (/etc/shorewall/)
firewall3:~# cd /etc/shorewall
firewall3:/etc/shorewall# cp /usr/share/doc/shorewall/examples/three-interfaces/* .
firewall3:/etc/shorewall# gunzip *.gz
2. Configurar las zonas (/etc/shorewall/zones) [lo dejaremos como está]
Tendremos 4 zonas:
el propio firewall (fw)
la red externa (net) [accesible desde eth2]
la red interna (loc) [accesible desde eth0]
la dmz (dmz) [accesible desde eth1]
13
firewall3:/etc/shorewall# leafpad zones &
###############################################################################
#ZONE
TYPE
OPTIONS
IN
OUT
#
OPTIONS
OPTIONS
fw
firewall
net
ipv4
loc
ipv4
dmz
ipv4
#LAST LINE - ADD YOUR ENTRIES ABOVE THIS ONE - DO NOT REMOVE
3. Configurar los interfaces (/etc/shorewall/interfaces)
Ajustar los interfaces de red de cada zona para que se ajusten a nuestra configuración (en columna INTERFACE)
firewall3:/etc/shorewall# leafpad interfaces &
###############################################################################
#ZONE
INTERFACE
BROADCAST OPTIONS
net
eth2
detect
tcpflags,routefilter,norfc1918,nosmurfs,logmartians
loc
eth0
detect
tcpflags,detectnets,nosmurfs
dmz
eth1
detect tcpflags,detectnets,nosmurfs
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
4. Definir las polı́ticas (/etc/shorewall/policy)
El fichero por defecto incluye todas las combinaciones posibles entre nuestras 3 zonas (loc, dmz, net) indicando
una polı́tica ACCEPT para el tráfico de la zona loc y una polı́tica por defecto de rechazar (REJECT) y generando
un LOG de los ”rechazo” realizados.
Esta polı́tica sólo tiene utilidad para depuración
En nuestro caso fijaremos unas polı́ticas restrictivas que en principio sólo permitirán tráfico entre la zona
loc y la red externa (net)
En el fichero /etc/shorewall/rules se ajustarán las excepciones pertinentes.
firewall3:/etc/shorewall# leafpad policy &
###############################################################################
#SOURCE
DEST
POLICY
LOG LEVEL
LIMIT:BURST
loc
net
ACCEPT
net
all
DROP
# THE FOLLOWING POLICY MUST BE LAST
all
all
REJECT
info
#LAST LINE -- ADD YOUR ENTRIES ABOVE THIS LINE -- DO NOT REMOVE
5. Definir enmascaramiento (/etc/shorewall/masq)
En nuestro ejemplo enmascararemos (SNAT: source NAT ) el tráfico saliente de nuestras 2 redes internas (loc y
dmz).
firewall3:/etc/shorewall# leafpad masq &
##############################################################################
#INTERFACE
SOURCE
ADDRESS
PROTO
PORT(S) IPSEC
eth2
10.10.10.0/24
eth2
10.20.20.0/24
#LAST LINE -- ADD YOUR ENTRIES ABOVE THIS LINE -- DO NOT REMOVE
MARK
Indica que para el tráfico que pretenda salir de la red 10.10.10.0 y 10.20.20.0 a través del interface eth2
(red externa) se ”reescribirá” su dirección origen con la dirección IP del interfaz eth2 (IP publica de firewall3
(193.147.87.47))
6. Incluir las excepciones y redirecciones en /etc/shorewall/rules Mantendremos las excepciones (reglas) incluidas en el fichero rules de muestra.
14
Definen el comportamiento de servicios básico como DNS, SSH hacia dmz y firewall, mensajes ICMP de
PING, etc
Nota: hace uso de macros como Ping/DROP, SSH/ACCEPT (abrevian la notación ahorrando el escribir los
puertos concretos)
Implementaremos parte de las restriciones de tráfico descrita en el ejercicio 1:
Se redireccionan todos los servicio públicos (http, https, smtp y pop3) que ofrecerá nuestra red hacia la
DMZ (en nuestro caso a la máquina 10.20.20.22)
Se permite acceso del servidor web de la DMZ (en 10.20.20.22) al servidor MySQL de la red interna (en
10.10.10.11)
Se permite el acceso desde la red interna a los servidores públicos (web y correo) alojados en la DMZ
Añadiremos al final del fichero (antes de la lı́nea #LAST LINE ....) las reglas que las implementan.
firewall3:/etc/shorewall# leafpad rules &
####################################################################################
#ACTION
SOURCE
DEST
PROTO
DEST
SOURCE
ORIGINAL ...
#
PORT
PORT(S) DEST
#
Accept DNS connections from the firewall to the Internet
DNS/ACCEPT
$FW
net
#
Accept SSH connections from the local network to the firewall and DMZ
SSH/ACCEPT
loc
$FW
SSH/ACCEPT
loc
dmz
....
....
##
## ANADIDOS para implemetar reglas de filtrado
##
## 1: redirec. puertos (servicios publicos: http, https, smtp, pop3) a DMZ
DNAT
net
dmz:10.20.20.22
tcp
80,443
DNAT
net
dmz:10.20.20.22
tcp
25,110
## Anadidos 2: acceso del servidor web de DMZ al servidor mysql
ACCEPT
dmz:10.20.20.22 loc:10.10.10.11
tcp
3306
## Anadidos 3: acceso desde local a servidores web y correo en DMZ
ACCEPT
loc
dmz
tcp
80,443
ACCEPT
loc
dmz
tcp
25,110
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
7. Ajustar el fichero de configuración de Shorewall (/etc/shorewall/shorewall.conf)
Como mı́nimo debe establecerse la variable STARTUP ENABLED a yes, para que el compilador Shorewall procese
los ficheros y genere las reglas iptables.
También debe habilitarse el forwarding de paquetes: Asegurar que la variable IP FORWARDING está a on (o Keep
si se garantiza que se habilita ip forwarding antes de iniciar el firewall)
firewall3:/etc/shorewall# leafpad shorewall.conf &
###############################################################################
#
S T A R T U P
E N A B L E D
###############################################################################
STARTUP_ENABLED=yes
...
###############################################################################
#
F I R E W A L L
O P T I O N S
###############################################################################
IP_FORWARDING=on
8. Arrancar Shorewall y comprobar las reglas generadas
15
firewall3:~# shorewall start
firewall3:~# iptables -L
firewall3:~# iptables -t nat -L
9. Pruebas a realizar
Antes de hacer las pruebas: habilitar acceso exterior a MySQL en la máquina dentro(10.20.20.22) y
arrancar el servidor.
dentro~# leafpad /etc/mysql/my.cf
(comentar la linea donde aparece bind-address 127.0.0.1)
...
# bind-address 127.0.0.1
...
dentro~# /etc/init.d/mysql start
Desde fuera (193.147.87.33):
fuera~# nmap -T4 193.147.87.47
Estará accesible el puerto http redireccionado a la dmz
Desde dmz (10.10.10.11):
dmz~# nmap -T4 10.10.10.11
Estará accesible el puerto mysql
Desde dentro (10.20.20.22):
dentro~# nmap -T4 10.20.20.22
dentro~# nmap -T4 193.147.87.33
3.3.
Parte 3: Integración del enlace OpenVPN con Shorewall
Shorewall prevee la posibilidad de dar soporte a conexiones VPN. Veremos como integrar nuestro túnel openVPN en
Shorewall
3.3.1.
Pasos a seguir
1. Crear una nueva zona (road) para los clientes conectado con OpenVPN en el fichero /etc/shorewall/zones
firewall3:/etc/shorewall# leafpad zones &
###############################################################################
#ZONE
TYPE
OPTIONS
IN
OUT
#
OPTIONS
OPTIONS
fw
firewall
net
ipv4
loc
ipv4
dmz
ipv4
road
ipv4
Nota: otra opción más directa serı́a habilitar una excepción para el tráfico openVPN (puerto 1194 UDP) en el
fichero /etc/shorewall/rules y anadir el interfaz tun0 a la zona loc
De ese modo, todo el tráfico que llegará al forewall mediante los túneles OpenVPN se conciderarı́a como
perteneciente a la zona loc (red interna).
2. Asociar el interfaz tun0 a la zona road en el fichero /etc/shorewall/interfaces
firewall3:/etc/shorewall# leafpad zones &
###############################################################################
#ZONE
INTERFACE
BROADCAST
OPTIONS
net
eth2
detect
tcpflags,dhcp,routefilter,nosmurfs,logmartians
loc
eth0
detect
tcpflags,nosmurfs
dmz
eth1
detect
road
tun+
16
3. Definir las polı́ticas y reglas que afectan a los clientes OpenVPN
Haremos que los equipos conectados por openVPN (zona road) tengas las mismas restricciones/privilegios que
los de la red interna (zona loc).
Fichero /etc/shorewall/policy
firewall3:/etc/shorewall# leafpad policy &
###############################################################################
#SOURCE
DEST
POLICY
LOG LEVEL
LIMIT:BURST
loc
net
ACCEPT
net
all
DROP
road
loc
ACCEPT
# THE FOLLOWING POLICY MUST BE LAST
all
all
REJECT
info
Fichero /etc/shorewall/rules
Replicar las entradas correspondientes a la zona loc, cambiando su campo zona de loc a road.
firewall3:/etc/shorewall# leafpad rules &
...
SSH/ACCEPT
SSH/ACCEPT
...
ACCEPT
ACCEPT
road
road
$FW
dmz
road
road
dmz
dmz
tcp
tcp
80,443
25,110
4. Dar de alta el tunel OpenVPN /etc/shorewall/tunnels
firewall3:/etc/shorewall# leafpad tunnels &
#TYPE
openvpnserver:1194
ZONE
net
GATEWAY
0.0.0.0/0
GATEWAY-ZONE
5. Comprobar la configuración del firewall y el funcionamiento del tunel OpenVPN
Reiniciar el servidor OpenVPN en firewall3
firewall3~# /etc/init.d/openvpn restart
Arrancar el cliente OpenVPN en fuera
fuera~# /etc/init.d/openvpn restart
Comprobar que desde el equipo fuera se tiene acceso a las redes interna y DMZ
fuera~# nmap -T4 10.10.10.11
fuera~# nmap -T4 10.20.20.22
3.4.
Anexo 2:
pendiente
4.
Documentación y entrega
El material entregable de esta práctica constará de una pequeña memoria (máximo 2-3 páginas) documentando los
ejercicios realizados y los resultados obtenidos en cada paso realizado, junto con las conclusiones que se deriven de
dichos resultados.
Descripción breve de acciones realizadas y resultados obtenidos en el ejercicio 1
17
• Detallar el tráfico permitido inicialmente (resultados nmaps), después de habilitar el enmascaramiento y
las redicciones y después de añadir las reglas de filtrado finales.
• Explicar las reglas iptables responsables del filtrado de tráfico.
Descripción breve de acciones realizadas y resultados obtenidos en el ejercicio 2. Documentar las pruebas
realizadas sobre el enlace OpenVPN y la configuración de Shorewall.
La memoria de estos ejercicios se presentará junto con las del ejercicio anterior en las mismas fechas que el trabajo
teórico (23/1/2012).
18
Documentos relacionados
Descargar