iptables

Iptables la herramienta por excelencia para el filtrado de paquetes en Linux, en algunas distribuciones Linux, como por ejemplo CentOS 7 el firewall iptables está siendo sustituido por firewalld, que aunque hace lo mismo tiene un interfaz de comando menos engorroso que iptables.

Iptables está implementado en el propio kernel de GNU/Linux a partir de su versión 2.4, anteriormente en otras versiones se conocía como ipchains.

Iptables realiza un filtrado de paquetes con inspección de estado (o filtrado de paquetes dinámico), es decir realiza un seguimiento del estado de la conexión. Antes los firewall sin inspección de estado aunque eran más eficientes resultaban ser menos seguros. El ejemplo clásico de una operación de red que puede fallar con un cortafuegos sin estado es el protocolo de transferencia de archivos (FTP). Por diseño, estos protocolos deben ser capaces de abrir conexiones a los puertos altos arbitrarias para funcionar correctamente. Desde un cortafuegos sin estado no tiene manera de saber que el paquete destinado a la red protegida (al puerto de destino de algunos de acogida 4970, por ejemplo) es parte de una sesión FTP legítimo, caerá el paquete. Evidentemente el cortafuegos con inspección de estado resuelve este problema mediante el mantenimiento de una tabla de conexiones abiertas.

Iptables se ejecuta en el espacio de usuario mientras que Netfilter será un software complementario que se ejecuta en el espacio del kernel.

Por encima de iptables podemos utilizar otro software que faciliten la gestión de reglas como pueden ser FWbuilder o Webmin.


Tablas de operación en iptables.

Iptables evalúa cada paquete sobre un conjunto de reglas (ACL), cada regla define un target (operación) que se realizará cada vez que un paquete cumpla una regla, las reglas se recorren hasta que llegana un a en la que el paquete encaja:

  • ACCEPT.
  • DROP: rechaza el paquete sin enviar ningún mensaje.
  • REJECT: rechaza e informa a la fuente mediante un mensaje ICMP.

Otros targets:

  • QUEUE
  • RETURN
  • LOG
  • ULOG
  • DNAT
  • SNAT
  • MASQUERADE

La creación de reglas se hace en tablas, donde cada una contiene una serie de reglas (chains). Las tres tablas que iptables crea por defecto son:

  • FILTER: tabla de filtrado de paquetes. Es la tabla que se usa por defecto, es decir cualquier regla no específica se guarda en esta tabla. Es la encargada de bloquear o permitir que un paquete continúe o sea bloqueado. Es decir todos los paquetes deben pasar a través de esta tabla.
  • NAT: tabla de traducción de direcciones IP. Gestiona paquetes enrutados utilizando técnicas de enmascaramiento IP (NAT). El primer paquete en cualquier conexión pasa por esta tabla dond ese indicará cómo hay que reescribir todos los paquetes de esa conexión.
  • MANGLE: se encarga entre otras cosas de ajustar las opciones de los paquetes, por ejemplo para controlar la calidad del servicio QoS.

Cadenas predefinidas para cada una de las tablas:

  • FILTER
    • INPUT: Filtro de paquetes cuyo destino es el propio firewall.
    • OUTPUT: Filtrado de paquetes generados por el firewall y que deben ser enviados al exterior.
    • FORWARD: Controla los paquetes cuyo origen y destino es distinto al propio cortafuegos.
  • NAT
    • PREROUTING: Altera los paquetes en el momento de entrar al sistema antes de su enrutamientopor lo que se utiliza para la traducción de direcciones de red de destino DNAT
    • OUTPUT: Altera los paquetes generados localmente por el firewall permitiendo hacer un DNAT
    • POSTROUTING: Altera los paquetes justo antes de salir del sistema, pero después de haberse tomado la decisión de enrutamiento por lo que se utiliza para hacer la traducción de direcciones de origen SNAT
  • MANGLE
    • PREROUTING:
    • INPUT
    • FORWARD
    • OUTPUT
    • POSTROUTING