El autor de este post es José Luis Sánchez Borque (@gielsb).
¿Qué es iptables?
Netfilter es el más moderno y completo firewall incluido en las distribuciones de Linux.
IPTables es la interfaz de usuario de Netfilter, proporciona un firewall de filtrado de paquetes con estado con potentes capacidades de inspección y opciones de registro.
Recordemos que existen básicamente dos tipos de firewall:
Los de filtrado de paquete sin estado: permiten establecer reglas de filtrado basándose únicamente en los valores de los diferentes campos de un datagrama TCP/IP: MAC's, IP’s, puertos origen y destino, TTL, etc.
Por ejemplo:
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
La siguiente regla, descarta cualquier paquete icmp del tipo echo-request hacía la propia máquina.
Los de filtrado de paquetes con estado: Este tipo de filtrado mantiene una base de datos con las conexiones aceptadas por el firewall, de forma que este puede determinar si el datagrama entrante es parte o no de una comunicación autorizada.
Podemos diferenciar cuatro estados de conexión:
Nueva. Se crea siempre que un cliente intenta establecer una conexión con el servidor. Las conexiones son eliminadas por parte del cliente o del servidor, o bien por un largo tiempo de inactividad.
Establecida. Una conexión pasa de nueva a establecida cuando el servidor responde. El significado es diferente al de TCP/IP ( intercambio de tres vías, SYN, SY N+ACK, ACK). En este caso se considera que el primer datagrama que establece una comunicación en dos direcciones ha establecido la conexión.
Relacionada. Una conexión relacionada es una que está asociada con una conexión establecida, pero implica un protocolo, dirección IP de origen o destino, o puerto de origen o destino distintos.
Inválida. Cuando ocurre un error durante el procesamiento del datagrama.
Recordemos que TCP es un protocolo orientado a la conexión, y por lo tanto antes de intercambiar datos, http por ejemplo, hay una sesión que permite establecer si el puerto está o no abierto.
Nueva. Se crea siempre que un cliente intenta establecer una conexión con el servidor. Las conexiones son eliminadas por parte del cliente o del servidor, o bien por un largo tiempo de inactividad.
Establecida. Una conexión pasa de nueva a establecida cuando el servidor responde. El significado es diferente al de TCP/IP ( intercambio de tres vías, SYN, SY N+ACK, ACK). En este caso se considera que el primer datagrama que establece una comunicación en dos direcciones ha establecido la conexión.
Relacionada. Una conexión relacionada es una que está asociada con una conexión establecida, pero implica un protocolo, dirección IP de origen o destino, o puerto de origen o destino distintos.
Inválida. Cuando ocurre un error durante el procesamiento del datagrama.
Recordemos que TCP es un protocolo orientado a la conexión, y por lo tanto antes de intercambiar datos, http por ejemplo, hay una sesión que permite establecer si el puerto está o no abierto.
Para aquellos que quieran profundizar más, SYN , SYN/ACK y ACK son tres bits, dentro del campo denominado Flags de la capa tcp modelo Ethernet.
Como ejemplo, os adjunto una captura con Wireshark, herramienta indispensable para los que realmente quieran entender cómo funcionan realmente los protocolos de red de cualquier capa.
Por la complejidad, trabajaremos en profundidad los estados próximamente.
Resumiendo, podemos decir que la potencia de un firewall viene dada por dos factores:
1) En que capa del modelo Ethernet trabajan:
- Si filtra por MAC’s trabajamos a nivel capa enlace.
- Si filtra por IP’s origen y destino trabajamos con la capa de red.
- Si filtra por puertos (80, 53, etc ) es un firewall de la capa de transporte.
- Los que son capaces de inspeccionar la capa de aplicación trabajan con las capas superiores.
2) Si trabajan con estados o no:
NETFILTER ( IPTABLES ), es básicamente un firewall de capa 4 ( hasta capa de transporte ) que entiende los estados.
¿Cómo funciona IPTables?
IPtables tiene tres tipos de tablas (reglas) que se aplican a los datagramas que procesa:
1. Filter
2. Nat
3. Mangle
La tabla filter
La tabla filter comprueba el contenido de los datagramas y los acepta o bloquea según las directivas especificadas, es decir, condiciones del tipo ip origen, ip destino, etc.
Tiene tres cadenas principales que podemos aplicar filtros:
- FORWARD
- INPUT
- OUTPUT
La cadena FORWARD de IPTables comprueba los paquetes que están siendo reenviados desde una interfaz a otra.
Resumiendo aquellos cuya IP origen e IP destino no coinciden con las del propio firewall, algo que cuesta de entender.
La cadena INPUT se emplea únicamente para los datagramas enviados al host del firewall ( IP destino = interfaz del firewall ).
Análogamente la cadena OUTPUT se utiliza para los datagramas enviados por el host del firewall ( IP origen = Interfaz del firewall ).
A diferencia de IPChain, antigua versión de IPTables, los paquetes que se reenvían de una interfaz a otra atraviesan las tres cadenas: INPUT, FORWARD y por último OUTPUT.
En IPTABLES NO, solamente atraviesan la cadena FORWARD.
La tabla NAT
La tabla NAT efectúa operaciones de Traducción de direcciones de red ( NAT ), incluyendo NAT de destino, NAT de origen y enmascaramiento.
La tabla NAT consta de dos cadenas:
- PREROUTING: Efectúa operaciones de NAT destino.
- POSTROUTING: Efectúa operaciones de NAT origen y enmascaramiento.
La tabla Mangle
La tabla Mangle permite modificar cualquiera de los dos campos de cabecera de paquete: Tipo de Servicio ( TOS ) y Tiempo de vida ( TTL ). También permite marcar paquetes para que sean reconocidos por reglas de firewall posteriores, módulos del núcleo y cortafuegos posteriores.
Cadenas de usuarios
Además de las cadenas asociadas con sus tres tablas, IPTables presta soporte a cadenas definidas por el usuario.
Cada cadena puede estar asociada con una de las tres tablas mencionadas anteriormente.
Un paquete puede ser desviada a una cadena de usuario por medio de un target ( diana ) especial.
Los paquetes que llegan al final de una cadena de usuario vuelven a ser desviados hacia la regla que va detrás de la que los envió hacia la cadena de usuario. De hecho, el concepto sería el mismo que una llamada a un procedimiento en un programa.
Trabajaremos el tema más adelante, esencial cuando la complejidad del firewall crece…
- PREROUTING: Efectúa operaciones de NAT destino.
- POSTROUTING: Efectúa operaciones de NAT origen y enmascaramiento.
La tabla Mangle
La tabla Mangle permite modificar cualquiera de los dos campos de cabecera de paquete: Tipo de Servicio ( TOS ) y Tiempo de vida ( TTL ). También permite marcar paquetes para que sean reconocidos por reglas de firewall posteriores, módulos del núcleo y cortafuegos posteriores.
Cadenas de usuarios
Además de las cadenas asociadas con sus tres tablas, IPTables presta soporte a cadenas definidas por el usuario.
Cada cadena puede estar asociada con una de las tres tablas mencionadas anteriormente.
Un paquete puede ser desviada a una cadena de usuario por medio de un target ( diana ) especial.
Los paquetes que llegan al final de una cadena de usuario vuelven a ser desviados hacia la regla que va detrás de la que los envió hacia la cadena de usuario. De hecho, el concepto sería el mismo que una llamada a un procedimiento en un programa.
Trabajaremos el tema más adelante, esencial cuando la complejidad del firewall crece…
Ruta de los paquetes IPTables
La figura adjunta representa la ruta que siguen los paquetes TCP/IP al llegar al núcleo de Netfilter.
Entender este gráfico es esencial, ya que de otra manera estableceremos las reglas donde no toca.
En el siguiente capítulo trabajaremos en profundidad este gráfico, con ejemplos que permitan entenderlo perfectamente..
By @gielsb
Puedes ver el segundo capítulo en el siguiente enlace:
Linux: Tutorial IPTABLES - Un firewall fiable - Capítulo 2 (SYSADMIT.com)
No hay comentarios:
Publicar un comentario