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.
![]() | Aviso |
---|---|
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. |
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:
filter — La tabla por defecto para el manejo de paquetes de red.
nat — Usada para alterar paquetes que crean una nueva conexión.
mangle — Usada por tipos específicos de alteración de paquetes.
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:
INPUT — Aplica a los paquetes recibidos a través de una interfaz de red.
OUTPUT — Esta cadena sirve para paquetes enviados por medio de la misma interfaz de red que recibió los paquetes.
FORWARD — Esta cadena sirve para paquetes recibidos en una interfaz de red y enviados en otra.
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.
OUTPUT — Esta cadena altera paquetes generados localmente antes de que sean dirigidos por medio de una interfaz de red.
POSTROUTING — Esta cadena altera paquetes antes de que sean enviados por medio de una interfaz de red.
Las cadenas internas para la tabla mangle son las siguientes:
PREROUTING — Esta cadena altera paquetes recibidos por medio de una interfaz de red antes de que sean dirigidos.
OUTPUT — Esta cadena altera paquetes generados localmente antes de que sean dirigidos por medio de una interfaz de red.
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.