IPTABLES(8)

NOMBRE
iptables/ip6tables — Herramienta de administración para el filtrado de paquetes Ipv4 e IPv6 y NAT

SINOPSIS
iptables [-t tabla] {-A|-C|-D|-V} cadena definición-regla

ip6tables [-t tabla] {-A|-C|-D|-V} cadena definición-regla

iptables [-t tabla] -I cadena [num_regla] definición-regla

iptables [-t tabla] -R cadena numregla definición-regla

iptables [-t tabla] -D cadena numregla

iptables [-t tabla] -S [cadena [numregla]]

iptables [-t tabla] {-F|-L|-Z} [cadena [numregla]] [opciones...]

iptables [-t tabla] -N cadena

iptables [-t tabla] -X [cadena]

iptables [-t tabla] -P normativa de cadena

iptables [-t tabla] -E antiguo-nombre-cadena nuevo-nombre-cadena

definición-de-reglas := [concordancias...] [objetivo]

concordancia := -m nombre-de-concordancia [opciones-por-concordancia]

objetivo := -j nombre-de-objetivo [opciones-por-objetivo]

DESCRIPCIÓN
iptables y ip6tables se usan para definir, mantener e inspeccionar las tablas para el filtrado de paquetes Ipv4 e Ipv6 del núcleo de Linux. Es posible definir varias tablas y cada una de ellas contiene varias cadenas predefinidas y también puede incluir cadenas definidas por el usuario.

Una cadena consiste en una lista de reglas que pueden concordar con un conjunto de paquetes en lo que se denomina un 'objetivo' que puede llevar hasta una cadena definida por el usuario dentro de la misma tabla.

OBJETIVOS
Una regla del cortafuegos define un criterio para un paquete y un objetivo. Si el paquete no concuerda con ese criterio, se analiza la regla siguiente de la cadena. Si concuerda, la siguiente regla a aplicar vendrá dada por el 'objetivo', éste podrá ser el nombre de una cadena que haya definido el usuario, uno de los objetivos descrito en iptables-extensions(8) o uno de los valores especiales ACCEPT, DROP o RETURN.

ACCEPT indica que se permita el paso al paquete. DROP descarta el paquete mientras que RETURN indica que se debe dejar esta cadena y reanudar en la siguiente regla en la cadena anterior. Si se alcanza el final de una cadena predefinida o existe una concordancia con una cadena predefinida con el objetivo RETURN, el destino del paquete vendrá dado por el objetivo definido en la norma de la cadena.

TABLAS
Actualmente existen cinco tablas independientes. Según la configuración del núcleo y de sus módulos, tendremos unas u otras tablas presentes.

-t, --table tabla
    Esta opción define la tabla de concordancia de paquetes con que la orden debe operar. Si el núcleo está configurado para cargar módulos dinámicamente, se intentará cargar el necesario para esta tabla si no lo está ya.

    Las tablas son las siguientes:

    filter:
        Esta es la tabla por defecto (si no se ha definido la opción -t). Contiene tres cadenas predefinidas: INPUT para paquetes con destino a conectores locales), FORWARD para paquetes con destino a otros equipos, y OUTPUT para paquetes creados en el propio equipo.

    nat:
        Se consulta esta tabla cada vez que se topa con un paquete que trata de iniciar una conexión. Consta de cuatro elementos predefinidos: PREROUTING para modificar paquetes tan pronto como llegan, INPUT para los paquetes con destino a un conector local, OUTPUT para los paquetes generados desde el propio equipo antes de ser enrutados y POSTROUTING para alterar paquetes a punto de salir. La implementación de IPV6 NAT está disponible desde la versión 3.7 del núcleo.

    mangle:
        Esta tabla se emplea para alteraciones especiales de paquetes. Hasta la versión 2.4.17 del núcleo, disponía de dos cadenas predefinidas: PREROUTING para modificar paquetes entrantes antes de ser enrutados y OUPUT para modificar paquetes creados en el propio sistema también antes de ser enrutados. Desde la versión 2.4.18, están disponibles otras trescadenas predefinidas: INPUT para los paquetes que llegan al propio equipo, FORWARD para modificar paquetes enrutados a través del equipo y POSTROUTING para modificar paquetes que están a punto de salir.

    raw:
        Esta tabla se usa principalmente para la configuración de excepciones al seguimiento de conexiones con el objetivo NOTRACK. Se anota en el gancho netfilter con una mayor prioridad haciendo que se interprete antes que ip_conntrack y qe cualquier otra tabla. Proporciona las siguientes cadenas predefinidas: PREROUTING para paquetes entrantes desde cualquier interfaz de red, OUTPUT para paquetes creados por procesos locales.

    security:
        Esta tabla se usa cuando se imponen reglas de control de acceso (MAC)para el tráfico de red tales como los establecidos por los objeticos SECMARK y CONNSECMARK. El control de acceso se implementa mediante módulos de seguridad de Linux como SELinux. La tabla de seguridad se interpreta después de la de filtrado (filter) permitiendo que cualquier regla de control discrecional de acceso (DAC) que contenga la tabla de filtrado pueda aplicarse antes de las reglas MAC. Esta tabla contiene las siguientes cadenas predefinidas: INPUT para los paquetes creados en el propio equipo, OUTPUT para modificar paquetes creados en el propio sistema antes de ser enrutados y FORWARD para modificar paquetes enrutados a través de este equipo.

OPCIONES
Las opciones reconocidas por iptables y ip6tables se dividen en varios grupos.

  ORDENES
Estas opciones definen las acciones que se desea realizar. Solo una de ellas puede definirse en la línea de órdenes salvo que se especifique otra cosa. Para usar las versiones largas de de las ordenes y opciones, solo es necesario asegurarse de usar suficientes letras para que iptables puede distinguirlas del resto.

-A, --append cadena especificación-de-regla
    Añade una o más reglas al final de la cadena seleccionada. Cuando el nombre del origen o del destino se pueda traducir a más de una dirección, deberá añadirse una regla para cada una de las combinaciones posibles.

-C, --check cadena especificación-de-regla
    Comprueba si existe una regla que concuerda con la especificación en la cadena seleccionada. Esta orden emplea el mismo sistema que -D para encontrar una entrada concordante pero no modifica a configuración actual de iptables y utiliza su estado de salida para indicar su éxito o error.

-D, --delete cadena especificación-de-regla

-D, --delete cadena numregla
    Borra una o más reglas de la cadena seleccionada. Existen dos versiones de esta orden: la regla puede definirse como un número en la cadena (el 1 sería la primera regla) o una regla concordante.

-I, --insert chain [numregla] especificación-de-regla
    Inserta una o más reglas con el número indicad en la cadena seleccionada. Así, si el número de la regla es el 1, dicha regla se insertará al inicio de la cadena. También se pone al inicio si no se indica ningún número.

-R, --replace cadena numregla especificación-de-regla
    Sustituye una regla en la cadena seleccionada. Si el origen o el destino pueden resolver a más de una dirección, la ejecución fallará. Las reglas se numeran empezando por el número uno.

-L, --list [cadena]
    Muestra todas las reglas en la cadena seleccionada. Si no se selecciona ninguna cadena, se mostrarán todas. Aligual que con cualquier otra orden de iptables, se aplicará a la tabla especificada (por defecto la de filtrado). Así para ver las reglas NAT deberá ejecutar:
     iptables -t nat -n -L
    Suele utilizarse con la opción -n para evitar largas búsquedas de DNS. También es posible definir la opción -Z (cero), en cuyo caso las cadenas se enumerarán y se pondrán a cero de una e una. El resultado exacto se ve afectado por los otros argumentos dados. Las reglas exactas se suprimen hasta que se ejecute:
     iptables -L -v
    o bien iptables-save(8).

-S, --list-rules [cadena]
    Muestra todas las reglas de la cadena seleccionada. Si no se define ninguna cadena, se muestran todas como en iptable-save. Al igual que cualquier otra orden de iptables, se aplica en la tabla definida (por defecto 'filter').

-F, --flush [cadena]
    Elimina la cadena seleccionada (todas las cadenas de la tabla si no se define ninguna en concreto). Esto es lo mismo que borrar todas las reglas una por una.

-Z, --zero [cadena [reglanum]]
    Resetea el paquete y el contador de bytes en todas las cadenas, solo en la cadena indicada, o solo en una determinada regla de una cadena. De igual modos, es posible definir la opción -L, --list (lista) para ver los contadores justo antes de resetearse (consulta más atrás).

-N, --new-chain cadena
    Crea una nueva cadena con el nombre dado. No puede existir ningún objetivo con ese nombre previamente.

-X, --delete-chain [cadena]
    Elimina la cadena opcional definida por el usuario. No puede quedar ninguna referencia a ella, si las hubiese tendrán que eliminarse o modificarse dichas reglas para que pueda eliminarse. La cadena tendrá que estar vacía, no contener ninguna regla. Si no se indica ningún argumento, intentará eliminar todas las cadenas no nativas de la tabla. Las cadenas vacías preconfiguradas sólo podrán eliminarse mediante iptables-nft.

-P, --policy cadena objetivo
    Define la norma que se aplicará para la cadena nativa (no definida por el usuario) para el objetivo definido. Dicha norma tiene que ser ACCEPT o DROP.

-E, --rename-chain nombre-antiguo nombre-nuevo
    Renombra la cadena definida con el nombre dado. Esto solo tiene un efecto estético no afectando a la estructura de la tabla.

-h  Ayuda. Proporciona una muy breve descripción de la sintaxis de la orden.

  PARÁMETROS
Los siguientes parámetros componen una definición de regla (tal como se emplea en las órdenes add, delete, insert, replace y append).

-4, --ipv4
    Esta opción no tiene ningún efecto sobre iptables ni iptables-restore. Si se inserta una regla con la opción -4 con (y solo con) ip6tables-restore, se ignorará sin más. Cualquier otra posibilidad emitirá un error. Esta opción permite incluir reglas IPv4 e IPv6 en un mismo archivo para que lo puedan utlizar tanto iptables-restore como ip6tables-restore.

-6, --ipv6
    Esta opción no tiene ningún efecto sobre ip6tables ni ip6tables-restore. Si se inserta una regla con la opción -6 con (y solo con) iptables-restore, se ignorará sin más. Cualquier otra posibilidad emitirá un error. Esta opción permite incluir reglas IPv4 e IPv6 en un mismo archivo para que lo puedan utlizar tanto iptables-restore como ip6tables-restore.

[!] -p, --protocol protocolo
    El protocolo de la regla o del paquete a comprobar. Dicho protocolo pueder ser alguno de estos: tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh o el comodín "all", también puede ser un valor numérico en representación de un de estos protocolos o de otro diferente. También es posible indicar un nombre incluido en /etc/protocols. El carácter "!" invierte la orden dada. El número '0' equivale a all concordando con todos lo protocolos y será el comportamiento por defecto cuando se omita esta opción. No se permite el uso de extensiones del encabezado IPv6 salvo esp. Tanto esp como ipv6-nonext pueden usarse a partir de la versión 2.6.11 del núcleo. El hecho de que el '0' sea equivalente a todos los protocolos hace que no sea posible chequear directamente si este campo tiene el valor '0'. Para buscar la concordancia con un encabezado HBH, aunque sea el último, no se puede usar -p 0 si -m hbh.

[!] -s, --source dirección[/máscara][,...]
    Definición del origen. Dirección puede ser un nombre de red, un nombre de equipo, una dirección IP de red (con /máscara) o una dirección IP simple. Los nombres de equipo se resolverán solo una vez, antes de enviar la regla al núcleo. No es buena idea especificar cualquier nombre para resolver con una consulta remota como DNS. La máscara puede ser una máscara de red ipv4 (para iptables) o un número simple, especificando el número de unos en el lado izquierdo de la máscara de red. Por lo tanto, una máscara de iptables de 24 es equivalente a 255.255.255.0. El argumento '!' antes de especificar la dirección invertirá el sentido de la dirección. El indicador --src es un alias para esta opción. Se pueden especificar varias direcciones, pero hará expandir a múltiples reglas (al agregar con -A) o provocará que se eliminen múltiples reglas (con -D).

[!] -d, --destination dirección[/máscara][,...]
    Definición del destino. Consulte la descripción del indicador -s (fuente) para obtener una descripción detallada de la sintaxis. El indicador --dst es un alias para esta opción.

-m, --match match
    Define una concordancia para usar, es decir, un módulo de extensión que comprueba una propiedad específica. El conjunto de concordancias será la condición bajo la cual se invoca un objetivo. Las concordancias se evalúan del primero al último según lo especificado en la línea de órdenes. la evaluación se detendrá tan pronto el resultado de una extensión resulte falso.

-j, --jump objetivo
    Esto definirá el objetivo de la regla; es decir, qué hacer si el paquete concuerda. El objetivo puede ser una cadena definida por el usuario (distinta de aquella en la que se encuentra esta regla), uno de los objetivos integrados especiales que deciden el destino del paquete o una extensión (consulte EXTENSIONES DE CONCORDANCIA Y OBJETIVO a continuación). Si esta opción se omite en una regla (y no se usa -g), el hecho de concordar con la regla no tendrá ningún efecto en el destino del paquete, pero los contadores de la regla se incrementarán.

-g, --goto cadena
    Esto indica que el procesamiento debe continuar en una cadena definida por el usuario. A diferencia de la opción --jump, RETURN no continuará procesando en esta cadena sino en la cadena que nos invocó a través de --jump.

[!] -i, --in-interface nombre
    Nombre de una interfaz a través de la cual se recibió un paquete (solo para paquetes que ingresan a las cadenas INPUT, FORWARD y PREROUTING). El argumento '!' empleado antes del nombre de la interfaz, invertirá el significado. Si el nombre de la interfaz termina en '+', concordará con cualquier interfaz que comience con este nombre. Si se omite esta opción, cualquier nombre de interfaz concordará..

[!] -o, --out-interface nombre
    Nombre de una interfaz a través de la cual se va a enviar un paquete (para paquetes que entran en las cadenas FORWARD, OUTPUT y POSTROUTING). El argumento '!' antes del nombre de la interfaz hará que el sentido se invierta. Si el nombre de la interfaz termina con '+', concordará con cualquier interfaz que comience con este nombre. Si se omite esta opción, cualquier nombre de interfaz concordará.

[!] -f, --fragment
    Esto significa que la regla sólo se refiere al segundo y posteriores fragmentos IPv4 de paquetes fragmentados. Dado que no es posible conocer los puertos de origen o destino de dicho paquete (o tipo de ICMP), dichos paquetes no concordarán con ninguna regla que los especifique. Cuando el argumento '!' precede al indicador '-f', la regla solo concordarácon fragmentos principales o paquetes no fragmentados. Esta opción es específica de IPv4, no está disponible en ip6tables.

-c, --set-counters paquetes bytes
    Permite al administrador inicializar los contadores de paquetes y bytes de una regla (durante las operaciones INSERT, APPEND, REPLACE).

  OTRAS OPCIONES
Pueden especificarse las siguientes opciones adicionales:

-v, --verbose
    Salida detallada. Esta opción hace que la orden de listado muestre el nombre de la interfaz, las opciones de regla (si las hay) y las máscaras TOS. Los contadores de paquetes y bytes también se enumeran, con el sufijo 'K', 'M' o 'G' para multiplicadores de 1000, 1.000.000 y 1.000.000.000 respectivamente (consulte el indicador -x para modificarlo). Ya sea para agregar, insertar, eliminar o eemplazar, esto mostrará información detallada sobre la regla o reglas. -v se puede especificar varias veces para (posiblemente) que muestre mensajes de depuración más y más detallados: si se especifica dos veces, iptables-legacy volcará la información de la tabla y las entradas en libiptc, iptables-nft volcará las reglas en netlink (código VM) presentación. Si se especifica tres veces, iptables-nft también volcará cualquier mensaje de enlace de red enviado al núcleo.

-V, --version
    Muestra la versión del programa y la API del núcleo utilizada.

-w, --wait [segundos]
    Espere a que se bloquee xtables. Para evitar que se ejecuten varias instancias del programa al mismo tiempo, se intentará obtener un bloqueo exclusivo en el inicio. Por defecto, el programa se cerrará si no se puede obtener el bloqueo. Con esta opción, el programa esperará (indefinidamente o los segundos indicados) hasta que pueda obtener dicho bloqueo exclusivo.

-n, --numeric
    Salida numérica. Las direcciones IP y los números de puerto se mostrarán en formato numérico. De forma predeterminada, el programa intentará mostrarlos como nombres de equipo, nombres de red o servicios; según corresponda.

-x, --exact
    Expande números. Muestra el valor exacto de los contadores de paquetes y bytes, en lugar de solo el número redondeado en K (múltiplos de 1000), M (múltiplos de 1000 K) o G (múltiplos de 1000 M). Esta opción sólo es relevante para la orden -L.

--line-numbers
    Añade el número de línea al inicio de cada regla cuando se listen las reglas, viendo así la posición de la regla en la cadena.

--modprobe=orden
    Emplea orden para cargar cualquier módulo que necesite (objetivos, etc...) al añadir o insertar reglas en una cadena.

ARCHIVO DE BLOQUEO
iptables usa el archivo /run/xtables.lock para su bloqueo exclusivo al inicio.

La variable de entorno XTABLES_LOCKFILE puede usarse para anular la configuración predeterminada.

CONCORDANCIAS Y EXTENSIONES DE OBJETIVO

iptables puede utilizar módulos de destino y concordancia de paquetes extendidos. Puede ver una lista en la página de manual iptables-extensions(8).

DIAGNÓSTICOS
Varios mensajes de error se muestran por la salida de error estándar. Como es usual, el código 0 indica un correcto funcionamiento. Los errores causados por parámetros no válidos o abusados causarán un código de salida de 2. Los errores que indican una incompatibilidad entre el núcleo y el espacio del usuario emiten un código de salida de 3. Los errores que indican un problema de recursos, como un bloqueo ocupado, la asignación de memoria fallida o los mensajes de error del núcleo provocan un código de salida de 4. Otro tipo de errores provocarán un código de salida de 1.

ERRORES
¿Errores? ¿Qué será eso? ;-) Enfín, eche un vistazo en https://bugzilla.netfilter.org/ iptables terminará su ejecución inmediatamente con un código de error 111 si se intenta ejecutar como SUID root. iptables no se puede utilizar de forma segura de esta manera porque confía en las bibliotecas compartidas (concordancias, objetivos) cargadas en tiempo de ejecución; es posible configurar la ruta de búsqueda mediante variables de entorno.

COMPATIBILIDAD CON IPCHAINS
iptables es muy similar a ipchains. La principal diferencia es que las cadenas INPUT y OUTPUT solo son 'atravesadas' por paquetes que llegan y por los que se origina en el equipo local. Por lo tanto, cada paquete sólo pasa a través de una de las tres cadenas (excepto el tráfico de loopback, donde se involucran las cadenas de ENTRADA y SALIDA); anteriormente, un paquete reenviado pasaría por los tres.

La otra diferencia principal es que -i se refiere a la interfaz de entrada; -o se refiere a la interfaz de salida y ambas están disponibles para paquetes que entran en la cadena FORWARD.

Se han separado las distintas formas de NAT; iptables es un filtro de paquetes puro cuando se utiliza la tabla de 'filtro' predeterminada, con módulos de extensión opcionales. Esto debería evitar gran parte de la confusión sobre la combinación de enmascaramiento de IP y filtrado de paquetes vista anteriormente. Entonces las siguientes opciones se manejan de manera diferente:
 -j MASQ
 -M -S
 -M -L
Hay varios otros cambios en iptables.

VÉASE TAMBIÉN
iptables-apply(8), iptables-save(8), iptables-restore(8), iptables-extensions(8),

El documento COMO (HOW-TO en inglés) de filtrado de paquetes detalla el uso de iptables para el filtrado de paquetes, el COMO de NAT detalla NAT, el COMO de extensiones de netfilter detalla extensiones que no están en la distribución estándar y el COMO de hacking de netfilter detalla las partes internas de netfilter.
Visite https://www.netfilter.org/.

AUTORES
Rusty Russel es el autor original de iptable en conjunción con Michael Neuling.

Marc Boucher hizo que Rusty abandonara ipnatctl presionando para que se creara un marco de selección de paquetes genérico en iptables, luego escribió la tabla de mangle, la concordancia de propietario, varios asuntos del marcado además de varias aportaciones interesantes en general.

James Morris escribió el objetivo TOS, y el acierto tos.

Jozsef Kadlecsik escribió el objetivo REJECT.

Harald Welte escribió el objetivo ULOG y NFQUEUE, el nuevo libiptc, así como las concordancias y objetivos TTL, DSCP, ECN.

El equipo principal de Netfilter lo forman: Jozsef Kadlecsik, Pablo Neira Ayuso , Eric Leblond, Florian Westphal y Arturo Borrero Gonzalez. Los miembros eméritos de dicho equipo son los siguientes: Marc Boucher, Martin Josefsson, Yasuyuki Kozakai, James Morris, Harald Welte and Rusty Russell.

Esta página de manual fue escrita por Herve Eychenne <rv@wallfire.org>.

VERSIÓN

This manual page applies to iptables/ip6tables 1.8.13.

TRADUCCIÓN
La traducción al español de esta página del manual fue creada por Marcos Fouces <marcos@debian.org>

Esta traducción es documentación libre; lea la GNU General Public License Version 3 (https://www.gnu.org/licenses/gpl-3.0.html) o posterior con respecto a las condiciones de copyright. No existe NINGUNA RESPONSABILIDAD.

Si encuentra algún error en la traducción de esta página del manual, envíe un correo electrónico a debian-l10n-spanish@lists.debian.org.