iptables es un programa de utilidad de espacio de usuario que permite a un administrador de sistemas configurar las reglas de filtrado de paquetes IP del firewall del kernel de Linux , implementado como diferentes módulos Netfilter . Los filtros están organizados en un conjunto de tablas, que contienen cadenas de reglas sobre cómo tratar los paquetes de tráfico de red. Actualmente 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 funciona. En la mayoría de los sistemas Linux, iptables se instala como /usr/sbin/iptables y se documenta en sus páginas de manual , que se pueden abrir usando man iptables
cuando se instala. También se puede encontrar en /sbin/iptables
, pero como iptables es más como 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 manera inclusiva a los componentes de nivel de kernel. x_tables es el nombre del módulo del kernel que lleva la porción de código compartido utilizada por 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.
iptables permite al administrador del sistema definir tablas que contienen cadenas de reglas para el tratamiento de paquetes. Cada tabla está asociada con un tipo diferente de procesamiento de paquetes . Los paquetes se procesan recorriendo secuencialmente las reglas en cadenas. Una regla en una cadena puede causar un goto o salto a otra cadena, y esto se puede repetir hasta cualquier nivel de anidamiento que se desee. (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 de la computadora atraviesa al menos una cadena.
El origen del paquete determina qué cadena atraviesa inicialmente. Hay cinco cadenas predefinidas (que corresponden a los cinco ganchos de Netfilter disponibles), aunque es posible que una tabla no tenga 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 otras cadenas como desee. Estas cadenas no tienen ninguna 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.
PREROUTING
:Los paquetes ingresarán a esta cadena antes de que se tome una decisión de enrutamiento.INPUT
: El paquete se entregará localmente. No tiene nada que ver con los procesos que tienen un socket abierto; la entrega local está controlada por la tabla de enrutamiento "entrega local": ip route show table local
.FORWARD
:Todos los paquetes que se hayan enrutado y no estén destinados a entrega local atravesarán esta cadena.OUTPUT
:Los paquetes enviados desde la propia máquina visitarán esta cadena.POSTROUTING
:Se ha tomado la decisión de enrutamiento. Los paquetes ingresan a esta cadena justo antes de entregarlos al hardware.Una cadena no existe por sí misma, pertenece a una tabla . Existen tres tablas: nat , filter y mangle . A menos que esté precedido por la opción -t , un iptables
comando se refiere a la tabla filteriptables -L -v -n
de manera predeterminada. Por ejemplo, el comando , que muestra algunas cadenas y sus reglas, es equivalente a iptables -t filter -L -v -n
. Para mostrar cadenas de la tabla nat , utilice el comandoiptables -t nat -L -v -n
Cada regla de una cadena contiene la especificación de los paquetes con los que coincide. También puede contener un objetivo (usado para extensiones) o un veredicto (una de las decisiones integradas). A medida que un paquete atraviesa una cadena, se examina cada regla a su vez. Si una regla no coincide con el paquete, el paquete pasa a la siguiente regla. Si una regla coincide con el paquete, la regla toma la acción indicada por el objetivo/veredicto, que puede dar como resultado que se permita que el paquete continúe a lo largo de la cadena o no. Las coincidencias constituyen la mayor parte de los conjuntos de reglas, ya que contienen las condiciones para las que se prueban los paquetes. Esto puede suceder para casi cualquier capa en el modelo OSI , como con los parámetros --mac-source
y -p tcp --dport
, y también hay coincidencias independientes del protocolo, como -m time
.
El paquete continúa recorriendo la cadena hasta que
ACCEPT
o DROP
, o un módulo que devuelve dicho destino final; oRETURN
veredicto, en cuyo caso el procesamiento vuelve a la cadena que invoca; oRETURN
se hubiera utilizado) o se utiliza la política de la cadena base, que es un destino final.Los objetivos también devuelven un veredicto como ACCEPT
( NAT
los módulos harán esto) o DROP
(por ejemplo, el REJECT
módulo), pero también pueden implicar CONTINUE
(por ejemplo, el LOG
módulo; CONTINUE
es un nombre interno) continuar con la siguiente regla como si no se hubiera especificado ningún objetivo/veredicto.
Existen numerosas aplicaciones de software de terceros para iptables que intentan facilitar la creación de reglas. Los front-ends en formato textual o gráfico permiten a los usuarios generar conjuntos de reglas simples con un clic; los scripts generalmente hacen referencia a scripts de shell (pero también son posibles otros lenguajes de scripts) que llaman a iptables o (el más rápido) iptables-restore
con 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 Linux emplean comúnmente este último esquema de uso de plantillas. Este enfoque basado en plantillas es prácticamente una forma limitada de un generador de reglas, y dichos generadores también existen de manera independiente, por ejemplo, como páginas web PHP.
Estos front-ends, generadores y scripts suelen estar limitados por sus sistemas de plantillas integrados y por el hecho de que las plantillas ofrecen puntos de sustitución para las reglas definidas por el usuario. Además, las reglas generadas generalmente no están optimizadas para el efecto de firewall particular que desea el usuario, ya que hacerlo probablemente aumentará el costo de mantenimiento para el desarrollador. Se recomienda a los usuarios que comprendan razonablemente iptables y quieran optimizar su conjunto de reglas que construyan su propio conjunto de reglas.