En esta sección trataremos los distintos comandos y qué se puede hacer con ellos. Un comando le indica a iptables qué hacer con el resto de la regla que enviamos al analizador. Normalmente desearemos añadir o eliminar algo en una tabla determinada. En iptables están disponibles los siguientes comandos:
Table 6-2. Comandos
Comando | -A, --append |
Ejemplo | iptables -A INPUT ... |
Descripción | Este comando añade la regla al final de la cadena. La regla siempre se pondrá la última en el conjunto de reglas y lógicamente se comprobará la última, a no ser que posteriormente añadas más reglas con este mismo comando. |
Comando | -D, --delete |
Ejemplo | iptables -D INPUT --dport 80 -j DROP, iptables -D INPUT 1 |
Descripción | Este comando borra una regla de la cadena. Esto puede hacerse de dos maneras: bien introduciendo la regla completa a comparar (como en el ejemplo anterior), bien especificando el número de regla que deseas eliminar. Si empleas el primer método, deberás escribir exactamente lo mismo que haya en la cadena a borrar. Si empleas el segundo método, deberás señalar el número exacto que tiene la regla en la cadena: las reglas están numeradas progresivamente desde la primera, empezando con el número 1. |
Comando | -R, --replace |
Ejemplo | iptables -R INPUT 1 -s 192.168.0.1 -j DROP |
Descripción | Este comando sustituye la entrada existente en la línea especificada. Funciona de la misma forma que el comando --delete, pero en lugar de eliminar completamente la entrada, la sustituye por una nueva. El uso más habitual de este comando puede ser la experimentación con iptables. |
Comando | -I, --insert |
Ejemplo | iptables -I INPUT 1 --dport 80 -j ACCEPT |
Descripción | Se inserta una regla en la posición de la cadena que especifiquemos. En el ejemplo anterior se insertará en la posición nº 1 en la cadena INPUT, por lo que a partir de entonces será la primera regla en esa cadena. |
Comando | -L, --list |
Ejemplo | iptables -L INPUT |
Descripción | Este comando ofrece una lista de todas las entradas de la cadena especificada. En el ejemplo la lista mostrará todas las entradas de la cadena INPUT. Sin embargo está permitido no especificar ninguna cadena en particular, con lo cual el comando listará todas las cadenas de la tabla especificada (para especificar tablas, lee la sección Tablas). El resultado final depende de otras opciones enviadas al analizador, como pueden ser -n, -v, etc. |
Comando | -F, --flush |
Ejemplo | iptables -F INPUT |
Descripción | Este comando elimina todas las reglas de una cadena, comenzando desde la que se ha especificado. Es equivalente a borrar cada regla una a una, pero bastante más rápido. Se puede emplear sin opciones, con lo que borrará todas las reglas de todas las cadenas en la tabla especificada. |
Comando | -Z, --zero |
Ejemplo | iptables -Z INPUT |
Descripción | Este comando obliga a comenzar desde cero a todos los contadores de una cadena especificada, o de todas las cadenas de una tabla. Si has utilizado la opción -v del comando -L, probablemente habrás visto el contador de paquetes al principio de cada campo. Para "poner a cero" este contador, utiliza la opción -Z. Esta función hace lo mismo que -L, salvo que -Z no hace ningún listado de las reglas. Si se emplean juntas -L y -Z (lo cual es correcto), las cadenas serán listadas primero y luego los contadores se reiniciarán (se pondrán a cero). |
Comando | -N, --new-chain |
Ejemplo | iptables -N allowed |
Descripción | Este comando hace que el núcleo cree una nueva cadena con el nombre especificado en la cadena especificada. En el ejemplo anterior se crea una cadena llamada allowed. Ten en cuenta que no puede haber ninguna cadena ni ningún objetivo con el mismo nombre. |
Comando | -X, --delete-chain |
Ejemplo | iptables -X allowed |
Descripción | Este comando borra de la tabla la cadena especificada. Para que funcione, no debe haber ninguna regla que esté relacionada con la cadena que se va a borrar. En otras palabras, deberás borrar o cambiar todas las reglas que tengan algún vínculo con esa cadena antes de borrarla. Si se usa el comando sin opciones, todas las cadenas creadas por el usuario serán eliminadas y sólo permanecerán aquellas que pertenezcan a la tabla especificada, es decir, aquellas que se instalan con iptables. A modo de ejemplo, si escribimos iptables --delete-chain -t filter lo que conseguiremos será eliminar todas las cadenas "de usuario" de la tabla filter, permaneciendo las cadenas por defecto de esta tabla; si, en cambio, escribimos iptables --delete-chain, iptables considera que especificamos la tabla por defecto (la tabla filter), con lo cual el resultado será exactamente el mismo que en el ejemplo anterior. |
Comando | -P, --policy |
Ejemplo | iptables -P INPUT DROP |
Descripción | Este comando hace que el núcleo establezca la política u objetivo por defecto en una cadena. Todos los paquetes que no coincidan con ninguna regla emplearán esa política de la cadena. Los objetivos permitidos son: DROP y ACCEPT (pueden haber más; envíame un correo si es así). |
Comando | -E, --rename-chain |
Ejemplo | iptables -E allowed disallowed |
Descripción | El comando -E hace que iptables cambie el nombre de una cadena del primer al segundo nombre. En el ejemplo anterior cambiaríamos el nombre de la cadena de allowed (permitido) a disallowed (no permitido). Ten en cuenta que ésto no afecta a la forma de actuar de la tabla, sino que es simplemente un cambio cosmético. |
Siempre deberías escribir una línea completa de comando, a no ser que sólo quieras ver la ayuda de iptables o conocer la versión del comando. Para mostrar la versión, emplea la opción -v y para la ayuda, usa la opción -h. Vamos, como siempre.
Ahora vamos a ver unas cuantas opciones que pueden usarse con varios comandos. Observarás que se indica con qué comandos se pueden emplear y qué resultados ofrecen. Ten en cuenta que no se incluye ninguna opción que afecte a reglas o comparaciones. Estas otras opciones se verán en profundidad más adelante.
Table 6-3. Opciones
Opción | -v, --verbose |
Comandos con los que se emplea | --list, --append, --insert, --delete, --replace |
Descripción | Este comando ofrece una salida detallada (completa, descriptiva) y se emplea principalmente con el comando --list. En este caso se mostrará la dirección de la interfaz, las opciones de la regla y las máscaras TOS. Asímismo, también se incluyen los contadores de bytes y paquetes para cada regla. Estos contadores emplean las abreviaturas K (x1,000), M (x1,000,000) y G (x1,000,000,000). Para obtener el tamaño exacto, puedes emplear la opción -x, descrita más adelante. Si se usa esta opción con los comandos --append, --insert, --delete o --replace, el programa mostrará información detallada sobre cómo se ha interpretado la regla, si se ha insertado correctamente, etc. |
Opción | -x, --exact |
Comandos con los que se emplea | --list |
Descripción | Esta opción expande las numeraciones, o sea, no se emplean los múltiplos K, M o G, si no que se ven los paquetes y bytes exactos de los contadores de la regla en cuestión. Esta opción sólo es útil con el comando --list y no tiene ningún interés en los demás comandos. |
Opción | -n, --numeric |
Comandos con los que se emplea | --list |
Descripción | Esta opción muestra valores numéricos: las direcciones IP y los puertos se listarán con sus números y no con sus nombres de servidor, red o aplicación. Sólo se utiliza con --list e ignora la opción por defecto de traducir todos los valores numéricos a servidores y nombres (donde sea posible). |
Opción | --line-numbers |
Comandos con los que se emplea | --list |
Descripción | Empleando esta opción con --list, cada regla se listará con su número de línea. Puede ser conveniente saber qué número tiene cada regla al insertar reglas. Esta opción sólo tiene efecto con el comando --list. |
Opción | -c, --set-counters |
Comandos con los que se emplea | --insert, --append, --replace |
Descripción | Esta opción se usa cuando se crea o modifica una regla de forma que se reinicializan sus contadores de paquetes y bytes. La sintaxis sería algo así: --set-counters 20 4000, lo cual le diría al núcleo que fijara el contador de paquetes a 20 y el contador de bytes a 4000. |
Opción | --modprobe |
Comandos con los que se emplea | Todos |
Descripción | Esta opción se emplea para indicarle a iptables qué módulo utilizar al probar módulos o al añadirlos al núcleo. Se puede usar por ejemplo cuando el comando modprobe no está en ningún directorio de la ruta de búsqueda. De esta forma el programa sabrá qué hacer si se necesita un módulo que no se ha cargado previamente. Esta opción se puede utilizar con todos los comandos |