iptables/ip6tables — Herramienta de administración
para el filtrado de paquetes Ipv4 e IPv6 y NAT
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 table] -P chain
policy
iptables [-t tabla] -E
antiguo-nombre-cadena nuevo-nombre-cadena
rule-specification := [matches...] [target]
match := -m matchname [per-match-options]
target := -j targetname [per-target-options]
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.
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.
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.
Las opciones reconocidas por iptables y ip6tables se
dividen en varios grupos.
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.
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).
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.
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.
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).
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? ¿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.
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/.
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>.
This manual page applies to iptables/ip6tables 1.8.11.
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 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.