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.
