Beruflich Dokumente
Kultur Dokumente
En esta prctica se pretende conocer la utilidad IPTables como firewall de un sistema Linux. En
las siguientes secciones se explica y detalla el funcionamiento del mismo. Para poder probar de
un modo prctico el funcionamiento del mismo se recomienda la creacin de una mquina
virtual con VirtualBox donde instalar una imagen de la distribucin Ubuntu de GNU\Linux. Esto
es voluntario pero recomendable.
La prctica consistir en un cuestionario donde el estudiante deber demostrar que
comprende el funcionamiento y configuracin de IPTables.
Las cuestiones sern del siguiente estilo:
/sbin/iptables -A INPUT -p tcp -m tcp --sport 20:21 -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp -m tcp --dport 20:21 -j ACCEPT
Seguridad
3 Grado de Ingeniera Informtica
Prctica Cortafuegos con IPTables
Seguridad
3 Grado de Ingeniera Informtica
Prctica Cortafuegos con IPTables
Las reglas de filtrado de los paquetes en IPtables se agrupan en cadenas. Una cadena es un
conjunto de reglas que se aplican para determinar que se debe hacer con los paquetes que
entras, salen o atraviesan el firewall. Las cadenas se agrupan en tablas.
Este es el camino que seguira un paquete en el kernel:
MANGLE
NAT: reglas PREROUTING, POSTROUTING
FILTER: reglas INPUT, OUTPUT, FORWARD
Seguridad
3 Grado de Ingeniera Informtica
Prctica Cortafuegos con IPTables
de GNU/Linux. Es una aplicacin que contiene una serie de cadenas de reglas de filtrado en 3
tablas. Atender al orden de dichas reglas es muy importante, ya que lee de manera secuencial
las cadenas de reglas. Es decir, comienza por la primera y verifica que se cumpla la condicin,
en caso afirmativo la ejecuta sin verificar las siguientes.
Por consiguiente, si la primera regla en una determinada tabla es rechazar cualquier paquete,
las siguientes reglas no sern verificadas.
La estructura de una orden de iptables sigue el siguiente patrn:
iptables -t [tabla] - -[tipo_operacin] -- [cadena]-- [regla_con_parmetros] - - [accin].
Veremos un ejemplo de comando para entender su estructura:
iptables -t filter -A FORWARD -i ethO -s 192.168.2.100 -p tcp --dport 80 -j ACCEPT.
El tipo de operacin es aadir una regla (A), sobre la tabla filter (tabla por defecto de
filtrado), y cadena FORWARD (trfico enrutado).
La regla: aceptar (ACCEPT) el trfico TCP cuyo puerto de destino sea el 80 (HTTP), en el
interfaz ethO con IP origen 192.168.2.100.
-L: listar las cadenas de reglas de una determinada tabla (por defecto filter).
-F: elimina y reinicia a los valores por defecto todas las cadenas de una determinada
tabla.
-A: aadir cadena de regla a una determinada tabla.
-P: aadir regla por defecto, en caso de que no cumpla ninguna de las cadenas de regla
definidas.
Para sistemas en los que no se haya definido anteriormente reglas para Iptables el resultado
de ejecutar el comando iptables -L tiene que ser similar a permitir todo el trfico.
En IPTables existen cinco tablas: filter, NAT, mangle, raw o security. En esta prctica nos
centraremos en las tres primeras. Adems, existen extensiones que permiten crean ms
tablas.
De las tres tablas que hemos mencionado, cada una de las cuales contiene ciertas cadenas
predefinidas:
Filter table (Tabla de filtros): Esta tabla es la responsable del filtrado (es decir, de
bloquear e permitir que un paquete contine su camino). Todos los paquetes pasan a
travs de la tabla de filtros. En este caso las acciones que podemos realizar sobre los
paquetes son ACCEPT, DROP, REJECT QUEUE. Contiene las siguientes cadenas
predefinidas y cualquier paquete pasar por una de ellas:
o INPUT chain (Cadena de ENTRADA) -Todos los paquetes destinados a este
4
Seguridad
3 Grado de Ingeniera Informtica
Prctica Cortafuegos con IPTables
A la hora de definir una orden de iptables podremos seleccionar la tabla a la que va destinada
dicha orden mediante el parmetro -t:
iptables -t [nat |filter | mangle ]
Los modificadores o parmetros ms usuales en las reglas de iptables son los siguientes:
Parmetro
-i
-o
--dport
Descripcin
Interfaz de entrada (eth0, ethl, eth2 ).
Interfaz de salida (eth0, ethl, eth2 ... ).
Puerto de origen (puede indicarse el nombre o el nmero de puerto
Seguridad
3 Grado de Ingeniera Informtica
Prctica Cortafuegos con IPTables
del protocolo, p.ej: http 80)
--sport
Puerto destino (puede indicarse el nombre o el nmero de puerto del
protocolo, p.ej : http 80).
-p
El protocolo del paquete a comprobar: tcp, udp, icmp all. Por defecto
es all.
-j
Especifica el objetivo de la cadena de reglas, o sea una accin.
--line-numbers
Cuando listamos las reglas, agrega el nmero que ocupa cada regla
dentro de la cadena.
Las acciones que estarn siempre al final de cada regla (despus de -j) que determinar que
hacer con los paquetes afectados por la regla puede ser:
Lo primero para trabajar con IPTables es abrir una consola de Linux. En caso de que IPTables
no estuviera instalado, habra que instalarlo desde la consola con el comando (para
distribuciones Ubuntu): sudo apt-get iptables
Para comprobar las reglas que estn activas en este momento podemos usar desde esa
consola la orden: iptables L -v.
Podemos comenzar con establecer una poltica global. Las siguientes tres reglas establecen
una poltica por defecto que acepta cualquier conexin por defecto:
iptables --policy INPUT ACCEPT
iptables --policy OUTPUT ACCEPT
iptables --policy FORWARD ACCEPT
Otra poltica alternativa sera la de no permitir ninguna conexin entrante. En este caso
tendramos que usar las siguientes rdenes:
Seguridad
3 Grado de Ingeniera Informtica
Prctica Cortafuegos con IPTables
iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP
Una opcin intermedia es REJECT, que no permite la conexin pero informa mediante un error
de la razn por la que la conexin no ha sido admitida:
iptables --policy INPUT REJECT
iptables --policy OUTPUT REJECT
iptables --policy FORWARD REJECT
Podemos aplicar una de las tres polticas por defecto y comprobar su efecto mediante el
comando ping.
Podemos querer bloquear las conexiones provenientes de una sola direccin IP, en ese caso
deberamos crear una regla como la siguiente:
iptables -A INPUT -s 10.10.10.10 -j DROP
Seguridad
3 Grado de Ingeniera Informtica
Prctica Cortafuegos con IPTables
embargo, queremos que el sistema permita enviar informacin sobre SSH mientras la sesin ha sido
establecida, lo que permite la comunicacin entre estos dos hosts posible. Lo podemos conseguir con las
siguientes reglas:
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state ESTABLISHED -j ACCEPT
Para borrar todos los cambios que hemos realizado usamos el comando: iptables F.
Si queremos que estos cambios realizados por consola duren ms alla del reinicio del
ordenador hemos de almacenarlos mediante el comando (si estamos usando Ubuntu):
sudo /sbin/iptables-save
Como ya hemos visto en el apartado anterior, las reglas que tuvisemos aplicadas en IPtables,
desaparecen al reiniciar el equipo.
Si hemos introducido una a una las reglas a IPTables por comando podemos salvarlas mediante
la orden (en distribuciones Ubuntu) sudo /sbin/iptables-save.
Sin embargo, otra alternativa es escribir todas las reglas en un fichero que se cargue
automticamente cuando iniciemos sesin. Para solucionar este problema con unas cuantas
lneas de comandos con las que podremos programar un script (conjunto de rdenes
concatenadas y contenidas en un archivo) para que las reestablezca al inicio del sistema.
Lo primero que tendremos que hacer ser el script con las reglas que nos interese aplicar. Para
esto nos iremos a cualquier editor de texto que conozcamos y crearemos un fichero que
contendr todas las reglas de nuestra poltica.
Los scripts de iptables pueden tener este esquema:
1. Saludo (echo)
2. Borrado de las reglas aplicadas actualmente (flush)
3. Aplicacin de polticas por defecto para INPUT, OUPUT, FORWARD
4. Listado de reglas iptables (ACCEPT = aceptar, DROP = no aceptar)
Ojo con el orden de las reglas!. Cuando llega un paquete, se intentar equiparar a
alguna de las reglas del listado de la fase 4 (por orden), y si no equipara con ninguna, se aplicar
la poltica por defecto definida en la fase 3.
Un ejemplo sera el siguiente script:
#!/bin/bash
# -- UTF 8 --
Seguridad
3 Grado de Ingeniera Informtica
Prctica Cortafuegos con IPTables
iptables="/sbin/iptables"
LAN="eth0"
WIFI="wlan0"
echo ""
## Limpiar tablas ##
$iptables -F
$iptables -X
$iptables -Z
#echo " - FLUSH a iptables, correcto." && echo""
## Definir poltica DROP por defecto ##
$iptables -P INPUT DROP
$iptables -P FORWARD DROP
#echo " - Poltica DROP aplicada por defecto, correcto." && echo""
## Permitir todo a localhost ##
$iptables -A INPUT -i lo -j ACCEPT
#echo " - Permitido acceso total para localhost, correcto." && echo""
## Permitir entrar paquetes de conexiones que yo inicie ##
$iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#echo " - Permitidos paquetes de conexiones realizadas por mi equipo, correcto." && echo""
echo " ------- IPTABLES CORRECTAMENTE CONFIGURADO -------"
Y por ltimo especificamos en el sistema que queremos que se ejecute dicho script, modificando
el archivo con nombre 'rc.local' que encontramos en la carpeta /etc. Abrimos terminal y
escribimos esto:
nano /etc/rc.local
Y directamente nos abrir el archivo en un editor de texto que tendremos que dejar tal que as:
#!/bin/sh -e
#
# rc.local
Seguridad
3 Grado de Ingeniera Informtica
Prctica Cortafuegos con IPTables
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
/etc/activar-cortafuegos
exit 0
Y con esta modificacin al iniciar la mquina se aplicarn las reglas de nuestro cortafuegos de
forma automtica. Slo comentar que la carpeta donde se crea o aloja el script y el nombre de
este son totalmente personalizables, siempre que luego se especifique en el 'rc.local' la ruta
absoluta del mismo.
Una vez tenemos nuestro firewall funcionando desearemos en algn momento comprobar si
ha ocurrido alguna alerta o bien usar los logs para analizar y detectar alguna posible amenaza.
Lo primero es que en nuestras reglas hemos de aadir LOG log-prefix mensaje para que
cuando se detecten los mensajes asociados se aada automticamente al log esta informacin.
Por ejemplo:
iptables -A INPUT -j LOG -log-prefix Actividad del cortafuegos (INPUT)
iptables -A OUTPUT -j LOG -log-prefix Actividad del cortafuegos (OUTPUT)
iptables -A FORWARD -j LOG -log-prefix Actividad del cortafuegos (FORWARD)
Luego tenemos que guardar los cambios si al principio no habamos aadido la opcin LOG a
las reglas correspondientes:
service iptables save
Para visualizar estos mensajes basta con la orden
tail f /var/log/messages
Por defecto, la mayora de los logs del sistema se guardan en el fichero /var/log/messages pero
en este caso vamos a configurar un nuevo fichero para que almacene nicamente los logs que
generaremos con algunas reglas en IpTables, creando as su propio archivo de registro.
1
0
Seguridad
3 Grado de Ingeniera Informtica
Prctica Cortafuegos con IPTables
Lo primero que debemos hacer es configurar el archivo /etc/syslog.conf, que se trata de un
archivo de configuracin en el que se indica el modo en que los mensajes del sistema son
bitacorizados a travs de la utilidad syslogd que se instala y configura por defecto en todos los
sistemas GNU/Linux. Debemos aadir al final del fichero la siguiente sentencia:
kern.warning /var/log/iptables.log
Con esto indicamos que se almacenen los mensajes provienen del kernel con prioridad 4 o
superior ('warning' es el nivel de prioridad 4) en el archivo /var/log/iptables.log y se ignora el
resto de prioridad inferior (debug, info y notice que son del 3 haca abajo) generalmente
irrelevantes.
Por ltimo, para visualizar esta informacin debemos abrir el fichero /var/log/iptables.log con
cualquier editor de texto con el que estemos familiarizado.
La informacin dentro de este fichero se ordena de izquierda a derecha siguiendo al modelo
OSI de abajo hacia arriba, primero lo referido a enlace de datos (iface, MAC), luego a red
(direccin IP, TOS) y por ultimo de transporte (puerto, ACK, etc.).
Se dar un breve detalle de cada campo ya que hay informacin que podra no estar presente
dependiendo de la cadena dentro de la que se realizo el registro de algunos de los protocolos
que intervienen en el caso.