Capítulo 18. iptables

Red Hat Enterprise Linux contiene herramientas avanzadas para el filtrado de paquetes de red — el proceso dentro del kernel de controlar los paquetes de red al entrar, mientras se mueven y cuando salen de la red. Los kernels anteriores al 2.4 confiaban en ipchains para el filtrado de paquetes y usaban listas de reglas aplicadas a los paquetes en cada paso del proceso de filtrado. La introducción de kernel 2.4 trajo consigo iptables (también llamado netfilter), lo cual es similar a ipchains pero expande enormemente el ámbito y el control disponible para el filtrado de paquetes de red.

Este capítulo se centra en las bases del filtrado esencial de paquetes, define las diferencias entre ipchains e iptables, explica las diferentes opciones disponibles con comandos iptables y muestra cómo se pueden preservar las reglas de filtrado durante reinicios del sistema.

Para instrucciones sobre cómo construir reglas iptables o configurar un cortafuegos (firewall en inglés) basado en estas reglas, consulte la Sección 18.7.

AvisoAviso
 

El mecanismo predeterminado del cortafuegos en la versión 2.4 del kernel es iptables, pero éste no se puede usar si ya se está ejecutando ipchains. Si ipchains está presente durante el arranque, el kernel emitirá un error y no podrá arrancar iptables.

Estos errores no afectan la funcionalidad del comando ipchains.

18.1. Filtrado de paquetes

El kernel de Linux tiene incorporado la característica interna de filtrar paquetes, permitiendo aceptar algunos de ellos en el sistema mientras que intercepta y para a otros. El netfilter del kernel tiene tres tablas o listas de reglas incorporadas. Son las siguientes:

SugerenciaSugerencia
 

Además de estas tablas incorporadas, se pueden crear tablas especializadas y almacenarlas en el directorio /lib/modules/<kernel-version>/kernel/net/ipv4/netfilter/, donde <kernel-version> corresponde al número de la versión del kernel.

Cada una de estas tablas tiene un grupo de cadenas incorporadas que corresponden a las acciones llevadas a cabo por el filtro de la red.

Las cadenas internas para la tabla filtro son las siguientes:

Las cadenas internas para la tabla nat son las siguientes:

PREROUTING — Esta cadena altera paquetes recibidos por medio de una interfaz de red cuando llegan.

Cada paquete de red recibido o enviado desde un sistema Linux está sujeto a al menos una tabla. Sin embargo, un paquete puede estar sometido a múltiples reglas dentro de cada tabla antes de emerger al final de la cadena. La estructura y propósito de estas reglas puede variar, pero normalmente buscan identificar un paquete que viene de o se dirige hacia una direccción IP en particular, o un conjunto de direcciones, cuando utiliza un determinado protocolo y servicio de red.

NotaNota
 

No utilice nombres de dominio completos en las reglas del cortafuegos que se guardan en los archivos /etc/sysconfig/iptables o /etc/sysconfig/ip6tables. En el ejemplo siguiente: iptables -A FORWARD -s example.com -i eth0 -j DROP example.com no es válido porque el servicio iptables comienza antes de cualquier servicio DNS relacionado, lo que produce un error. Solamente las direcciones IP son válidas para la creación de reglas de cortafuegos.

Independientemente de su destino, cuando un paquete cumple una regla en particular en una de las tablas, se les aplica un objetivo (target) o acción a ellos. Si la regla especifica un objetivo ACCEPT para un paquete que coincida, el paquete se salta el resto de las verificaciones de la regla y se permite que continúe hacia su destino. Si una regla especifica un objetivo DROP, a ese paquete se le niega el acceso al sistema y no se envía nada de vuelta al servidor que envió el paquete. Si una regla especifica un objetivo QUEUE, el paquete se pasa al espacio del usuario. Si una regla especifica el objetivo opcional REJECT, el paquete es descartado, pero se envía un paquete de error al que envió el paquete.

Cada cadena tiene una política por defecto de ACCEPT, DROP, REJECT, o QUEUE. Si ninguna de estas reglas en la cadena se aplican al paquete, entonces el paquete es tratado de acuerdo a la política por defecto.

El comando iptables configura estas tablas, así como también configura nuevas tablas si es necesario.