Introducción
Iptables es un firewall que juega un papel esencial en la seguridad de la red para la mayoría de los sistemas Linux. Este tutorial se centrará en un aspecto diferente de la gestión del firewall: enumerar y eliminar reglas.
En este tutorial, cubriremos cómo realizar las siguientes tareas de iptables:
- Lista de reglas
- Contadores de bytes y paquetes claros
- Eliminar reglas
- Borrar cadenas (eliminar todas las reglas de una cadena)
- Vacíe todas las cadenas y mesas, suelte todas las cadenas y acepte todo el tráfico
Nota:
Prerrequisitos
Antes de comenzar a usar este tutorial, debe tener una cuenta de superusuario no root separada, un usuario con privilegios de sudo, configurada en el servidor. Si necesita configurarlo, siga la guía adecuada:
Veamos primero cómo enumerar las 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.
Enumere las reglas por especificación
Para enumerar todas las reglas de iptables activas por especificación, ejecute el iptables
con la opción -S
sudo iptables -S
-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, la salida se parece a los comandos utilizados para crearlos. Esto también será similar a los archivos de configuración de reglas de iptables, si alguna vez usó iptables-persistent
o iptables save
.
Lista 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 justo después de la opción -S
Por ejemplo, para mostrar todas las especificaciones de reglas en la TCP
, ejecute este comando:
sudo iptables -S TCP
-A TCP -p tcp -m tcp --dport 22 -j ACCEPT
Echemos un vistazo a la forma alternativa de ver las reglas de iptables activas, como una tabla de reglas.
Enumere las reglas como tablas
Enumerar las reglas de iptables en la vista de tabla puede ser útil para comparar diferentes reglas entre sí,
Para generar todas las reglas de iptables activas en una tabla, ejecute el iptables
con la opción -L
sudo iptables -L
Esto producirá 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 justo después de la opción -L
Echemos un vistazo a una cadena de ENTRADA de ejemplo:
sudo iptables -L INPUT
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
DROP all -- anywhere anywhere ctstate INVALID
UDP udp -- anywhere anywhere ctstate NEW
TCP tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
ICMP icmp -- anywhere anywhere ctstate NEW
REJECT udp -- anywhere anywhere reject-with icmp-port-unreachable
REJECT tcp -- anywhere anywhere reject-with tcp-reset
REJECT 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 fila consta de los encabezados de cada columna de la tabla y está seguida por las reglas de la cadena. Veamos qué indica cada encabezado:
- objetivo: si un paquete coincide con la regla, el objetivo especifica qué se debe hacer con él. Por ejemplo, un paquete puede aceptarse, eliminarse, registrarse o enviarse a otra cadena para compararlo con varias reglas.
- prot: el protocolo, como
tcp
,udp
,icmp
oall
- opt: Rara vez utilizado, esta columna indica opciones de IP
- fuente: la dirección IP del origen o subred del tráfico, o en
anywhere
- destino: la dirección IP o subred del tráfico de destino, o en
anywhere
La última columna, que no está etiquetada, indica las opciones de una regla. Es decir, cualquier parte de la regla que no esté indicada en las columnas anteriores. Esto podría ser cualquier cosa, desde los puertos de origen y destino hasta el estado de conexión del paquete.
Mostrar recuentos de paquetes y tamaño agregado
Al enumerar las reglas de iptables, también es posible mostrar el número de paquetes y el tamaño del paquete agregado en bytes, correspondiente a cada regla en particular. Esto suele ser útil cuando se intenta tener una idea aproximada de qué reglas corresponden a los paquetes. Para hacer esto, simplemente use las -L
y -v
juntas.
Por ejemplo, veamos nuevamente la cadena INPUT, con la opción -v
sudo iptables -L INPUT -v
Chain 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 NEW
17067 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 la lista ahora tiene dos columnas adicionales: pkts
y bytes
.
Ahora que sabe cómo enumerar las reglas de firewall activas de varias maneras, echemos un vistazo a cómo restablecer los contadores de paquetes y bytes.
Restaurar recuentos de paquetes y tamaños agregados
Si desea borrar o borrar los contadores de paquetes y bytes de sus reglas, use la opción -Z
También se restablecen si se reinicia. Esto es ú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, use solo la opción -Z
sudo iptables -Z
Para borrar los contadores de todas las reglas en una cadena específica, use la -Z
y especifique la cadena. Por ejemplo, para borrar los contadores de la cadena INPUT, ejecute este comando:
sudo iptables -Z INPUT
Si desea borrar los contadores de una regla específica, especifique el nombre de la cadena y el número de regla. Por ejemplo, para restablecer los contadores de la primera regla en la cadena INPUT, haga lo siguiente:
sudo iptables -Z INPUT 1
Ahora que sabe cómo restablecer el paquete iptables y los contadores de bytes, echemos un vistazo a los dos métodos que se pueden usar para borrarlos.
Eliminar una regla para la especificación
Una de las formas de eliminar las reglas de iptables es mediante la especificación de reglas. Para hacer esto, puede ejecutar el iptables
con la -D
seguida de la especificación de la regla. Si desea eliminar reglas usando este método, puede usar el resultado de la lista de reglas iptables -S
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
, que se utiliza para indicar la posición de la regla en el momento de la creación, debe excluirse aquí.
Eliminar una regla por cadena y número
La otra forma de deshacerse de las reglas de iptables es a través de 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 opción --line-numbers
sudo iptables -L --line-numbers
Chain INPUT (policy DROP)
num target prot opt source destination
1 ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
2 ACCEPT all -- anywhere anywhere
3 DROP all -- anywhere anywhere ctstate INVALID
4 UDP udp -- anywhere anywhere ctstate NEW
5 TCP tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
6 ICMP icmp -- anywhere anywhere ctstate NEW
7 REJECT udp -- anywhere anywhere reject-with icmp-port-unreachable
8 REJECT tcp -- anywhere anywhere reject-with tcp-reset
9 REJECT all -- anywhere anywhere reject-with icmp-proto-unreachable
10 ACCEPT tcp -- anywhere anywhere tcp dpt:ssh ctstate NEW,ESTABLISHED...
Esto agrega el número de fila a cada fila de la regla, indicado por el encabezado num.
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
seguido de la cadena y el número de regla.
Por ejemplo, si queremos borrar la regla de entrada que descarta paquetes inválidos, podemos ver que es la regla 3
de la cadena INPUT
Entonces deberíamos ejecutar este comando:
sudo iptables -D INPUT 3
Ahora que sabe cómo eliminar reglas de firewall individuales, veamos cómo puede vaciar cadenas de reglas.
Cadenas de descarga (vacío)
Iptables ofrece una forma de borrar todas las reglas de una cadena o borrar una cadena. Esta sección cubrirá la variedad de formas de hacer esto.
Nota:descartardenegar
Vaciar una sola cadena
Para vaciar una cadena específica, que eliminará todas las reglas de la cadena, puede usar la -F
o su equivalente --flush
y el nombre de la cadena para vaciar.
Por ejemplo, para eliminar todas las reglas en la INPUT
, ejecute este comando:
sudo iptables -F INPUT
Vacía todas las cadenas
Para vaciar todas las cadenas, lo que eliminará todas las reglas de firewall, puede usar la -F
, o el equivalente --flush
, solo:
sudo iptables -F
Borrar todas las reglas, borrar todas las cadenas y aceptar todo
Esta sección le mostrará cómo borrar todas las reglas, tablas y cadenas de firewall y permitir todo el tráfico de la red.
Nota:
Primero, establezca los criterios predeterminados para cada una de las cadenas integradas en ACCEPT
. La razón principal para hacer esto es asegurarse de que el servidor no lo bloqueará a través de SSH:
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
Luego vacíe las nat
y mangle
, vacíe todas las cadenas ( -F
) y elimine todas las cadenas no predeterminadas ( -X
):
sudo iptables -t nat -F
sudo iptables -t mangle -F
sudo iptables -F
sudo iptables -X
El cortafuegos permitirá ahora todo el tráfico de la red. Si enumera sus reglas ahora, verá que no hay ninguna y solo quedan las tres cadenas predefinidas (INPUT, FORWARD y OUTPUT).
Conclusión
Después de seguir este tutorial, debe saber cómo enumerar y eliminar sus reglas de firewall de iptables.
Recuerde que cualquier cambio en iptables a través del iptables
es temporal y debe guardarse para persistir durante el reinicio del servidor.