Vous êtes sur la page 1sur 17

Los firewalls juegan un rol fundamental dentro de la seguridad de una organizacin.

De esta manera, es necesario aclarar algunos conceptos referentes a como configurar


un firewall en un sistema basado en Unix, utilizando iptables . Esta herramienta provee funcionalidades muy eficientes para el filtrado de protocolos y actividades de la
misma naturaleza.

Qu es iptables?

Iptables es un sistema de firewall vinculado al kernel de Linux. La ventaja es que se encuentra integrado con el sistema operativo por lo que, en general, es muy utilizado por
los profesionales de seguridad.

Al igual que otros tipos de firewalls, iptables funciona a travs de reglas. De esta manera, es posible definir a que tipos de paquetes se les permite el paso, sobre que
puerto, protocolos, etc.

Iptables es una herramienta compleja que posee un alto ndice de granularidad. En esta ocasin analizaremos algunas de las funcionalidades de las que dispone y en futuras
publicaciones, profundizaremos su comportamiento.

Cundo utilizar iptables?

En entornos corporativos, suelen exponerse equipos a Internet con determinado fin. En estos casos, es importante contar con una configuracin adecuada a nivel de
red ya que este puede ser el punto de entrada para un potencial atacante.

En ciertos casos, tambin se suelen combinar firewalls fsicos con iptables para lograr una configuracin ms segura.

Qu tipo de reglas existen en iptables?

Iptables posee tres grandes grupos de reglas:

Reglas de filtrado: Esto se logra a partir de las reglas INPUT, OUTPUT y FORWARD. Permite determinar que tipos de paquetes pueden ingresar a la red y
redireccionarlos al destino de inters.
NAT: Son el grupo de reglas que permiten aplicarse a partir de la direccin ip desource (origen) y destination (destino), y realizar la traslacin al puerto
adecuado.

Mangle: Este tipo de reglas aplica sobre los flags de los paquetes.
La sintaxis para utilizar iptables es la siguiente:

iptables <opciones><criterio><direccin del objetivo>

Primera aproximacin

Para poder visualizar las reglas existentes solo hace falta ejecutar el comando iptables -L.

Esto permite comprobar que tipos de reglas estn vigentes sobre el firewall en el sistema.

Es conocido como una buena medida de seguridad deshabilitar la respuesta al ping en caso de no ser estrictamente necesario. Esto permite dificultar la etapa de
descubrimiento de un determinado sistema en caso de un potencial atacante fije el inters sobre este objetivo.

Esta tarea es muy sencilla de realizar con iptables. Solo basta con fijar una regla para realizar undrop (eliminar) sobre los paquetes especficos. En el caso del ping estndar,
el paquete es de tipo ICMP 8. Por lo tanto, se debe filtrar el paquete con la siguiente regla:

iptables -A INPUT -p icmp d [direccion ip] icmp-type 8 -j DROP

Para comprobar que la regla realmente funciona, realizamos un ping al sistema objetivo antes y despus de aplicar la regla.

Resumen: Iptables es la aplicacin estndar de Linux para crear un firewall. Es fcil de configurar y mantener al mismo tiempo que es lo suficientemente potente
como para proporcionar el control de un aparato de gama alta. Aprenda cmo empezar con iptables, recuperarse de los problemas comunes, y simular un escenario
de uso de pequea oficina.

Introduccin
Iptables es una aplicacin que permite la administracin de las tablas en el servidor de seguridad del kernel de Linux. No es necesario conocimientos previos sobre el
ncleo, o sobre las tablas del mismo, ni tampoco sobre las modificaciones del cortafuegos y tareas comunes de administracin del sistema.
En algunas distribuciones de Linux, iptables viene activado por defecto. Es comn que los usuarios sin experiencia utilicen aplicaciones que definen las reglas para
evitar problemas de red. Este artculo le ayudar a empezar rpidamente y manipular iptables segn sus necesidades.

A veces, iptables se utiliza para referirse a la del kernel de Linux a nivel de componente. En este artculo, todo lo relacionado con iptablesse referir especficamente a
la aplicacin que controla los protocolos en una distribucin de Linux, como IPv4, IPv6, y las tablas ARP.
Al igual que otras aplicaciones de Linux, se puede configurar iptables en la interfaz de lnea de comandos o en un archivo de texto plano, lo que permite la edicin con
cualquier editor de texto. Aunque es fcil de modificar, podra sentirse incmodo desde el dispositivo de cortafuegos, donde la mayor parte de la interaccin con los
ajustes y configuraciones que se hace en una interfaz grfica. Hay aplicaciones que utilizan iptables para gestionar un servidor de seguridad a travs de interfaces
grficas, pero este artculo cubrir la interaccin con iptables en su ambiente natural: la terminal de Linux.
El tener un buen nivel usando un terminal de Linux (tambin referido como un emulador de la consola o terminal) ayudar a los desarrolladores tomar ventaja de los
ejemplos y configuraciones que siguen. La interfaz desde la lnea de comandos es la principal forma de interactuar con iptables, y una terminal de Linux es la
aplicacin que permite el acceso a esta interfaz.
Las reglas que se aplican son en su mayora muy legibles y fcilmente portables a otros servidores. Esta funcin ahorra mucho tiempo cuando se trata de hardware.

Requisitos de las solicitudes


A pesar de que iptables es el tema principal de este artculo, es probablemente que ya tengo instalado y que tambin vamos a utilizar nmap,que es otra aplicacin de
gran alcance.
Compruebe que est instalado nmap antes de continuar. Puede instalar este escner de red efectiva en una distribucin Debian / Ubuntu Linux.
Listado 1A. Instalacin de nmap en Debian / Ubuntu

sudo apt-get install nmap


Listado 1B. Instalacin de nmap en Fedra/RedHat/CentOS

sudo yum -y install nmap


Primeros pasos
Casi todas las distribuciones de Linux vienen con iptables instalado y listo para usar. Asegrese de que tiene el

iptables

disponible en su

shell preferida. Este artculo utiliza las convenciones de Debian / Ubuntu para configurar iptables.
Debido a que vamos a hacer modificaciones en el nivel del ncleo, asegrese de que tiene privilegios de root.
Listado 2 muestra las reglas que actualmente se aplican en el servidor. Listado 2 se repetir durante el artculo para comprobar cules son las normas que estn
actualmente en uso y verificar los cambios con xito.
Listado 2. Normas que se aplican actualmente

root@desktop:~# iptables -L
Chain INPUT (policy ACCEPT)
target
prot opt source

destination

Chain FORWARD (policy ACCEPT)


target
prot opt source

destination

Chain OUTPUT (policy ACCEPT)


target
prot opt source

destination

En el Listado 2 , instruimos a iptables para una lista de todas las reglas que se aplican actualmente en el firewall. Esto se logra mediante el flag -L
La salida tambin menciona

Chain . Piense en las cadenas de IPTables como secciones en el servidor de seguridad que permite un cierto tipo de trfico. Por

ejemplo, para bloquear todo el trfico de la red privada a Internet, esta norma se establece en la seccin de salida. Del mismo modo, cualquier norma que afecta el
trfico entrante se enumeran en la cadena INPUT.
Las tres cadenas que se aplican a cada uno un tipo de actividad en el firewall. En este punto, no hay nada establecido todava. Esto significa que no hay restricciones
y todo el trfico de red se le permite entrar y salir.

Chain INPUT
Chain FORWARD , y
Chain OUTPUT
Antes de continuar, es necesario verificar qu puertos estn abiertos en el servidor para la comparacin despus de que se bloquee. Como se mencion
antes, Nmap es una herramienta de lnea de comandos que proporciona informacin de seguridad de red. Listado 3 muestra la salida de nmap en un servidor remoto
en la red.
Listado 3. El escaneo en red con nmap

~ $ nmap 10.0.0.120
Starting Nmap 5.35DC1 ( http://nmap.org ) at 2010-11-21 20:44 EST
Nmap scan report for 10.0.0.120
Host is up (0.012s latency).
Not shown: 991 closed ports
PORT
STATE SERVICE
22/tcp
open ssh
25/tcp
open smtp

53/tcp
80/tcp
631/tcp
3306/tcp
4001/tcp
5900/tcp
8080/tcp

open
open
open
open
open
open
open

domain
http
ipp
mysql
unknown
vnc
http-proxy

Nmap done: 1 IP address (1 host up) scanned in 6.57 seconds

Esos son un montn de puertos abiertos! En tan slo unos pocos pasos, usted aprender cmo hacer los cambios mencionados, a partir de iptables.

Virtual no siempre es mejor


A medida que aprendes iptables puede ser mejor que siga los ejemplos de este artculo en un ordenador con Linux instalado y no en una mquina virtual (VM). Las
polticas de la red entre un anfitrin y un invitado podran hacer que la depuracin fuera ms difcil, y algunos ejemplos, no funcionarn. Comience con un entorno
fsico

Las reglas de firewall pueden ser aplicadas y aadidas o editadas de forma manual en un archivo de texto plano original. Yo prefiero usar un archivo de texto para
aplicar los cambios. La mayora de los errores de tiempo de la sintaxis son ms fciles de alcanzar cuando se escriben en un archivo de texto. Otro problema surge
con la edicin de las reglas por las reglas adjuntas directamente, es decir, estas normas no se guardarn cuando un servidor se reinicia. Antes de editar el archivo,
vamos a indicarle a iptables como exportar las reglas actuales para que el archivo se convierte en nuestra plantilla inicial. Ver el listado 4 .
istado 4. Reglas de guardar en un archivo

root@desktop:~# iptables-save > /etc/iptables.rules


root@desktop:~# cat /etc/iptables.rules
# Generated by iptables-save v1.4.4 on Sun Nov 21 14:48:48 2010
*filter
:INPUT ACCEPT [732:83443]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [656:51642]
COMMIT
# Completed on Sun Nov 21 14:48:48 2010
He utilizado el comando

iptables-save y he redirigido la salida a un archivo de texto en el directorio "/etc".

el archivo para que puedas ver lo que el

archivo se ve en mi mquina.
Uno de los primeros requisitos es para permitir las conexiones establecidas para recibir el trfico. Usted necesita cuando quiere nada detrs del firewall (en una red
privada) para poder enviar y recibir datos de la red sin restricciones. En el listado 5 se emitir un gobierno directo de iptables y verificar el estado del firewall despus.
Listado 5. Establecido sesiones de la regla

root@desktop:~# iptables -A INPUT -m conntrack --ctstate


ESTABLISHED,RELATED -j ACCEPT
root@desktop:~# iptables -L
Chain INPUT (policy ACCEPT)
target
prot opt source
destination
ACCEPT
all -- anywhere
anywhere
RELATED,ESTABLISHED
Chain FORWARD (policy ACCEPT)
target
prot opt source

destination

Chain OUTPUT (policy ACCEPT)


target
prot opt source

destination

Para tener una mejor idea de lo que sali, vamos a separar el comando y explicar cada uno de ellos:

-A INPUT : Aadir esta regla a la INPUT de la cadena.


-m conntrack : Comprueba las conexiones para el siguiente curso de paquetes / conexin.
-ctstate ESTABLISHED, RELATED : Establece la conexin que se va a aplicar a la regla de.

ctstate

ESTABLISHED (establecida) significa una conexin que ha visto paquetes en ambas direcciones y un tipo RELATED
(relacionado) significa que el paquete est comenzando una nueva conexin, pero est asociada con una conexin existente.
En este caso, una conexin

-j ACCEPT : le dice al firewall para que acepte las conexiones descritas antes. Otra opcin vlida para el flag -j sera DROP
Tambin estoy conectando a travs del protocolo SSH a ese servidor, as que antes de bloquear el servidor de seguridad, una regla en el Listado 6 va a permitir que
todas las llamadas entrantes de trfico SSH. Que especificar el tipo de protocolo de red (TCP) y el puerto que est relacionado con el servicio SSH. Se puede
especificar el nmero de puerto directamente si es necesario.
Listado 6. Aceptar las conexiones entrantes SSH

root@desktop:~# iptables -A INPUT -p tcp --dport ssh -j ACCEPT


root@desktop:~# iptables -L
Chain INPUT (policy ACCEPT)
target
prot opt source
destination
ACCEPT
all -- anywhere
anywhere
ctstate
RELATED,ESTABLISHED
ACCEPT
tcp -- anywhere
anywhere
tcp
dpt:ssh
Chain FORWARD (policy ACCEPT)
target
prot opt source

destination

Chain OUTPUT (policy ACCEPT)


target
prot opt source

destination

Por ltimo, vamos a configurar el firewall para bloquear todo lo dems. Tenga especial cuidado al emitir el comando siguiente. Si se coloca delante de todas las otras
reglas, se bloquear el trfico de todas y cada una con el servidor. Iptables lee las reglas en forma de procedimiento (de arriba a abajo) y despus de una regla es
igual, nada se evaluar.
Listado 7. El bloqueo de todo el trfico entrante

root@desktop:~# iptables -A INPUT -j DROP


root@desktop:~# iptables -L
Chain INPUT (policy ACCEPT)
target
prot opt source
destination
ACCEPT
all -- anywhere
anywhere
RELATED,ESTABLISHED
ACCEPT
tcp -- anywhere
anywhere
dpt:ssh
DROP
all -- anywhere
anywhere
Chain FORWARD (policy ACCEPT)
target
prot opt source

destination

Chain OUTPUT (policy ACCEPT)


target
prot opt source

destination

ctstate
tcp

Listado 7 muestra que las reglas estn en el orden correcto, pero para poder hacer cambios especficos, vamos a guardar las reglas en un archivo y se concatenan
para comprobar el contenido como en el Listado 8 .
Listado 8. Verificacin de la configuracin del firewall

root@desktop:~# iptables-save > /etc/iptables.rules


root@desktop:~# cat /etc/iptables.rules
# Generated by iptables-save v1.4.4 on Sun Nov 21 15:10:42 2010
*filter
:INPUT ACCEPT [1234:120406]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1522:124750]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

-A INPUT -j DROP
COMMIT
# Completed on Sun Nov 21 15:10:42 2010
El comando

iptables-save guarda nuestros cambios en un archivo de texto plano. Se tiene un aspecto un poco diferente simplemente hacer una lista

de las normas en la lnea de comandos, pero es exactamente lo mismo. Al igual que antes, tenemos tres secciones: INPUT, FORWARD y OUTPUT. Las normas que se
refieren a las conexiones previstas inicialmente OUTPUT, por lo que esta es la seccin donde las reglas que hemos aadido se colocan.
En este punto, el servidor se bloquea y la configuracin se ha guardado en un archivo. Pero, qu va a pasar cuando se realiza un anlisis de la red? Vamos a
ejecutar nmap otra vez contra ese servidor y comprobar los resultados como se muestran en el Listado 9 .
Listado 9. Escaneo en red con el servidor bloqueado

~ $ nmap 10.0.0.120
Starting Nmap 5.35DC1 ( http://nmap.org ) at 2010-11-21 20:56 EST
Note: Host seems down. If it is really up, but blocking our ping
probes, try -Pn
Nmap done: 1 IP address (0 hosts up) scanned in 3.04 seconds
~ $ nmap -Pn 10.0.0.120
Starting Nmap 5.35DC1 ( http://nmap.org ) at 2010-11-21 20:56 EST
Nmap scan report for 10.0.0.120
Host is up (0.017s latency).
Not shown: 999 filtered ports
PORT
STATE SERVICE
22/tcp open ssh
Nmap done: 1 IP address (1 host up) scanned in 12.19 seconds

Tenga en cuenta que el anlisis se intent contra la IP donde se encuentra el servidor, Y esta vez nmap no incluy otros puertos abiertos.Esto sucede debido a que el
firewall est configurado de tal manera que est bloqueando todo, excepto para el puerto SSH que tenemos abierta. Dado que Nmap utiliza un protocolo de red
especfico para verificar si el sistema est vivo, volvi con las manos vacas. El segundo intento fue un xito y nos est diciendo que slo SSH est abierto y nada
ms. Con slo tres reglas, nos las arreglamos para conseguir un bloqueo eficaz de nuestro servidor.

Guardado y restablecimiento de las normas


En la seccin anterior, guardamos las reglas en un archivo de texto. Sin embargo, eso no es efectivo para decirle al servidor que necesita para cargar las
reglas. Adems, cuando se reinicia el servidor, se pierde toda la configuracin del hecho.
Si va a agregar las normas sobre la lnea de comandos, usted debe estar familiarizado con el esos cambios en un archivo de texto. Ver Listado 10 para guardar las
reglas del firewall.
Listado 10. Guardar las reglas de firewall

iptables-save > /etc/iptables.rules


Dependiendo del sistema operativo en uso, hay varias maneras de conseguir esas reglas para cargar en el arranque. Un mtodo fcil es ir a la interfaz y decirle que
debe cargar las reglas antes de poner la interfaz en lnea. Vea el Listado 11 .
Listado 11. De redes pblicas las reglas de la interfaz de carga

<![CDATA[
auto eth0
iface eth0 inet static
address 99.99.99.0
netmask 255.255.255.0
pre-up iptables-restore < /etc/iptables.rules
]]>
Aqu tenemos la interfaz eth0 y se declara una regla para cargar las reglas para el dispositivo de red. Como habrs adivinado, puede usar estos comandos para
actualizar manualmente las reglas del firewall desde y hacia el archivo.

Recuperacin de desastres
No hace mucho, estuve en una situacin donde he sido responsable de un dispositivo de firewall. Aunque estaba haciendo copias de seguridad peridicas que las
reglas y configuraciones se hicieron, no me di cuenta de que esas copias estaban en un formato propietario y slo puede ser ledo por el modelo de aparato que

tena. No es un problema, por supuesto, cuando tiene dos dispositivos de la misma marca, modelo y versin de firmware, pero, como es comn en pequeas
empresas, el presupuesto no permiti nada de eso.
Un da, ese aparato no decidi correr ms y tuve que implementar algo rpido que podra ser tan fiable (o mejor). Aprend que la manera ms difcil que tener
configuraciones legibles y la capacidad de volver a ponerlos rpidamente activos son muy importantes.
Con algo de suerte, he encontrado un servidor antiguo en buen estado con un par de interfaces de red y fui capaz de reemplazar el aparato muerto.
Hasta ahora, hemos pasado por los escenarios de la obtencin de una copia de las normas que podran aplicarse fcilmente a cualquier servidor en caso de
fallo. Ahora vamos a activar el firewall de ser el principal punto de entrada para una red domstica o empresarial.

Iptables como principal puerta de entrada


Hasta el momento todo lo que hemos cubierto es grande si usted est ejecutando iptables en un ordenador personal, pero no tiene mucho sentido si una oficina
entera tiene que compartir una conexin a Internet. Con unos pocos ajustes de configuracin, podemos poner esto en marcha correctamente.
Un servidor de puerta de enlace necesita al menos dos interfaces de red para poder servir como una puerta de entrada adecuada. Una interfaz "hablara" con la
conexin del pblico frente y la otra a la interna, protegida.
Vamos a suponer que el servidor tiene dos interfaces de red fsicas: eth0 (pblico) y eth1 (privada). Necesito un NAT juntos para que el trfico fluya sin interrupciones
de la red de una interfaz a otra. La subred de la red privada es 192.168.0.0/255.255.0.0, as que vamos a ver cmo una regla NAT con la expedicin se podra ver en
el Listado 12 .
Listado 12. NAT y las reglas de reenvo

iptables -A FORWARD -s 192.168.0.0/255.255.0.0 -i eth0 -o eth1 -m\


conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j
ACCEPT
iptables -A POSTROUTING -t nat -j MASQUERADE

Listado 13 muestra cmo modificar algunos parmetros de

proc para permitir el reenvo en el servidor.

Listado 13. Activando el reenvo en el servidor

sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"

Tenga en cuenta que los cambios en el

proc son voltiles, por lo que los cambios realizados no se han perdido despus de un reinicio. Hay varias maneras para

asegurarse de que las modificaciones se adhieren despus de un reinicio. En Debian / Ubuntu agregue las lneas que se quieran realizar en /etc/rc.d/rc.local.

Por ltimo, como se muestra en el Listado 14 , hay un cambio que modifica los parmetros del kernel en tiempo de ejecucin (sysctl). Estas configuraciones son por lo
general ya en el sysctl.conf, pero estn comentados. Elimine el comentario de ellos (o aadalos si no estn incluidas en la distribucin).
Listado 14. Sysctl / kernel reenvo

net.ipv4.conf.default.forwarding=1
net.ipv4.conf.all.forwarding=1

ARP umbral de cach


Ejecutando un servidor Linux como una pasarela har que tenga ciertos problemas con el DNS. El ncleo est diseado para mantener una asignacin de direcciones
IP, pero viene con un nivel mximo de entradas que no son adecuados para trfico pesado. Cuando se alcanza este nivel, las consultas DNS no son atendidas. Si bien
dicho umbral raramente se alcanza con unos pocos clientes, ms de treinta clientes pasando por este firewall causar un problema.
El entorno puede necesitar algn ajuste, pero los valores mostrados en la lista 15 debe proporcionar el sitio antes de ver a estas cuestiones.
Listado 15. El aumento del tamao de la cach ARP

echo 1024 > /proc/sys/net/ipv4/neigh/default/gc_thresh1


echo 2048 > /proc/sys/net/ipv4/neigh/default/gc_thresh2
echo 4096 > /proc/sys/net/ipv4/neigh/default/gc_thresh3

Est atento a los mensajes similares a los de venta 16 , que proporcionar un aviso si es necesario aumentar el nmero acaba de proporcionar.
Listado 16. Sistema de registro de las advertencias del desbordamiento de la cach ARP

Nov 22 11:36:16 firewall kernel: [92374.325689] Neighbour table


overflow.
Nov 22 11:36:20 firewall kernel: [92379.089870] printk: 37 messages

suppressed.
Nov 22 11:36:20
overflow.
Nov 22 11:36:26
suppressed.
Nov 22 11:36:26
overflow.
Nov 22 11:36:30
suppressed.s.

firewall kernel: [92379.089876] Neighbour table


firewall kernel: [92384.333161] printk: 51 messages
firewall kernel: [92384.333166] Neighbour table
firewall kernel: [92389.084373] printk: 200 messages

Conclusin
Hemos pasado a travs de algunos pasos sencillos para conseguir iptables para funcionar correctamente y para bloquear de forma segura por un servidor Linux. Las
reglas aplicadas deberan proporcionar una buena idea de lo que est sucediendo en un servidor usando iptables como cortafuegos. Os animo a darle una oportunidad
a iptables, especialmente si dependen de un aparato y desea tener ms control y fcilmente replicar configuraciones legibles.
Mientras que las reglas utilizadas que hemos utilizado aqu son simples, la flexibilidad y complejidad de iptables est fuera del alcance de este artculo. Hay muchas
reglas complejas que se pueden combinar para crear un ambiente de firewall seguro y controlable.
Un ejemplo de una caracterstica interesante avanzada en iptables es el equilibrio de carga. La mayor parte del tiempo, la hora de explorar los servicios web de alta
disponibilidad, que estn buscando soluciones de balanceo de carga. Con iptables, este puede ser definido y configurado con las banderas al azar o ensimo.
Tambin puede hacer a tiempo las reglas de base. En un entorno de oficina pequea, podra ser til para restringir ciertos servicios de lunes a viernes, pero dejar que
el servidor de seguridad se comportan de manera diferente los sbados y domingos. Las banderas que podran funcionar en este caso son los siguientes: - timestart,
- TimeStop y los das.
Un problema que experiment fue no tener dos servidores de seguridad, al mismo tiempo con algn tipo de conmutacin por error. Creacin de una cosa no es tarea
fcil, y puede ser abordado de varias maneras. La solucin ms fcil sera que el router hacer el trabajo y el equilibrio de carga de dos servidores idnticos Firewall. Yo
recomiendo buscar en esta opcin si el entorno de red es un activo esencial como una oficina o pequeo negocio.
Iptables me salv una vez, y espero que haga lo mismo para ti!

El cortafuegos utilizado para gestionar las conexiones en Linux es iptables. Las posibilidades de iptables son prcticamente infinitas y un administrador que quiera sacarle el
mximo provecho, puede realizar configuraciones extremadamente complejas. Para simplificar, diremos que bsicamente, iptables permite crear reglas que analizarn los
paquetes de datos que entran, salen o pasan por nuestra mquina, y en funcin de las condiciones que establezcamos, tomaremos una decisin que normalmente ser
permitir o denegar que dicho paquete siga su curso.

El cortafuegos controla las comunicaciones entre la red y el exterior

Para

crear

las

reglas,

podemos

analizar

muchos

aspectos

Tipo de paquete de datos:

Tipo INPUT: paquetes que llegan a nuestra mquina

Tipo OUTPUT: paquetes que salen de nuestra mquina

Tipo FORWARD: paquetes que pasan por nuestra mquina

Interfaz por la que entran (-i = input) o salen (-o = output) los paquetes

eth0, eth1, wlan0, ppp0, ...

IP origen de los paquetes (-s = source)

de

los

paquetes

de

datos.

Podemos

filtrar

paquetes

en

funcin

de:

IP concreta, ej: 10.0.1.3

Rango de red, ej: 10.0.1.0/8

IP destino de los paquetes (-d = destination)

IP concreta, ej: 10.0.1.3

Rango de red, ej: 10.0.1.0/8

Protocolo de los paquetes (-p = protocol)

Tcp, udp, icmp...

Hacer NAT (modificar IP origen y destino para conectar nuestra red a otra red o a Internet) y...

Filtrar antes de enrutar: PREROUTING

Filtrar despus de enrutar: POSTROUTING

Los paquetes pueden entrar, salir o pasar

Una forma sencilla de trabajar con iptables es permitir las comunicaciones que nos interesen y luego denegar el resto de las comunicaciones. Lo que se suele hacer es definir
la poltica por defecto aceptar (ACCEPT), despus crear reglas concretas para permitir las comunicaciones que nos interesen y finalmente, denegar el resto de
comunicaciones. Lo mejor ser crear un script en el que dispondremos la secuencia de reglas que queremos aplicar en nuestro sistema. Un ejemplo tpico podra ser el
siguiente:

#!/bin/sh
#
#
#
iptables
iptables
iptables
iptables
#
iptables
iptables
iptables
iptables
iptables

Script

borramos

definimos

Para
todas

reglas

configuracin
previas

evitar
las

Aceptamos

las

comunicaciones

SMTP,
FORWARD
FORWARD
FORWARD
FORWARD

#
HTTP
y
#
Dejamos
#iptables
-A
#iptables
-A

HTTPS
comentadas
FORWARD
FORWARD

Al

-A
-A

no
es
comentadas
las
FORWARD
FORWARD
PC

del
-A

Denegamos

resto
-A

en

POP3

no

iptables

puedan

existir
-F
-X
-Z
-F

es

lo
interesan

necesario
lneas
-s
-s

porque
(tcp
y
10.0.0.0/8
10.0.0.0/8
le

porque
por
-p
-p

comunicaciones
-s

luego

debemos
lo

aceptar
(localhost)
ACCEPT

denegamos

tcp
tcp

electrnico
25
110
20
21

servidor
algn
--dport
--dport
servidor
si
algn
--dport
--dport

acceso
10.0.0.7
(no
10.0.0.0/8

y
-j
-j
-j
-j

ser

servidor

da

las
80
443

-j
-j

ser
da
53
53
todo

proxy
necesitamos
ACCEPT
ACCEPT
DNS
necesitamos
ACCEPT
ACCEPT

(cliente

VIP)
ACCEPT

el
-j

ftp)
ACCEPT
ACCEPT
ACCEPT
ACCEPT

servidor
las
-j
-j

-j
funcionar

resto.
1
DROP

-j

--dport
--dport
--dport
--dport

nuestro
si

el

aula

(correo
tcp
tcp
tcp
tcp

nuestro
udp),
por
-p
tcp
-p
udp
damos
-s

ACEPTAR
ACCEPT
ACCEPT
ACCEPT
ACCEPT
ACCEPT

al
10.0.1.0/24

FTP
-p
-p
-p
-p

sea

-j

-s
y
10.0.0.0/8
10.0.0.0/8
10.0.0.0/8
10.0.0.0/8

sistema,
interfaz

la

acceso

necesario
lneas,
10.0.0.0/8
10.0.0.0/8

de
FORWARD

el

nos

las
-s
-s

Director
FORWARD

defecto

PREROUTING
POSTROUTING

por
-i

que

-s
-s
-s
-s

por
INPUT
OUTPUT
FORWARD

-P
-P

Denegamos
FORWARD

Aceptamos
-A
-A
-A
-A

#
DNS
#
Dejamos
#iptables
#iptables

politica

errores
comunicaciones
INPUT

Ejemplo:
-A

de
que

nat
la

nat
nat

-A

#
iptables
iptables
iptables
iptables

#
iptables

la

las

que
-P
-P
-P

-t
-t

#
iptables

#
iptables

para
todas

-t
Despus

#
#
iptables
#

cortafuegos.sh

Primero

p2p)
DROP

#
iptables

Hacemos
-t

NAT
nat

si
-A

#
echo

IP
POSTROUTING

origen
-s

Activamos
1

#
iptables -L -n

Comprobamos

10.0.0.0/8
10.0.0.0/8

y
-o

salen
eth0

el

quedan

eth0
MASQUERADE

enrutamiento
/proc/sys/net/ipv4/ip_forward

>
cmo

por
-j

las

reglas

En el script anterior vemos una serie de reglas que se van a ir ejecutando secuencialmente conformando la configuracin del cortafuegos iptables. Cuando indicamos "-A
FORWARD" nos referimos a paquetes que van a pasar por nuestro servidor. Otras opciones son "-A INPUT" y "-A OUTPUT". Acto seguido ponemos las condiciones. Si
ponemos "-s 10.0.0.0/8" nos referimos a paquetes cuya IP origen est en el rango 10.0.0.0/8. Cuando ponemos "-p tcp" nos referimos a paquetes que utilizan el protocolo tcp.
Cuando indicamos "--dport 25" nos referimos a paquetes cuyo puerto de destino es el 25, es decir, protocolo SMTP (correo saliente). Si en una regla no ponemos la condicin
-p ni la condicin --dport, significa que no nos importa el protocolo (cualquier protocolo) ni nos importa el puerto destino (cualquier puerto destino). Por ejemplo, en la regla
donde damos acceso al PC del Director, no hemos indicado ni protocolo ni puerto, por lo que dejar pasar todos los protocolos y todos los puertos.

Cortafuegos
Uno de los mecanismos ms extendidos para proteger una red de equipos que estn conectados a otra red (el caso ms habitual es Internet), es colocar un dispositivo conectado a ambas
redes que analiza el trfico entre una y otra que, de acuerdo a una serie de criterios, permite o no pasar paquetes de un lado a otro. Este dispositivo conocido como cortafuegos
o firewall puede implementar esta funcionalidad de forma nativa o mediante software sobre un sistema operativo genrico, en el primer caso el dispositivo se conoce como hardware firewall
(cortafuegos por hardware) y en el segundo como software firewall (cortafuegos por software).

Hay una enorme variedad de cortafuegos por hardware: Juniper, Cisco y casi cualquier marca de componentes de redes ofrecen estos equipos, adems este tipo de cortafuegos suele incluir
otras funcionalidades como VPN, QoS, proxies, etc. En el caso de los cortafuegos por software destacan iptables del krnel linux e ipfw de freebsd, en nuestro caso nos centramos en la
configuracin de un cortafuegos software con iptables.

Tipos de cortafuegos

Una clasificacin clsica de los cortafuegos distingue entre tres tipos o generaciones:

Cortafuegos de filtrado de paquetes: Este tipo de cortafuegos analiza y filtra los paquetes que lo atraviesan en funcin de algunos parmetros a nivel de red, transporte o
incluso enlace (por ejemplo direcciones IP origen o destino, puertos, direcciones MAC, etc.).
Cortafuegos de estado: Consideran el estado del paquete en la comunicacin, distinguiendo una nueva conexin de otra establecida por ejemplo.
Cortafuegos de capa de aplicacin: Analizan el contenido del paquete a nivel de aplicacin, pudiendo hacer un filtrado ms exhaustivo

Estos tipos de cortafuegos no son excluyentes, las siguientes generaciones o caractersticas se van aadiendo sobre una configuracin bsica de un dispositivo para el filtrado de paquetes,
que ser lo que veamos aqu. Dejamos para otras entradas la explicacin de las caracterscticas ms avanzadas.

Esquemas de red

En primer lugar hay que decidir la ubicacin en la red del cortafuegos, lo ms frecuente es que el cortafuegos separe la red local de la otra red a la que queremos conectarnos (Internet por
ejemplo), bien integrado en el mismo router que interconecta las dos redes o conectado en serie con ste.

El esquema anterior se corresponde con la configuracin ms sencilla, en la que no tenemos en nuestra red ningn servidor que tenga que ser accesible desde el exterior (servidor web por
ejemplo), por lo que el cortafuegos se limita a permitir a los equipos de la red local acceso a determinados puertos. Esta configuracin se puede complicar un poco si tenemos que incluir un
servidor que ofrezca algn servicio al exterior:

Sin embargo, por motivos de seguridad, nunca debe ubicarse un servidor que sea accesible desde el exterior en nuestra red local, ya que al tratarse de un servidor expuesto, puede ser
objetivo de ataques y conviene tenerlo separado del resto de equipos de nuestra red y obviamente de los dems servidores si los hubiera. Un esquema de red ms adecuado sera ubicar el
servidor o servidores accesibles desde Internet en un segmento de red especfico, que se conoce como Zona Desmilitarizada o DMZ por analoga a la zona desmilitarizada militar, bien
duplicando el nmero de cortafuegos o con un cortafuegos conectado a tres redes, lo que se conoce como cortafuegos de 3 patas:

Nota: Los esquemas se han realizado con la aplicacin de grficos vectoriales inkscape y con imgenes libres disponibles
enhttp://focaclipart.net23.net/hardware/ y http://www.openclipart.org/.

Las configuraciones reales pueden ser ms complicadas todava, fundamentalmente porque pueden incluir varios cortafuegos y varias redes, pero un equilibrio razonable entre un caso ms o
menos real y suficientemente sencillo para empezar con iptables puede ser un cortafuegos de 3 patas, que ser el que utilicemos en esta entrada.

La tabla filter de iptables

iptables incluye tres cuatro tablas inicialmente: filter, nat, mangle y raw, la tabla filter es la encargada del filtrado de paquetes y es la tabla por defecto, por lo que ser igual poner iptables -t
filter que iptables. Esta tabla contiene a su vez tres cadenas: INPUT, OUTPUT y FORWARD, las dos primeras se utilizan para paquetes que tienen como destino (INPUT) o como origen
(OUTPUT) el propio cortafuegos, mientras que FORWARD es para paquetes que atraviesan el mismo, como por ejemplo cualquier paquete de la red local con destino un equipo de Internet o
la respuesta del mismo.

Poltica asumida o por defecto

Hay dos formas bsicas de configurar un cortafuegos, la primera es permitir todo y restringir uno a uno los paquetes que queramos, es lo que se conoce como poltica por defecto ACCEPT.
De forma opuesta, se prohibe todo y se va abriendo el cortafuegos a los paquetes que sea necesario, lo que se conoce como poltica por defecto DROP. Desde el punto de vista del control del
tipo de conexiones que se van a permitir, parece mucho ms razonable utilizar un cortafuegos con poltica por defecto DROP, y es lo que haremos aqu, por lo que ya podemos escribir nuestra
primera regla de iptables en el cortafuegos:

1 iptables -P FORWARD DROP


Tenemos el cortafuegos perfecto! no se permite el paso de NINGN paquete :-)

Cuando se utiliza un cortafuegos con poltica por defecto DROP, las reglas de iptables de la tabla filter suelen ir por parejas, ya que cada proceso que se permite incluye dos tipos de paquetes:
las solicitudes y las respuestas. Estas parejas son de reglas de INPUT/OUTPUT para procesos que tienen como origen o destino el propio cortafuegos y FORWARD/FORWARD para
procesos que tiene como origen y destino otros equipos.

Para que un cortafuegos sea efectivo, sobretodo si se trata de uno con poltica por defecto DROP, las reglas de los paquetes que se permiten debe ser lo ms concretas posibles, es mucho
mejor una regla como:

iptables -A FORWARD -i eth1 -s 10.0.0.1 -o eth0 -d

1 8.8.8.8 -p udp --dport 53 -j ACCEPT


que una regla como:

1 iptables -A FORWARD -p udp --dport 53 -j ACCEPT


Las dos consiguen lo mismo, pero la primera concreta mucho ms el tipo de paquete que se permite y por tanto consigue mucho mayor control sobre lo que atraviesa el cortafuegos.

Problema tipo

Vamos a plantear una situacin concreta, sencilla pero con suficientes detalles como para comprender la configuracin de un caso real. Vamos a configurar un cortafuegos de 3 patas con los
siguientes condicionantes:

Cortafuegos

Se conecta a Internet mediante una direccin IP esttica


Tiene tres interfaces de red eth0 (IP 40.12.1.14), que da acceso a Internet, eth1 (IP 192.168.1.1), que es la puerta de enlace de la red local y eth2 (IP 192.168.2.1), que es la
puerta de enlace de la DMZ.
Es servidor DHCP de la red local
No debe ser accesible desde Internet
Acta como dispositivo NAT
Se puede acceder a l por ssh desde la red local
Puede hacer consultas DNS al servidor de la red local
Responde a ping hecho desde la red local o la DMZ

DMZ

Direccionamiento IP 192.168.2.0/24
Conectada a la interfaz eth2 del cortafuegos
Tiene un servidor web (http y https) y un servidor de correo (smtp, pop3s e imaps) en el mismo equipo (IP 192.168.2.2)

Red local

Direccionamiento IP 192.168.1.0/24
Conectada a la interfaz eth1 del cortafuegos
Hay un servidor DNS (IP 192.168.1.2) que puede realizar consultas DNS al exterior.
Los equipos de la red local deben tener acceso a todos los servicios ofrecidos por los equipos de la DMZ
Los equipos de la red local pueden utilizar los servicios web (http y https) de cualquier servidor de Internet

Resolucin del problema

Establecemos la poltica por defecto:

1 iptables -P INPUT DROP


2 iptables -P OUTPUT DROP
3 iptables -P FORWARD DROP

Como ya se explic NAT en la entrada anterior, aqu simplemente pondremos las reglas de NAT necesarias:

# Source NAT de la red local y la DMZ:

iptables -t nat -A POSTROUTING -o eth0 -s


192.168.1.0/24 -j SNAT --to 40.12.1.14
iptables -t nat -A POSTROUTING -o eth0 -s

2 192.168.2.0/24 -j SNAT --to 40.12.1.14

3 # DNAT de los servicios http,https,smtp,pop3s e imaps


4

al servidor de la DMZ:

iptables -t nat -A PREROUTING -i eth0 -d 40.12.1.14 -p


5 tcp --dport 80 -j DNAT --to 192.168.2.2

6 iptables -t nat -A PREROUTING -i eth0 -d 40.12.1.14 -p


tcp --dport 443 -j DNAT --to 192.168.2.2

iptables -t nat -A PREROUTING -i eth0 -d 40.12.1.14 -p


8 tcp --dport 25 -j DNAT --to 192.168.2.2

9 iptables -t nat -A PREROUTING -i eth0 -d 40.12.1.14 -p


tcp --dport 993 -j DNAT --to 192.168.2.2

iptables -t nat -A PREROUTING -i eth0 -d 40.12.1.14 -p


tcp --dport 995 -j DNAT --to 192.168.2.2

Con esto seguiramos sin tener ningn tipo de conexin, ya que la poltica por defecto DROP seguira descartando todos los paquetes que llegaran al cortafuegos. Vamos a incluir las reglas
para que los equipos de la DMZ sean accesibles desde Internet:

1 # Cuando pasan por FORWARD los paquetes ya tienen como


direccin IP destino la del

# servidor de la DMZ porque la ha cambiado DNAT:

# Aceptamos las peticiones al servidor web (http) y


4 las respuestas de ste:

5 iptables -A FORWARD -i eth0 -s 0.0.0.0/0 -o eth2 -d


192.168.2.2 -p tcp --dport 80 -j ACCEPT

6
7
8

iptables -A FORWARD -o eth0 -d 0.0.0.0/0 -i eth2 -s


192.168.2.2 -p tcp --sport 80 -j ACCEPT
# Aceptamos las peticiones al servidor web (https) y
las respuestas de ste:

9 iptables -A FORWARD -i eth0 -s 0.0.0.0/0 -o eth2 -d


192.168.2.2 -p tcp --dport 443 -j ACCEPT

1
0 iptables -A FORWARD -o eth0 -d 0.0.0.0/0 -i eth2 -s
192.168.2.2 -p tcp --sport 443 -j ACCEPT

1
1 # Aceptamos las peticiones al servidor smtp y las
respuestas de ste:

iptables -A FORWARD -i eth0 -s 0.0.0.0/0 -o eth2 -d


192.168.2.2 -p tcp --dport 25 -j ACCEPT

2 iptables -A FORWARD -o eth0 -d 0.0.0.0/0 -i eth2 -s


192.168.2.2 -p tcp --sport 25 -j ACCEPT

1
3 # El servidor smtp tambin enva correo, por lo que se
comporta como cliente:

1
4 iptables -A FORWARD -o eth0 -d 0.0.0.0/0 -i eth2 -s
192.168.2.2 -p tcp --dport 25 -j ACCEPT

1
5 iptables -A FORWARD -i eth0 -s 0.0.0.0/0 -o eth2 -d
192.168.2.2 -p tcp --sport 25 -j ACCEPT

1
# Aceptamos las peticiones al servidor pop3s y las
6 respuestas de ste:
1 iptables -A FORWARD -i eth0 -s 0.0.0.0/0 -o eth2 -d
7 192.168.2.2 -p tcp --dport 995 -j ACCEPT
1 iptables -A FORWARD -o eth0 -d 0.0.0.0/0 -i eth2 -s
8 192.168.2.2 -p tcp --sport 995 -j ACCEPT
1 # Aceptamos las peticiones al servidor imaps y las
9 respuestas de ste:
iptables -A FORWARD -i eth0 -s 0.0.0.0/0 -o eth2 -d

2
192.168.2.2 -p tcp --dport 993 -j ACCEPT
0

iptables -A FORWARD -o eth0 -d 0.0.0.0/0 -i eth2 -s


192.168.2.2 -p tcp --sport 993 -j ACCEPT

Para que los equipos de la DMZ puedan hacer resolucin de nombres (imprescindible por ejemplo para enviar correo), les permitimos hacer consultas DNS:

iptables -A FORWARD -i eth2 -s 192.168.2.0/24 -o eth0


-d 0.0.0.0/0 -p udp --dport 53 -j ACCEPT
iptables -A FORWARD -o eth2 -d 192.168.2.0/24 -i eth0

2 -s 0.0.0.0/0 -p udp --sport 53 -j ACCEPT


3 iptables -A FORWARD -i eth2 -s 192.168.2.0/24 -o eth0
-d 0.0.0.0/0 -p tcp --dport 53 -j ACCEPT

iptables -A FORWARD -o eth2 -d 192.168.2.0/24 -i eth0


-s 0.0.0.0/0 -p tcp --sport 53 -j ACCEPT

Vamos a poner ahora las reglas necesarias para que los equipos de la red local puedan acceder a los servicios de la DMZ y a los servicios que se les permite de Internet:

1 # Aceptamos las peticiones al servidor web (http) y


las respuestas de ste:

iptables -A FORWARD -i eth1 -s 192.168.1.0/24 -o eth2

3 -d 192.168.2.2 -p tcp --dport 80 -j ACCEPT


4 iptables -A FORWARD -o eth1 -d 192.168.1.0/24 -i eth2

5 -s 192.168.2.2 -p tcp --sport 80 -j ACCEPT


6 # Aceptamos las peticiones al servidor web (https) y
las respuestas de ste:

iptables -A FORWARD -i eth1 -s 192.168.1.0/24 -o eth2


8 -d 192.168.2.2 -p tcp --dport 443 -j ACCEPT

9 iptables -A FORWARD -o eth1 -d 192.168.1.0/24 -i eth2


-s 192.168.2.2 -p tcp --sport 443 -j ACCEPT

1
# Aceptamos las peticiones al servidor smtp y las
0 respuestas de ste:
1 iptables -A FORWARD -i eth1 -s 192.168.1.0/24 -o eth2
1 -d 192.168.2.2 -p tcp --dport 25 -j ACCEPT
1 iptables -A FORWARD -o eth1 -d 192.168.1.0/24 -i eth2
2 -s 192.168.2.2 -p tcp --sport 25 -j ACCEPT
1 # El servidor smtp tambin enva correo, por lo que se
comporta como cliente:
3
iptables -A FORWARD -o eth1 -d 192.168.1.0/24 -i eth2

1
-s 192.168.2.2 -p tcp --dport 25 -j ACCEPT
4

iptables -A FORWARD -i eth1 -s 192.168.1.0/24 -o eth2

1 -d 192.168.2.2 -p tcp --sport 25 -j ACCEPT


5

# Aceptamos las peticiones al servidor pop3s y las


1 respuestas de ste:

iptables -A FORWARD -i eth1 -s 192.168.1.0/24 -o eth2


1 -d 192.168.2.2 -p tcp --dport 995 -j ACCEPT

7 iptables -A FORWARD -o eth1 -d 192.168.1.0/24 -i eth2


-s 192.168.2.2 -p tcp --sport 995 -j ACCEPT

1
8 # Aceptamos las peticiones al servidor imaps y las
respuestas de ste:

1
9 iptables -A FORWARD -i eth1 -s 192.168.1.0/24 -o eth2
-d 192.168.2.2 -p tcp --dport 993 -j ACCEPT

2
iptables -A FORWARD -o eth1 -d 192.168.1.0/24 -i eth2
0
-s 192.168.2.2 -p tcp --sport 993 -j ACCEPT

2
# Aceptamos las peticiones a los servidores web (http)
1 de Internet y las respuetas:
2 iptables -A FORWARD -i eth1 -s 192.168.1.0/24 -o eth0
2 -d 0.0.0.0/0 -p tcp --dport 80 -j ACCEPT
2 iptables -A FORWARD -o eth1 -d 192.168.1.0/24 -i eth0
3 -s 0.0.0.0/0 -p tcp --sport 80 -j ACCEPT
2 # Aceptamos las peticiones a los servidores web

(https) de Internet y las respuetas:

4 iptables -A FORWARD -i eth1 -s 192.168.1.0/24 -o eth0


-d 0.0.0.0/0 -p tcp --dport 443 -j ACCEPT

2
5 iptables -A FORWARD -o eth1 -d 192.168.1.0/24 -i eth0
-s 0.0.0.0/0 -p tcp --sport 443 -j ACCEPT

2
# Aceptamos las peticiones DNS del equipo 192.168.1.2:
6
iptables -A FORWARD -i eth1 -s 192.168.1.2 -o eth0 -d

2 0.0.0.0/0 -p udp --dport 53 -j ACCEPT


7

iptables -A FORWARD -o eth1 -d 192.168.1.2 -o eth0 -s

2 0.0.0.0/0 -p udp --sport 53 -j ACCEPT


8

iptables -A FORWARD -i eth1 -s 192.168.1.2 -o eth0 -d


2 0.0.0.0/0 -p tcp --dport 53 -j ACCEPT

iptables -A FORWARD -o eth1 -d 192.168.1.2 -i eth0 -s


0.0.0.0/0 -p tcp --sport 53 -j ACCEPT

Y para terminar incluimos las reglas de INPUT/OUTPUT necesarias en este problema:

1 # Se permiten las peticiones y respuestas DHCP:


2 iptables -A INPUT -i eth1 -p udp -s 0.0.0.0/0 -d
255.255.255.255 --dport 67 --sport 68 -j ACCEPT

iptables -A OUTPUT -o eth1 -s 192.168.1.1 -d


4 255.255.255.255 -p udp --sport 67 --dport 68 -j ACCEPT

5 # Se permite entrar por ssh desde la red local:


6

iptables -A INPUT -i eth1 -s 192.168.1.0/24 -d


192.168.1.1 -p tcp --dport 22 -j ACCEPT

7 iptables -A OUTPUT -o eth1 -d 192.168.1.0/24 -s


8

192.168.1.1 -p tcp --sport 22 -j ACCEPT


# Se permiten consultas DNS al servidor de la red

9 local:

1 iptables -A OUTPUT -o eth1 -s 192.168.1.1 -d


0 192.168.1.2 -p udp --dport 53 -j ACCEPT
1 iptables -A INPUT -i eth1 -d 192.168.1.1 -s
1 192.168.1.2 -p udp --sport 53 -j ACCEPT
1 iptables -A OUTPUT -o eth1 -s 192.168.1.1 -d
192.168.1.2 -p tcp --dport 53 -j ACCEPT
2
iptables -A INPUT -i eth1 -d 192.168.1.1 -s

1
192.168.1.2 -p tcp --sport 53 -j ACCEPT
3
1

# Se permite ping desde la red local y la DMZ:

4
1
5
1
6

Vous aimerez peut-être aussi