Está en la página 1de 34

FIREWALLS E IPTABLES

- JAM -
¿Qué es IPTABLES?
• IPTABLES es un sistema firewall vinculado al
kernel de LINUX que se ha extendido a partir
de las versiones 2.4x y 2.6x.
• Al igual que su predecesor (IPCHAINS) no es
una aplicación que se lance y en la que
podamos configurar qué hacer con
determinados paquetes; está integrado en el
kernel, es parte del sistema operativo.
¿Qué es IPTABLES?
• Por lo tanto, para ponerlo en marcha,
simplemente hay que aplicar unas reglas con
el comando IPTABLES.
• Ya que las reglas están al nivel del kernel, y al
kernel le llegan los paquetes, es el que decide
lo que tiene que hacer con ellos, dependiendo
de los parámetros que le hayamos
especificado.
¿Qué es IPTABLES?
• IPTABLES además implementa NAT (Network
Address Traslation) y NAPT (Network Address
and Port Traslation).
Historia
• El sistema operativo LINUX, ha contado con
herramientas de filtrado de paquetes (IPFW)
incorporadas en su núcleo desde la versión del
kernel 1.1.
• Esta primera versión con filtrado, contaba con
una adaptación de la herramienta IPFW del
sistema operativo BSD llevada a cabo por Alan
Cox el año 1994.
Historia
• El holandés Jos Vos junto a otras personas,
mejoró el sistema de filtrado para las series 2.0
del kernel, e introdujo la utilidad de configuración
IPFWADM.
• A mediados de 1998, de la mano de Michael
Neuling y Rusty Russell aparece la herramienta
IPCHAINS, incorporada en los kernels de la serie
2.2 y que todavía es utilizada en una buena parte
de los sistemas LINUX.
Historia
• En 1999 de nuevo Rusty Russell aparece en
escena con una nueva herramienta de filtrado
llamada IPTABLES.
• Como lo fue IPCHAINS sobre IPFW, IPTABLES
es una modificación que permite la
construcción de reglas más precisas y un
mejor aprovechamiento de los recursos.
¿Qué es un FIREWALL?
• Un FIREWALL es un dispositivo que controla
las conexiones que entran y salen de una red.
• Un FIREWALL, es un elemento de hardware o
software utilizado en un ambiente de red
para controlar las comunicaciones,
permitiéndolas o prohibiéndolas según las
políticas de red que haya definido la
organización responsable de la red.
¿Qué es un FIREWALL?
• El funcionamiento de un FIREWALL es
indicado por la recomendación RFC 2979, que
define las características de comportamiento y
requerimientos de interoperabilidad de los
FIREWALLS.
Políticas de Seguridad
• Permitir todo:
 Filtra lo explícitamente especificado.
 Fácil de administrar.
 Bajo control de puertos abiertos.
• Denegar todo:
 Deja pasar solo lo indicado.
 Administración un poco más compleja.
 Mayor control de qué está abierto y porqué.
Funcionamiento de Iptables
• El núcleo parte con una tabla que contiene
tres listas básicas de reglas llamadas
"cadenas". Estas son INPUT, OUTPUT y
FORWARD, respectivamente (Entrada, Salida y
Reenvío).
• Cuando un paquete entra a una interfaz de
red, el núcleo examina primero el destino del
paquete y decide que ruta tomar (INPUT o
FORWARD).
Funcionamiento de Iptables
• Si por el contrario el paquete lo genera algún
proceso de la máquina, la cadena a examinra
será OUTPUT.
• Luego el paquete es examinado en la cadena,
en donde la decisión de desechar (DROP) o
aceptar (ACCEPT) el paquete es tomada.
• Si la decisión es aceptar (ACCEPT), el paquete
continúa hacia el destino, siendo recibido por
algún proceso local (demonio).
Funcionamiento de Iptables
• En cambio, si la decisión es desechar (DROP),
el paquete es descartado completamente.
Funcionamiento de Iptables
• En resumen, en cada “cadena” se definen
ciertas reglas. Los paquetes que entran en una
cadena se van comparando con las reglas de
dicha cadena (condición), y si se cumple
alguna, su destino estará determinado por lo
que diga dicha regla (acción). Si el paquete no
cumple ninguna de las reglas, entonces
seguirá la política por defecto de la cadena.
Utilización de Iptables
• iptables <Tabla> <Comando Cadena> <Regla>
<Target>

• Tabla:
 Filter – filtrado de paquetes, es la tabla por
defecto.
 Nat – Manipulación de direcciones y puertos
 Mangle – Alteración especializada
 Raw – Evitar seguimiento de conexiones
Utilización de Iptables
• Comandos:

 Agregar  Flush
 Reemplazar  Listar
 Insertar  Política
 Delete (borrar)  Nueva
Algunas reglas simples
• La manipulación de reglas es la base del
filtrado de paquetes.
• Normalmente se utilizarán los comandos de
Agregar (-A) y eliminar (-D), los otras (-I para
insertar y -R para reemplazar) son extensiones
de estos conceptos.
Utilización de Iptables
• cadenas:
• Filter:
 INPUT – hacia tu máquina
 OUTPUT – desde tu máquina
 FORWARD – a través de tu máquina
• Reglas:
• Definen sobre qué se va a actuar
Utilización de Iptables
• Targets:
 ACCEPT - Este target hace que netfilter
acepte el paquete.
 DROP - Este target hace que netfilter
descarte el paquete sin ningún otro tipo de
procesamiento.
 REJECT- Este target tiene el mismo efecto
que DROP, salvo que envía un paquete de
error a quien envió originalmente.
Utilización de Iptables
 LOG- Este target lleva un log de los
paquetes. Puede usarse en cualquier
cadena en cualquier tabla, y muchas veces
se usa para debuggear (análisis de fallos,
como ser la verificación de qué paquetes
están siendo descartados).
Algunas reglas simples
• Cada regla especifica un conjunto de
condiciones que un paquete debe cumplir, y lo
que haremos si cumple dichas condiciones
(efectuaremos una “acción”). Por ejemplo,
puede que quieras hacer DROP de los
paquetes ICMP provenientes de la dirección
127.0.0.1. En este caso definiremos el
protocolo como ICMP, la dirección de origen
como 127.0.0.1 y la acción será DROP.
Algunas reglas simples
• 127.0.0.1 es la interface de “loopback” que
tendrá en su máquina incluso si no dispone de
una conexión real a la red. Puede hacer un
“ping” para generar dichos paquetes.
• un ping simplemente envía paquetes ICMP del
tipo 8 (petición de eco – echo request) que
todos los hosts operativos deberán responder
con un paquete ICMP de tipo 0 (respuesta del
eco – echo reply).
Algunas reglas simples
• # ping -c 1 127.0.0.1
PING 127.0.0.1 (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.2 ms
--- 127.0.0.1 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.2/0.2/0.2 ms
• # iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP
• # ping -c 1 127.0.0.1
PING 127.0.0.1 (127.0.0.1): 56 data bytes
--- 127.0.0.1 ping statistics ---
1 packets transmitted, 0 packets received, 100% packet loss
#
Algunas reglas simples
• Agregamos (-A) a la cadena INPUT una regla
especificando que los paquetes que vengan de
127.0.0.1 (-s 127.0.0.1) con el protocolo ICMP
(-p icmp) deberán tomar la acción DROP (-j
DROP).
• Una vez hecho esto, probamos la regla con un
segundo ping. El programa esperará una
respuesta que nunca llegará.
Algunas reglas simples
• Podemos eliminar esta regla de dos formas. La
primera, ya que sabemos que es la única regla
en la cadena INPUT, podemos utilizar su
número para borrarla:
• # iptables -D INPUT 1
• La segunda forma es igual a la del comando
-A, pero sustituyendo -A por -D.
Algunas reglas simples
• Esto es útil cuando tiene varias reglas
complejas y no quieres tener que contarlas
hasta encontrar la que buscabas. Para estos
casos usaremos:
• # iptables -D INPUT -s 127.0.0.1 -p icmp -j
DROP
Algunas reglas simples
• La sintáxis de -D debe ser exactamente igual a
la de -A (o -I o -R). Si hay múltiples reglas
iguales en la misma cadena, sólo la primera
será eliminada.
Algunas reglas simples
• # iptables –F
• Para “vaciar” (Flush) todas las cadenas.
• # iptables –X
• Borrar la cadena definida-por-usuario
(opcional) especificada.
• # iptables –Z
• Poner a cero (Zero) los contadores de bytes y
paquetes de todas las cadenas.
Algunas reglas simples
• # iptables –A INPUT –j DROP
• # iptables –A OUTPUT –j DROP
• # iptables –A FORWARD –j DROP
• Agregar (-A) una regla para descartar (-j
DROP) todos los paquetes de entrada (INPUT),
salida (OUPUT) y reenvío (FORWARD),
respectivamente.
Algunas reglas simples
• # iptables –A INPUT –p udp –j DROP
• Agregar (-A) una regla a la cadena de INPUT
en la tabla FILTER (la tabla por defecto cuando
la opción -t no se especifica) que descarte (-j
DROP) todos los paquetes UDP (-p UDP).
Algunas reglas simples
• # iptables –A INPUT –p icmp –s
192.168.1.123 –j DROP
• Agregar (-A) una regla a la cadena de entrada
(INPUT) para que cualquier paquete ICMP (-p
icmp) con origen en 192.168.1.123 (-s
192.168.1.123) sea descartado (-j DROP).
Algunas reglas simples
• # iptables –A INPUT –p tcp –s 192.168.1.123
--dport 21 –j DROP
• Agregar (-A) una regla a la cadena de entrada
(INPUT) para que cualquier paquete TCP (-p
tcp) con origen en 192.168.1.123 (-s
192.168.1.123) a través de FTP por el puerto
21 (--dport 21) sea descartado (-j DROP).
Algunas reglas simples
• # iptables –A INPUT –p tcp --dport 22 –j
ACCEPT
• Agregar (-A) una regla a la cadena de entrada
(INPUT) para aceptar (-j ACCEPT) conexiones
a nuestra máquina a través de SSH por el
puerto 22 (--dport 22).
Bibliografía
• Linux iptables COMO (por Rusty Russell):
http://sindormir.net/iptables/
• RFC 2979: http://www.ietf.org/rfc/rfc2979.txt
• Iptables – Linux man page:
http://linux.die.net/man/8/iptables
• El módulo Netfilter de Linux: iptables:
http://www.sauronz.com/manuales/iptables-
tutorial-spanish-IR-iptables.pdf