2.6. IPTables

En Red Hat Enterprise Linux vienen incluidas las herramientas avanzadas para filtraje de paquetes — de redes, el proceso de control de paquetes de red en el ingreso, desplazamiento, control y salida de la pila de redes dentro del Kernel. Las versiones de kernel anteriores a 2.4 dependían de ipchains para filtraje de paquetes y utilizaban listas de reglas aplicadas a paquetes en cada paso del proceso del filtraje. El kernel 2.4 introdujo iptables (conocidas también como netfilter), el cual es similar a ipchains pero extiende ampliamente el alcance y control disponibles para filtrar paquetes de redes.
Este capítulo se enfoca en los fundamentos de filtraje de paquetes, explica varias opciones disponibles con comandos de iptables y cómo se pueden preservan las reglas de filtraje entre reinicios del sistema.
Consulte Sección 2.6.6, “Recursos adicionales” para obtener instrucciones sobre cómo crear reglas iptables y cómo establecer un cortafuegos en ellas.

Importante

El mecanismo predeterminado en el kernel 2.4 y posteriores es iptables, pero iptables no se puede utilizar si ipchains ya se está ejecutando. Si ipchains está presente en el momento de arranque, el kernel expide un error y falla al iniciar iptables.
La funcionalidad de ipchains no se afecta por esos errores.

2.6.1. Filtraje de paquetes

El kernel de Linux emplea la herramienta Netfilter para filtrar paquetes, lo que permite a algunos de ellos ser recibidos o pasados mediante el sistema mientras detiene a otros. Esta herramienta se incorpora en el kernel de Linux y tiene tres tablas o listas de reglas incorporadas, así:
  • filter — La tabla predeterminada para manejar paquetes de redes.
  • nat — Sirve para alterar paquetes que crean una nueva conexión y es utilizado por Traducción de dirección de red (NAT).
  • mangle — Sirve para tipos específicos de alteración de paquetes.
Cada tabla tiene un grupo de cadenas incorporadas que corresponde a las acciones realizadas en el paquete por netfilter.
Las cadenas incorporadas para la tabla de filtraje son las siguientes:
  • INPUT — Se aplica a los paquetes de redes destinados al host.
  • OUTPUT — Se aplica a los paquetes de red generados localmente.
  • FORWARD — Se aplica a los paquetes de redes enrutados a través del host.
Las cadenas incorporadas para la tabla nat son las siguientes:
  • PREROUTING — Altera los paquetes de redes a la llegada.
  • OUTPUT — Altera los paquetes de redes generados localmente antes de ser enviados.
  • POSTROUTING — Altera los paquetes de redes antes de ser enviados.
Las cadenas incorporadas para la tabla de mangle son las siguientes:
  • INPUT — Altera los paquetes de redes destinados al host.
  • OUTPUT — Altera los paquetes de redes generados localmente antes de ser enviados.
  • FORWARD — Altera los paquetes de redes enrutados a través del host.
  • PREROUTING — Altera los paquetes entrantes de red antes de ser enrutados.
  • POSTROUTING — Altera los paquetes de redes antes de ser enviados.
Cada paquete de redes recibido por o enviado desde el sistema de Linux está sujeto al menos a una tabla. Sin embargo, el paquete puede estar sujeto a varias reglas dentro de cada tabla antes de emerger al final de la cadena. La estructura y propósito de dichas reglas pueden variar, pero suelen tratar de identificar el paquete que ingresa o sale de una dirección IP determinada o de un grupo de direcciones, cuando usan un protocolo determinado y un servicio de redes. La siguiente imagen resume la forma como el subsistema de iptables examina el flujo de paquetes:

Nota

Las reglas de cortafuegos se guardan de forma predeterminada en los archivos /etc/sysconfig/iptables o /etc/sysconfig/ip6tables.
El servicio de iptables inicia antes de los servicios relacionados con DNS cuando se arranca el sistema de Linux. Esto significa que las reglas de cortafuegos solamente pueden hacer referencia a las direcciones IP numéricas (por ejemplo, 192.168.0.1). Nombres de dominio (por ejemplo, host.example.com) en dichas reglas se producen errores.
Independiente de su destino, cuando los paquetes coinciden con una regla determinada en una de las tablas, se les aplica un destino o acción. Si la regla especifica un destino ACCEPT para el paquete coincidente, el paquete omite la parte restante de las revisiones de la regla y puede continuar su destino. Si la regla especifica un destino DROP, ese paquete no podrá acceder al sistema y no se enviará nada al host que envío el paquete. Si la regla especifica un destino QUEUE, el paquete se pasa a espacio de usuario . Si la regla especifica el destino opcional de REJECT, el paquete es descargado, pero se envía al originador del paquete.
Cada cadena tiene una política predeterminada para ACCEPT, DROP, REJECT, o QUEUE. Si ninguna de estas reglas en la cadena se aplican al paquete, entonces el paquete es tratado de acuerdo con la política predeterminada.
El comando iptables configura estas tablas y establece las nuevas tablas si es necesario.