Subido por Josema Iglesias

Taller de NETFILTER iptables

Anuncio
6/6/2021
Taller de NETFILTER/iptables
Taller de NETFILTER/iptables
CDA 2013/14
Índice General
1 Entorno de prácticas
1.1 Software de virtualización VIRTUALBOX
1.2 Imágenes a utilizar
1.3 Establecer el entorno virtualizado
2 Ejemplo: Configuración de un firewall NETFILTER/IPTABLES
2.1 Descripción
2.2 Restriciones de acceso a implementar
2.3 Esquema general del script a emplear
2.4 Tareas a realizar
1 Entorno de prácticas
1.1 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.2 Imágenes a utilizar
Imagen genérica (común a todas las MVs) base.dvi
Contiene un sistema Debian 6.0 (Squeeze) con herramientas gráficas y un entorno gráfico ligero LXDE (Lighweight X11 Desktop Environment) [LXDE].
Imagen comprimida: base.vdi.gz [462 MB comprimida]
Imagen del área de intercambio (SWAP): swap.vdi [3 MB
Usuarios configurados:
login
password
root
purple
usuario1 usuario1
usuario2 usuario2
1.3 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 firewall
Red externa (193.147.87.0 ... 193.147.87.255): máquina fuera (eth0) + interfaz eth1 de firewall
1. Se partirá de las imágenes base
gunzip base.vdi.gz
2. Configurar y registrar las máquinas virtuales en VIRTUALBOX
Script de configuración y arranque:
ejercicio-iptables.sh
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
SERVIDOR
FIREWALL
4. Arrancar los servicios a utilizar (el servidor ssh está activado por defecto).
Nota: Habilitar acceso exterior a MySQL en la máquina dentro(10.10.10.11) antes de arrancar el servidor
dentro~# leafpad /etc/mysql/my.cnf
(comentar la linea donde aparece bind-address 127.0.0.1)
...
# bind-address 127.0.0.1
...
dentro:~# /etc/init.d/mysql start
dentro:~# /etc/init.d/openbsd-inetd start
https://ccia.esei.uvigo.es/docencia/CDA/1314/practicas/taller-iptables/index.html
1/5
6/6/2021
Taller de NETFILTER/iptables
servidor:~# /etc/init.d/apache2 start
servidor:~# /etc/init.d/postfix start
servidor:~# /etc/init.d/dovecot start
(servidor web [80])
(servidor smtp [25])
(servidor pop3 [110])
fuera:~# /etc/init.d/apache2 start
fuera:~# /etc/init.d/openbsd-inetd start
2 Ejemplo: Configuración de un firewall NETFILTER/IPTABLES
2.1 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 2 interfaces que separa una red externa insegura de una red interna (confiable).
Sobre este cortafuegos se experimentará con políticas de filtrado y traducción de direcciones.
El ejemplo consistirá en la configuración de las reglas de filtrado y NAT de NETFILTER empleando la herramienta de línea de comandos IPTABLES.
Resumen: Tutorial 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.
2.2 Restriciones de acceso a implementar
1. Enmascaramiento (SNAT) de la red interna (10.10.10.0/24)
2. Redireccionamiento (DNAT) de los servicios públicos que ofrecerá la red hacia la máquina servidor (10.10.10.22)
1. peticiones WEB (http y https)
2. tráfico de correo saliente (smtp) y entrante (pop3)
3. Control de tráfico con política ''denegar por defecto'' (DROP)
1. desde la red externa sólo se permiten las conexiones hacia el servidor contempladas en las redirecciones del punto anterior (http, https, smtp, pop3)
2. desde la red interna hacia la red externa sólo se permite tráfico de tipo WEB y SSH
3. se permite la salida a la red externa de las consultas DNS originadas en la red interna
4. firewall sólo admite conexiones SSH desde la red interna
4. Registro (log) de intentos de acceso no contemplados desde red externa a firewall (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)
2.3 Esquema general del script a emplear
Estructura del script BASH
-
Borrado de la reglas actuales y reinicio de contadores
Establecimiento de políticas por defecto
Reglas de NAT
Reglas de filtrado (red interna, firewall, ...)
2.3.1 Script de partida (''firewall-iptables.sh'')
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 inicadas se aceptará todo.
En este ejemplo usaremos la aproximación 2.
#!/bin/bash
#VARIABLES
eth_INT=eth0
eth_EXT=eth1
RED_INTERNA=10.10.10.0/24
# IPTABLES=/sbin/iptables
# Comando iptables
case "$1" in
start)
# Borrar reglas anteriores
iptables -F
iptables -X
iptables -Z
y reiniciar las tablas actuales
https://ccia.esei.uvigo.es/docencia/CDA/1314/practicas/taller-iptables/index.html
2/5
6/6/2021
Taller de NETFILTER/iptables
iptables -t nat -F
# 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
# <<< COMPLETAR AQUI
# 2.2 Establecer redireccionamientos
# <<< COMPLETAR AQUI
(SNAT, enmascaramiento)
(DNAT)
# 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
iptables -t nat -L
;;
*)
echo "Uso:
;;
firewall-iptables.sh {start|stop|restart|status}"
esac
2.3.2 Uso e instalación (opcional) del script Bash
Recibe un parámetro (start y stop)
firewall:~# ./firewall-iptables.sh stop
firewall:~# ./firewall-iptables.sh start
firewall:~# ./firewall-iptables.sh status
(recupera la configuración inicial de netfilter)
(lanza los comandos iptables que definen las reglas del firewall)
(muestra las reglas del firewall)
[opcional] Podría utilizarse directamente como un script de arranque
Para Debian (como root)
firewall:~# cp firewall-iptables.sh /etc/init.d
firewall:~# update-rc.d firewall-iptables.sh defaults
firewall:~# update-rc.d firewall-iptables.sh remove
(copia el script en /etc/init.d)
(crea los links desde /etc/rcX.d)
(elimina los links desde /etc/rcX.d)
2.4 Tareas a realizar
1. Comprobar la configuración actual de firewall
firewall:~# iptables -L
firewall:~# iptables -t nat -L
Asegurarse de que el ip_forwarding está activado en firewall
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.10.10.22
Comprobar servicios abiertos
fuera:~# nmap -T4 10.10.10.11 10.10.10.22 193.147.87.47
dentro:~# nmap -T4 10.10.10.22 193.147.87.33
servidor:~#
nmap -T4 10.10.10.11 193.147.87.33
3. Añadir reglas para establecer NAT (SNAT source NAT)
eth0: interfaz conectado a la red interna (10.10.10.0/24)
eth1: interfaz conectado a la red externa (193.147.87.0/24)
https://ccia.esei.uvigo.es/docencia/CDA/1314/practicas/taller-iptables/index.html
3/5
6/6/2021
Taller de NETFILTER/iptables
# 2.1 Establecer NAT de red interna (SNAT, enmascaramiento)
# 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
4. Añadir reglas para redireccionamiento de puertos (DNAT destination NAT)
# 2.2 Establecer redireccionamientos hacia SERVIDOR (DNAT)
# DNAT (redireccionamiento servicio HTTP [puerto 80, 443] a SERVIDOR)
iptables -t nat -A PREROUTING -i $eth_EXT -p tcp --dport 80 -j DNAT --to-destination 10.10.10.22
iptables -t nat -A PREROUTING -i $eth_EXT -p tcp --dport 443 -j DNAT --to-destination 10.10.10.22
# DNAT (redireccionamiento servicio SMTP [puerto 25] y POP3 [puerto 110] a SERVIDOR)
iptables -t nat -A PREROUTING -i $eth_EXT -p tcp --dport 25 -j DNAT --to-destination 10.10.10.22
iptables -t nat -A PREROUTING -i $eth_EXT -p tcp --dport 110 -j DNAT --to-destination 10.10.10.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.10.10.22
Nota: Temporalmente se añadirá una regla para pruebas y depuración que permita cualquier tipo de tráfico a través de firewall
# 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
5. Comprobaciones:
1. Guardar el script (como firewall-iptables.sh), dar permiso de ejecución y lanzarlo
firewall:~# chmod +x firewall-iptables.sh
firewall:~# ./firewall-iptables.sh start
2. Comprobar la configuración actual de firewall
firewall:~# iptables -L
firewall:~# iptables -t nat -L
3. 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
4. En fuera (193.147.87.33), verificar las conexiones establecidas actualmente y verificar de dónde provienen
fuera:~# netstat -t
ó
fuera:~# w
5. Realizar conexion WEB desde el equipo fuera (193.147.87.33) hacia firewall (193.147.87.47)
fuera:~# lynx 193.147.87.47
6. Realizar escaneo de puertos desde el equipo fuera (193.147.87.33) hacia firewall (193.147.87.47)
fuera:~# nmap -T4 193.147.87.47
7. Comprobar con tcptraceroute los ''saltos'' que se realizan desde la máquina fuera (193.147.87.33) en los distintos protocolos
fuera:~# tcptraceroute 193.147.87.47 25
fuera:~# tcptraceroute 193.147.87.47 80
fuera:~# tcptraceroute 193.147.87.47 110
Nota: más información sobre tcptraceroute en http://michael.toren.net/code/tcptraceroute/
6. Script final (''firewall-iptables.sh'')
Sobre el script anterior:
Quitar la regla temporal (iptables -A FORWARD -j ACCEPT)
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 SERVIDOR
# - permitir paso de servicios redireccionados (solo peticiones, las respuestas siempre
iptables -A FORWARD -i $eth_EXT -d $RED_INTERNA -p tcp --dport 80 -m state --state NEW
iptables -A FORWARD -i $eth_EXT -d $RED_INTERNA -p tcp --dport 443 -m state --state NEW
iptables -A FORWARD -i $eth_EXT -d $RED_INTERNA -p tcp --dport 25 -m state --state NEW
iptables -A FORWARD -i $eth_EXT -d $RED_INTERNA -p tcp --dport 110 -m state --state NEW
se
-j
-j
-j
-j
autorizan)
ACCEPT
ACCEPT
ACCEPT
ACCEPT
## NOTA: Con el módulo multiport podría hacerse con una sola regla
## iptables -A FORWARD -i $eth_EXT -d $RED_INTERNA -p tcp \
##
-m multiport --dports 80,443,25,110 -m state --state NEW -j ACCEPT \
# - 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:"
https://ccia.esei.uvigo.es/docencia/CDA/1314/practicas/taller-iptables/index.html
4/5
6/6/2021
Taller de NETFILTER/iptables
# 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
# - 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 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:"
7. Comprobaciones:
1. Lanzar el script del firewalll
firewall:~# /root/iptables/firewall-iptables.sh start
2. Comprobar la configuración actual de firewall
firewall:~# iptables -L
firewall:~# iptables -t nat -L
3. Realizar conexiones SSH a firewall desde fuera (193.147.87.33), dentro (10.10.10.11) y servidor (10.20.20.22)
dentro:~# ssh [email protected]
servidor:~# 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
servidor:~#
nmap -T4 10.10.10.1 -p 22
fuera:~# nmap -T4 193.147.87.47 -p 22
4. Realizar conexión TELNET desde dentro (10.10.10.11) hacia fuera (193.147.87.33).
dentro:~# telnet 193.147.87.33
...
5. Realizar conexión WEB desde dentro (10.10.10.11) hacia fuera (193.147.87.33).
interno:~# lynx 193.147.87.33
...
6. Comprobar el fichero de log (/var/log/syslog) de firewall
firewall2:~# tail /var/log/syslog
...
7. Comprobar servicios abiertos
fuera:~# nmap -T4 10.10.10.11 10.10.10.22 193.147.87.47
dentro:~# nmap -T4 10.10.10.22 193.147.87.33
servidor:~#
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.
8. Comprobar con tcptraceroute los ''saltos'' que se realizan desde la máquina fuera (193.147.87.33) en los distintos protocolos
fuera:~#
fuera:~#
fuera:~#
fuera:~#
tcptraceroute
tcptraceroute
tcptraceroute
tcptraceroute
193.147.87.47
193.147.87.47
193.147.87.47
193.147.87.47
80
22
25
110
ribadas 2013-09-18
https://ccia.esei.uvigo.es/docencia/CDA/1314/practicas/taller-iptables/index.html
5/5
Descargar