Cómo enumerar y eliminar reglas de firewall de Iptables

Introducción
Iptables es un firewall que cumple un papel esencial en la seguridad de la red para la mayoría de los sistemas Linux. Si bien muchos tutoriales de iptables le enseñarán cómo crear reglas de firewall para proteger su servidor , este se centrará en un aspecto diferente de la administración del firewall: enumerar y eliminar reglas.
En este tutorial, cubriremos cómo realizar las siguientes tareas de iptables:
- Reglas de lista
- Borrar contadores de paquetes y bytes
- Eliminar reglas
- Limpiar cadenas (eliminar todas las reglas de una cadena)
- Limpiar todas las cadenas y tablas, eliminar todas las cadenas y aceptar todo el tráfico
Nota: Cuando trabaje con firewalls, tenga cuidado de no bloquear el tráfico SSH (puerto , de manera predeterminada) para no bloquear su propio servidor :22
. Si pierde el acceso debido a la configuración de su firewall, es posible que deba conectarse a él a través de una consola fuera de banda para solucionar el problema.
Prerrequisitos
Este tutorial asume que está utilizando un servidor Linux con el iptables
comando instalado y que su usuario tiene sudo
privilegios.
Si necesita ayuda con esta configuración inicial, consulte nuestra guía Configuración inicial del servidor con Ubuntu 20.04 . También está disponible para Debian y CentOS .
Normas de cotización por especificación
Veamos primero cómo enumerar reglas. Hay dos formas diferentes de ver las reglas de iptables activas: en una tabla o como una lista de especificaciones de reglas. Ambos métodos proporcionan aproximadamente la misma información en diferentes formatos.
Para enumerar todas las reglas de iptables activas por especificación, ejecute el iptables
comando con la -S
opción:
- sudo iptables -S
Output-P INPUT DROP-P FORWARD DROP-P OUTPUT ACCEPT-N ICMP-N TCP-N UDP-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT-A INPUT -i lo -j ACCEPT-A INPUT -m conntrack --ctstate INVALID -j DROP-A INPUT -p udp -m conntrack --ctstate NEW -j UDP-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP-A INPUT -p icmp -m conntrack --ctstate NEW -j ICMP-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable-A INPUT -p tcp -j REJECT --reject-with tcp-reset-A INPUT -j REJECT --reject-with icmp-proto-unreachable-A TCP -p tcp -m tcp --dport 22 -j ACCEPT...
Como puede ver, el resultado se parece a los comandos que se usaron para crearlos, sin el iptables
comando anterior. Esto también se parecerá a los archivos de configuración de reglas de iptables, si alguna vez usó iptables-persistent
o iptables save
.
Listado de una cadena específica
Si desea limitar la salida a una cadena específica ( INPUT
, OUTPUT
, TCP
, etc.), puede especificar el nombre de la cadena directamente después de la -S
opción. Por ejemplo, para mostrar todas las especificaciones de reglas en la TCP
cadena, debe ejecutar este comando:
- sudo iptables -S TCP
Output-N TCP-A TCP -p tcp -m tcp --dport 22 -j ACCEPT
Ahora echemos un vistazo a la forma alternativa de ver las reglas de iptables activas: como una tabla de reglas.
Reglas de listado como tablas
Enumerar las reglas de iptables en la vista de tabla puede resultar útil para comparar diferentes reglas entre sí. Para mostrar todas las reglas de iptables activas en una tabla, ejecute el iptables
comando con la -L
opción:
- sudo iptables -L
Esto mostrará todas las reglas actuales ordenadas por cadena.
Si desea limitar la salida a una cadena específica ( INPUT
, OUTPUT
, TCP
, etc.), puede especificar el nombre de la cadena directamente después de la -L
opción.
Veamos un ejemplo de INPUT
cadena:
- sudo iptables -L INPUT
OutputChain INPUT (policy DROP)target prot opt source destinationACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHEDACCEPT all -- anywhere anywhereDROP all -- anywhere anywhere ctstate INVALIDUDP udp -- anywhere anywhere ctstate NEWTCP tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEWICMP icmp -- anywhere anywhere ctstate NEWREJECT udp -- anywhere anywhere reject-with icmp-port-unreachableREJECT tcp -- anywhere anywhere reject-with tcp-resetREJECT all -- anywhere anywhere reject-with icmp-proto-unreachable
La primera línea de salida indica el nombre de la cadena ( INPUT
, en este caso), seguido de su política predeterminada ( DROP
). La siguiente línea consta de los encabezados de cada columna de la tabla y va seguida de las reglas de la cadena. Repasemos lo que indica cada encabezado:
target
: Si un paquete coincide con la regla, el destino especifica qué se debe hacer con él. Por ejemplo, un paquete se puede aceptar, descartar, registrar o enviar a otra cadena para compararlo con más reglas.prot
:El protocolo, como por ejemplotcp
,udp
,icmp
, oall
opt
:Esta columna, que rara vez se utiliza, indica las opciones de IP.source
:La dirección IP de origen o subred del tráfico, oanywhere
destination
:La dirección IP de destino o subred del tráfico, oanywhere
La última columna, que no tiene etiquetas, indica las opciones de una regla. Se trata de cualquier parte de la regla que no esté indicada en las columnas anteriores. Puede ser cualquier cosa, desde los puertos de origen y destino hasta el estado de conexión del paquete.
Visualización de recuentos de paquetes y tamaño agregado
Al enumerar las reglas de iptables, también es posible mostrar la cantidad de paquetes y el tamaño total de los paquetes en bytes que coincidieron con cada regla en particular. Esto suele ser útil cuando se intenta obtener una idea aproximada de qué reglas coinciden con los paquetes. Para ello, utilice las opciones -L
y juntas.-v
Por ejemplo, veamos la INPUT
cadena nuevamente, con la -v
opción:
- sudo iptables -L INPUT -v
OutputChain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 284K 42M ACCEPT all -- any any anywhere anywhere ctstate RELATED,ESTABLISHED 0 0 ACCEPT all -- lo any anywhere anywhere 0 0 DROP all -- any any anywhere anywhere ctstate INVALID 396 63275 UDP udp -- any any anywhere anywhere ctstate NEW17067 1005K TCP tcp -- any any anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW 2410 154K ICMP icmp -- any any anywhere anywhere ctstate NEW 396 63275 REJECT udp -- any any anywhere anywhere reject-with icmp-port-unreachable 2916 179K REJECT all -- any any anywhere anywhere reject-with icmp-proto-unreachable 0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ssh ctstate NEW,ESTABLISHED
Tenga en cuenta que el listado ahora tiene dos columnas adicionales, pkts
y bytes
.
Ahora que sabe cómo enumerar las reglas de firewall activas de distintas maneras, veamos cómo puede restablecer los contadores de paquetes y bytes.
Restablecimiento de recuentos de paquetes y tamaño agregado
Si desea borrar o poner a cero los contadores de paquetes y bytes de sus reglas, utilice la -Z
opción. También se restablecen si se reinicia el sistema. Esto resulta útil si desea ver si su servidor está recibiendo tráfico nuevo que coincida con sus reglas existentes.
Para borrar los contadores de todas las cadenas y reglas, utilice la -Z
opción por sí sola:
- sudo iptables -Z
Para borrar los contadores de todas las reglas de una cadena específica, utilice la -Z
opción y especifique la cadena. Por ejemplo, para borrar los INPUT
contadores de la cadena, ejecute este comando:
- sudo iptables -Z INPUT
Si desea poner a cero los contadores de una regla específica, especifique el nombre de la cadena y el número de regla. Por ejemplo, para poner a cero los contadores de la primera regla de la INPUT
cadena, ejecute lo siguiente:
- sudo iptables -Z INPUT 1
Ahora que sabe cómo restablecer los contadores de paquetes y bytes de iptables, veamos los dos métodos que se pueden usar para eliminarlos.
Eliminación de reglas por especificación
Una de las formas de eliminar reglas de iptables es mediante la especificación de reglas. Para ello, puede ejecutar el iptables
comando con la -D
opción seguida de la especificación de reglas. Si desea eliminar reglas mediante este método, puede utilizar la salida de la lista de reglas, iptables -S
, para obtener ayuda.
Por ejemplo, si desea eliminar la regla que descarta los paquetes entrantes no válidos ( -A INPUT -m conntrack --ctstate INVALID -j DROP
), puede ejecutar este comando:
- sudo iptables -D INPUT -m conntrack --ctstate INVALID -j DROP
Tenga en cuenta que la -A
opción que se utiliza para indicar la posición de la regla en el momento de la creación debe excluirse aquí.
Eliminar reglas por cadena y número
La otra forma de eliminar reglas de iptables es por su cadena y número de línea . Para determinar el número de línea de una regla, enumere las reglas en formato de tabla y agregue la --line-numbers
opción:
- sudo iptables -L --line-numbers
OutputChain INPUT (policy DROP)num target prot opt source destination1 ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED2 ACCEPT all -- anywhere anywhere3 DROP all -- anywhere anywhere ctstate INVALID4 UDP udp -- anywhere anywhere ctstate NEW5 TCP tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW6 ICMP icmp -- anywhere anywhere ctstate NEW7 REJECT udp -- anywhere anywhere reject-with icmp-port-unreachable8 REJECT tcp -- anywhere anywhere reject-with tcp-reset9 REJECT all -- anywhere anywhere reject-with icmp-proto-unreachable10 ACCEPT tcp -- anywhere anywhere tcp dpt:ssh ctstate NEW,ESTABLISHED...
Esto agrega el número de línea a cada fila de regla, indicado por el num
encabezado.
Una vez que sepa qué regla desea eliminar, anote la cadena y el número de línea de la regla. Luego ejecute el iptables -D
comando seguido de la cadena y el número de regla.
Por ejemplo, si queremos eliminar la regla de entrada que descarta los paquetes no válidos, podemos ver que se trata de una regla 3
de la INPUT
cadena. Por lo tanto, debemos ejecutar este comando:
- sudo iptables -D INPUT 3
Ahora que sabe cómo eliminar reglas de firewall individuales, repasemos cómo puede eliminar cadenas de reglas.
Cadenas de descarga
Iptables ofrece una forma de eliminar todas las reglas de una cadena o vaciarla . En esta sección se explicarán las distintas formas de hacerlo.
Advertencia: Tenga cuidado de no bloquearse el acceso a su servidor a través de SSH al vaciar una cadena con una política predeterminada de drop
o deny
. Si lo hace, es posible que deba conectarse a ella a través de la consola para corregir su acceso.
Lavado de una sola cadena
Para vaciar una cadena específica, lo que eliminará todas las reglas de la cadena, puede utilizar la opción -F
, o su equivalente --flush
, y el nombre de la cadena a vaciar.
Por ejemplo, para eliminar todas las reglas de la INPUT
cadena, ejecute este comando:
- sudo iptables -F INPUT
Limpiando todas las cadenas
Para vaciar todas las cadenas, lo que eliminará todas las reglas del firewall, puede utilizar la opción -F
, o su equivalente , por sí sola:--flush
- sudo iptables -F
Limpiar todas las reglas, eliminar todas las cadenas y aceptar todas
Esta sección le mostrará cómo limpiar todas las reglas, tablas y cadenas de su firewall y permitir todo el tráfico de red.
Advertencia: Esto desactivará efectivamente su firewall. Solo debe seguir esta sección si desea comenzar a configurar nuevamente su firewall.
En primer lugar, configure las políticas predeterminadas para cada una de las cadenas integradas en ACCEPT
. El motivo principal para hacer esto es asegurarse de que no se le bloquee el acceso a su servidor a través de SSH:
- sudo iptables -P INPUT ACCEPT
- sudo iptables -P FORWARD ACCEPT
- sudo iptables -P OUTPUT ACCEPT
A continuación, vacíe las tablas nat
y mangle
, vacíe todas las cadenas ( -F
) y elimine todas las cadenas que no sean predeterminadas ( -X
):
- sudo iptables -t nat -F
- sudo iptables -t mangle -F
- sudo iptables -F
- sudo iptables -X
Ahora, su firewall permitirá todo el tráfico de red. Si enumera sus reglas ahora, verá que no hay ninguna y que solo quedan las tres cadenas predeterminadas ( INPUT
, FORWARD
, y OUTPUT
).
Conclusión
Después de seguir este tutorial, habrá visto cómo enumerar y eliminar sus reglas de firewall de iptables.
Recuerde que los cambios en iptables que se realicen mediante el iptables
comando son efímeros y deben guardarse para que persistan tras los reinicios del servidor. Esto se explica en la sección Guardar reglas del tutorial Reglas y comandos comunes del firewall.
Deja una respuesta