iptables es un programa de utilidad en el espacio de usuario que permite al administrador del sistema configurar las reglas de filtrado de paquetes IP del cortafuegos del kernel de Linux , implementado como diferentes módulos Netfilter . Los filtros se organizan en un conjunto de tablas que contienen cadenas de reglas para el tratamiento de los paquetes de tráfico de red. Se utilizan diferentes módulos y programas del kernel para diferentes protocolos: iptables se aplica a IPv4, ip6tables a IPv6, arptables a ARP y ebtables a tramas Ethernet .
iptables requiere privilegios elevados para funcionar y debe ser ejecutado por el usuario root ; de lo contrario, no funcionará. En la mayoría de los sistemas Linux, iptables se instala como /usr/sbin/iptables y se documenta en sus páginas man , que se pueden abrir usando man iptablesuna vez instalado. También puede encontrarse en /sbin/iptables, pero dado que iptables es más un servicio que un "binario esencial", la ubicación preferida sigue siendo /usr/sbin .
El término iptables también se usa comúnmente para referirse de forma inclusiva a los componentes del kernel. x_tables es el nombre del módulo del kernel que contiene la parte del código compartido que utilizan los cuatro módulos y que también proporciona la API utilizada para las extensiones; posteriormente, Xtables se usa más o menos para referirse a toda la arquitectura del firewall (v4, v6, arp y eb).
iptables reemplazó a ipchains ; y el sucesor de iptables es nftables , que se lanzó el 19 de enero de 2014 [ 2 ] y se fusionó con la línea principal del kernel de Linux en la versión 3.13 del kernel.
Descripción general
iptables permite al administrador del sistema definir tablas que contienen cadenas de reglas para el tratamiento de paquetes. Cada tabla está asociada a un tipo diferente de procesamiento de paquetes . Los paquetes se procesan recorriendo secuencialmente las reglas en cadenas. Una regla en una cadena puede provocar un salto a otra cadena, y esto puede repetirse hasta el nivel de anidamiento deseado. (Un salto es como una "llamada", es decir, se recuerda el punto desde el que se saltó). Cada paquete de red que llega o sale del ordenador recorre al menos una cadena.

El origen del paquete determina la cadena que recorre inicialmente. Existen cinco cadenas predefinidas (que se corresponden con los cinco ganchos de Netfilter disponibles), aunque una tabla puede no contener todas las cadenas. Las cadenas predefinidas tienen una política , por ejemplo DROP, que se aplica al paquete si llega al final de la cadena. El administrador del sistema puede crear tantas cadenas adicionales como desee. Estas cadenas no tienen política; si un paquete llega al final de la cadena, se devuelve a la cadena que lo llamó. Una cadena puede estar vacía.
PREROUTINGLos paquetes entrarán en esta cadena antes de que se tome una decisión de enrutamiento.INPUT: El paquete se entregará localmente. No tiene nada que ver con que los procesos tengan un socket abierto; la entrega local está controlada por la tabla de enrutamiento "local-delivery":ip route show table local.FORWARD: Todos los paquetes que hayan sido enrutados y que no estuvieran destinados a la entrega local recorrerán esta cadena.OUTPUT: Los paquetes enviados desde la propia máquina pasarán por esta cadena.POSTROUTINGSe ha tomado la decisión de enrutamiento. Los paquetes ingresan a esta cadena justo antes de ser entregados al hardware.
Una cadena no existe por sí misma; pertenece a una tabla . Hay tres tablas: nat , filter y mangle . A menos que se preceda con la opción -t , un iptablescomando se refiere a la tabla filter por defecto. Por ejemplo, el comando iptables -L -v -n, que muestra algunas cadenas y sus reglas, es equivalente a iptables -t filter -L -v -n. Para mostrar cadenas de la tabla nat , use el comandoiptables -t nat -L -v -n
Cada regla en una cadena contiene la especificación de qué paquetes coincide. También puede contener un objetivo (utilizado para extensiones) o un veredicto (una de las decisiones integradas). A medida que un paquete recorre una cadena, cada regla se examina a su vez. Si una regla no coincide con el paquete, este pasa a la siguiente regla. Si una regla sí coincide con el paquete, toma la acción indicada por el objetivo/veredicto, lo que puede resultar en que se permita o no que el paquete continúe a lo largo de la cadena. Las coincidencias constituyen la mayor parte de los conjuntos de reglas, ya que contienen las condiciones para las que se prueban los paquetes. Estas pueden ocurrir en casi cualquier capa del modelo OSI , como por ejemplo con los parámetros --mac-sourcey -p tcp --dport, y también hay coincidencias independientes del protocolo, como -m time.
El paquete continúa recorriendo la cadena hasta que
- una regla coincide con el paquete y decide el destino final del paquete, por ejemplo, llamando a uno de los
ACCEPToDROP, o a un módulo que devuelve dicho destino final; o - una regla emite el
RETURNveredicto, en cuyo caso el procesamiento regresa a la cadena de llamada; o - Se llega al final de la cadena; el recorrido continúa en la cadena principal (como si
RETURNse hubiera utilizado), o se utiliza la política de cadena base, que es un destino final.
Los objetivos también devuelven un veredicto como ACCEPT( NATlos módulos harán esto) o DROP(por ejemplo, el REJECTmódulo), pero también pueden implicar CONTINUE(por ejemplo, el LOGmódulo; CONTINUEes un nombre interno) continuar con la siguiente regla como si no se hubiera especificado ningún objetivo/veredicto.
utilidades del espacio de usuario
Front-ends
Existen numerosas aplicaciones de software de terceros para iptables que intentan facilitar la configuración de reglas. Las interfaces, tanto textuales como gráficas, permiten a los usuarios generar conjuntos de reglas simples con un solo clic; los scripts suelen referirse a scripts de shell (aunque también son posibles otros lenguajes de scripting) que llaman a iptables o (de forma más rápida) iptables-restorecon un conjunto de reglas predefinidas, o reglas expandidas a partir de una plantilla con la ayuda de un archivo de configuración simple. Las distribuciones de Linux suelen emplear este último esquema de uso de plantillas. Este enfoque basado en plantillas es, en la práctica, una forma limitada de generador de reglas, y dichos generadores también existen de forma independiente, por ejemplo, como páginas web PHP.
Estas interfaces, generadores y scripts suelen estar limitados por sus sistemas de plantillas integrados, que ofrecen espacios para sustituir reglas definidas por el usuario. Además, las reglas generadas generalmente no están optimizadas para el efecto de firewall específico que el usuario desea, ya que hacerlo probablemente aumentaría el costo de mantenimiento para el desarrollador. Se recomienda a los usuarios que comprenden iptables y desean optimizar su conjunto de reglas que creen el suyo propio.
Otras herramientas destacables
- FireHOL : un script de shell que encapsula iptables con un archivo de configuración de texto plano fácil de entender.
- NuFW : una extensión de firewall con autenticación para Netfilter.
- Shorewall : una herramienta de configuración de puerta de enlace/cortafuegos que permite usar reglas más sencillas y asignarlas a iptables.
Véase también
Referencias
Literatura
- Gregor N. Purdy (25 de agosto de 2004). Linux iptables Pocket Reference: Firewalls, NAT & Accounting . O'Reilly Media, Inc. ISBN 978-1-4493-7898-1.
Enlaces externos
- Página web del proyecto netfilter/iptables
- "iptables" . Código gratuito .
- La página de documentación de netfilter/iptables (obsoleta)
- Detección y engaño de escaneos de red : contramedidas contra nmap
- La página de manual de IPTables para obtener ayuda sobre la sintaxis
- Tutorial de Iptables 1.2.2 por Oskar Andreasson
- IPTABLES: El cortafuegos predeterminado de Linux
- Aceleración del filtrado de paquetes de Linux con iptables mediante GPGPU
- Software de línea de comandos
- Software de firewall
- Software de seguridad para Linux
- Características del kernel de Linux
- Software libre exclusivo para Linux
- Software libre programado en C
- Software que utiliza la Licencia Pública General de GNU.