En entradas anteriores leímos un poco sobre políticas a adoptar para el filtrado de paquetes, así como la definición de tablas, cadenas y reglas. Es el momento de comenzar a aplicar lo aprendido:
# iptables [-t TABLA] [-comando CADENA] [-parámetro parámetro]
Aparentemente sencilla, esta sintaxis esconde muchísimas posibilidades.
Lo primero a resaltar es el símbolo # del promt, que denota que el usuario activo es root. La configuración de iptables requiere permisos elevados, por lo que será el superusuario root el único con los privilegios necesarios para su configuración.
Se definen los comandos y parámetros más obvios y comunes, por partes:
¿Qué se entiende por comandos? Aquellas opciones, generalmente definidas mediante un guión (-) seguido de una letra, que especifican la acción que se desea ejecutar. Si no se indica lo contrario, iptables solo permite especificar un comando. Defino los más comunes, tal cual he sabido traducir del man iptables:
-
-A, --append chain rule-specification
Añade (append) una o más reglas al final de la cadena seleccionada. Es la opción que más usaremos. Como se observa, el comando se puede especificar bien con guión seguido de letra (-A), o bien con el comando extendido (-append).
-
-C, --check chain rule-specification
Comprueba (check) si una regla coincidente con la especificación existe en la cadena seleccionada.
-
-D, --delete chain rule-specification
-D, --delete chain rulenum
Elimina una o más reglas de la cadena seleccionada. Soporta dos sintaxis para especificar la regla:
- 1. Como una coincidencia (rule-specification)
- 2. Como un número en la cadena (NOTA: iptables numera cada regla que se añade (opción -A) numerándolas de 1 en adelante).
-
-I, --insert chain [rulenum] rule-specification
Inserta una o más reglas en la cadena especificada.
-
-R, --replace chain rulenum rule-specification
Reemplaza una regla en la cadena especificada. Fijáos que ya requiere un número de regla previamente definida (si queremos sustituir una regla, debemos definir cuál por su número); podemos ver todas las reglas con sus números de orden con el comando:
(* Si no especificamos una tabla en concreto, se nos mostrarán las reglas de la tabla por defecto FILTER).# iptables [-t regla] -nvL –line-numbers
IMPORTANTE: “El orden en el que se ponen las reglas de firewall es determinante. Normalmente cuando hay que decidir qué se hace con un paquete se va comparando con cada regla del firewall hasta que se encuentra una que le afecta (match), y se hace lo que dicte esta regla (aceptar o denegar); después de eso NO SE MIRARÁN MÁS REGLAS para ese paquete. ¿Cuál es el riesgo?: Si definimos reglas muy permisivas entre las primeras, puede que las siguientes no se apliquen y no sirvan de nada.“
-
-L, --list [chain]
Muestra todas las reglas de la cadena especificada. Si no se especifica una regla, se mostrarán las de todas las cadenas. (¿Y qué tabla se mostrará por defecto si no se especifica ninguna?). La salida es muy básica. Se pueden añadir otros parámetros para una salida más amplia (-v, -n, -x. --line-numbers)
-
-S, --list-rules [chain]
Graba todas las reglas de la cadena seleccionada. Si no se selecciona ninguna cadena todas las reglas se grabarán igual que lo haría el script iptables-save. (NOTA IMPORTANTE A -S: nunca usé esta opción, y no tengo claro que la traducción del man iptables sea la correcta: “Print all rules in the selected chain. If no chain is selected, all chains are printed like iptables-save.” Os remito al man iptables y al man iptables-save.
-
-F, --flush [chain]
Elimina la cadena especificada, o todas ellas si no se especifica ninguna. Es el equivalente a borrar todas las reglas una por una. IMPORTANTE: Eliminar todas las reglas NO equivale a establecer la política por defecto. Con un ejemplo se ve claro:
Se han mostrado las políticas por defecto en una nueva instalación. sin embargo, si las "flusheamos", la salida del comando -L no es la misma:# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
Se han mostrado las políticas después de haber liberado todas las cadenas con iptables -F.# iptables -F # iptables -L Chain INPUT (policy DROP) target prot opt source destination Chain FORWARD (policy DROP) target prot opt source destination Chain OUTPUT (policy DROP) target prot opt source destination Chain bad_packets (0 references) target prot opt source destination Chain bad_tcp_packets (0 references) target prot opt source destination Chain icmp_packets (0 references) target prot opt source destination Chain tcp_inbound (0 references) target prot opt source destination Chain tcp_outbound (0 references) target prot opt source destination Chain udp_inbound (0 references) target prot opt source destination Chain udp_outbound (0 references) target prot opt source destination
-
-N, --new-chain chain
Crea una nueva cadena con un nombre especificado por el usuario.
-
-X, --delete-chain [chain]
Borra una cadena especificada por el usuario. No se permite borrar ninguna de las cadenas predefinidas para cualquier tabla. La cadena debe estar vacía (no debe contener ninguna regla).
-
-P, --policy chain target
Configura la política por defecto para una cadena en particular, de tal forma que, cuando los paquetes atraviesen la cadena completa sin cumplir ninguna regla, serán enviados a un objetivo en particular, como puedan ser ACCEPT o DROP. (Ver la sección TARGETS del man)
-
-E, --rename-chain old-chain new-chain
Renombra una cadena definida por el usuario. No afecta a la estructura de la tabla; es simplemente un arreglo “cosmético”.
-
-h
Muestra la ayuda básica.
Los siguientes comentarios son de la persona que los haya enviado. Este sitio no se hace responsable de las opiniones expresadas por los participantes en los foros y secciones de comentarios, y el hecho de publicar las mismas no significa que esté de acuerdo con ellas.