Capítulo 16. iptables

Red Hat Linux contiene herramientas avanzadas para el filtrado de paquetes de redes — el proceso de controlar los paquetes de red cuando entran, se mueven y salen de la red dentro del kernel. 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 kernel trajo consigo el 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 las reglas de filtrado se pueden conservar tras el reinicio del sistema.

Para instrucciones sobre cómo construir reglas iptables o configurar un firewall basado en estas reglas, consulte a Sección 16.5.

AvisoAviso
 

El mecanismo predeterminado del firewall en la versión 2.4 del kernel puede usar el comando iptables, pero no se puede usar si ya se está ejecutando ipchains. Si ipchains está presente durante el arranque, el kernel avisará que hay un error y no podrá arrancar iptables.

Estos errores no afectan la funcionalidad del comando ipchains.

16.1. Filtrado de paquetes

El tráfico se mueve a través de una red en paquetes. Un paquete de red es una colección de datos en diferentes tamaños y formatos. Para enviar un fichero por red, el ordenador emisor debe en primer lugar partirlo en diferentes paquetes usando las reglas del protocolo de red. Cada uno de estos paquetes contiene una parte pequeña de los datos del fichero. Cuando recibe la transmisión, el ordenador receptor, reensambla los paquetes y construye de nuevo el fichero el fichero.

Cada paquete contiene información que le ayuda a navegar por la red y moverse hacia su destino. El paquete puede decirle a los ordenadores a lo largo del camino, así como al ordenador destino, de dónde viene, a dónde va, qué tipo de paquete es, y otras muchas cosas más. La mayoría de los paquetes se diseñan para transportar datos, pero algunos protocolos pueden usar los paquetes de forma especial. El protocolo Transmission Control Protocol (TCP), por ejemplo, utiliza un paquete SYN, que no contiene datos, para iniciar la comunicación entre dos sistemas.

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

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

Las cadenas internas para la tabla filtro son las siguientes:

Las cadenas internas para la tabla nat son las siguientes:

Las cadenas internas para la tabla mangle son las siguientes:

Cada paquete de red recibido o enviado de un sistema Linux está sujeto a al menos una tabla.

Un paquete puede que sea verificado contra muchas reglas dentro de la lista de reglas antes de llegar al final de una cadena. La estructura y propósito de estas reglas puede variar, pero normalmente buscan identificar un paquete que viene de o se dirige a una direccción IP en particular o un conjunto de direcciones al usar un determinado protocolo y servicio de red.

Independientemente de su destino, cuando un paquete cumple una regla en particular en una de las tablas, se asignan a un objetivo (target) particular. 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 envia 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 entregado, pero se envia 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.