Iptables es el cortafuegos principal que viene por defecto con la mayoría de las distribuciones de Linux. Es responsable de gestionar la seguridad de la red. Funciona comparando los paquetes de datos con un conjunto de reglas, indicando al sistema que acepte, rechace o reenvíe una conexión de acuerdo con las reglas. En este tutorial, te mostraremos cómo listar y eliminar reglas, verificar y borrar los contadores de paquetes y bytes, y vaciar cadenas. ¿Listo? ¡Empecemos!
Requisitos previos
Antes de entrar de lleno en el tutorial, aclaremos algo. Todos los consejos y trucos demostrados en esta guía se realizan en una máquina virtual independiente. Es una buena idea que tú también lo hagas, ya que elimina cualquier posibilidad de convertir tu sistema en un caos absoluto. Solo después de haber dominado estos procesos deberías intentar implementarlos en situaciones de la vida real.
Para este tutorial, utilizaremos Ubuntu para demostrar todos los pasos. Sin embargo, deberían funcionar de manera similar independientemente de la distribución.
Listar reglas
Listar reglas por especificación
Primero, verifiquemos todas las reglas activas por especificación. Ejecuta el siguiente comando:
|
1 |
sudo iptables -S |

Si has trabajado antes con la creación de reglas de iptables, habrás notado la similitud. Las salidas se parecen a los comandos que se utilizaron para crearlas, excepto por la parte de “iptables”. También comparten una estructura similar con los archivos de configuración de reglas de iptables.
Listar una cadena específica
Intentemos algo más preciso. En lugar de informar todas las reglas de iptables, indícale a iptables que informe las reglas de una cadena específica. Por ejemplo, TCP, INPUT, OUTPUT, etc. Para hacerlo, especifica el nombre de la cadena después de la bandera “-S”:
|
1 |
sudo iptables -S <chain> |

Listar reglas como tablas
La vista de tabla es útil al comparar diferentes reglas. Usa la bandera “-L” para indicarle a iptables que informe todas las reglas activas en formato de tabla:
|
1 |
sudo iptables -L |

La salida contiene todas las reglas actuales ordenadas por la cadena. Al igual que en la sección anterior, también es posible filtrar la salida de la lista por una cadena específica como INPUT, TCP y OUTPUT, etc. Para hacerlo, especifica la cadena después de la bandera “-L”:
|
1 |
sudo iptables -L <chain> |

Analicemos un poco la salida. En nuestro caso, debido a las reglas, la salida se verá un poco desordenada. La primera línea de la salida declara el nombre de la cadena (INPUT) con su política por defecto (DROP). La siguiente línea especifica los encabezados de las columnas de la tabla. El resto son las reglas de la cadena. Veamos qué indican los encabezados:
- target: Si un paquete coincide con la regla, esta sección define qué acción se debe realizar. Puede ser aceptar el paquete, descartarlo, registrarlo o enviarlo a otra cadena.
- prot: Define el protocolo, por ejemplo, udp, tcp, icmp o all.
- opt: Esta columna indica las opciones de IP. Rara vez se utiliza.
- source: Origen del paquete (dirección IP o subred). El valor puede ser específico o anywhere.
- destination: Destino del paquete (dirección IP o subred). El valor puede ser específico o anywhere.
Si te has fijado, la última columna no está etiquetada. Esto se debe a que se utiliza para indicar las opciones de una regla. Contendrá todas las partes de la regla que no cupieron en los campos anteriores. Puede contener cualquier cosa, desde los puertos de origen/destino hasta el estado de conexión del paquete, etc.
Recuento de paquetes y tamaño acumulado
Borrar contadores de paquetes y bytes
Cuando listamos las reglas de iptables, también podemos verificar el número de paquetes y el tamaño acumulado de los paquetes en bytes que coincidieron con cada regla en particular. Es una métrica útil cuando necesitas tener una idea aproximada de qué reglas están coincidiendo con los paquetes.
En este ejemplo, utilizaremos la cadena INPUT. Esta vez, añade la bandera “-v” que significa modo detallado (verbose):
|
1 |
sudo iptables -L INPUT -v |

Notarás que la salida de la tabla ahora incluye dos campos adicionales: pkts y bytes.
Restablecer el recuento de paquetes y el tamaño acumulado
En algunas situaciones, es posible que desee restablecer los contadores que mostramos antes. Si el sistema se reinicia, los contadores se borrarán automáticamente. También puede forzar un restablecimiento manual. Usaremos la bandera “-Z” para restablecer los recuentos de paquetes y el tamaño agregado:
|
1 |
sudo iptables -v -Z |

Tenga en cuenta que este comando restablecerá los contadores de todas las cadenas. Al igual que con otros comandos, es posible restablecer el contador para cadenas específicas. Por ejemplo, el siguiente comando restablecerá los contadores para la cadena INPUT:
|
1 |
sudo iptables -v -Z <chain> |

Es posible hacer que la acción de restablecimiento del contador sea más precisa. Puede restablecer el contador para una regla específica bajo una cadena específica. Para hacerlo, agregue el número de regla debajo del nombre de la cadena:
|
1 |
sudo iptables -v -Z <chain> <rule_number> |
Eliminar reglas
Eliminar reglas por especificación
Existen múltiples formas de abordar la eliminación de reglas de iptables. El primer método para eliminar reglas es por especificación de regla. Para la eliminación, utilizaremos la bandera “-D” seguida de la especificación de la regla:
|
1 |
sudo iptables -v -D INPUT -s 172.217.194.113 -j DROP |

Si ha agregado alguna regla de iptables antes, notará la similitud. Lo único que cambió aquí es la bandera “-D” en lugar de la bandera “-A”.
Eliminar reglas por cadena y número
¿Eliminar reglas por su especificación requiere un poco más de esfuerzo, verdad? ¿Qué pasaría si pudiéramos eliminarlas sin tener que recordar la especificación de la regla? ¡Eliminemos las reglas por su cadena y número! En comparación con el primer método (eliminar por especificación), este es relativamente más fácil ya que no tiene que tener toda la especificación en la mano.
Este método requiere la cadena y el número de línea de la regla de destino. ¿De dónde obtenemos el número de línea? Ejecute el siguiente comando para determinarlo:
|
1 |
sudo iptables -L --line-numbers |

Tendrá una gran salida con todas las reglas y sus números de línea. Para reducir la salida, use el nombre de la cadena después de la bandera “-L”:
|
1 |
sudo iptables -L <chain> --line-numbers |

En la salida, notará la columna adicional num. Indica el número de línea para cada regla. Una vez que hayamos determinado el número de destino, realice la eliminación:
|
1 |
sudo iptables -v -D <chain> <line_number> |
Vaciar cadenas
En el caso de iptables, ¿qué es vaciar una cadena? Es el proceso de eliminar todas las reglas bajo una determinada cadena. Si necesita eliminar reglas de forma masiva, puede utilizar este método. Antes de realizar el vaciado de la cadena, le recomendamos encarecidamente que realice una copia de seguridad de las reglas existentes utilizando iptables-save. Es una herramienta integrada de iptables que mostrará todas las cadenas y reglas actuales. La salida se puede exportar a un archivo de texto:
|
1 |
sudo iptables-save > ~/Desktop/iptables-backup.txt |
![]()
Vaciar una sola cadena
Veamos cómo vaciar una cadena. Use la bandera “-F” seguida de la cadena de destino:
|
1 |
sudo iptables -v -F <chain> |

Vaciar todas las cadenas
Antes de vaciar todas las cadenas, asegúrese de comprender lo que está haciendo. Esto eliminará todas las reglas del cortafuegos iptables. Debe asegurarse de crear una copia de seguridad de las reglas de iptables de antemano.
¿Listo? Vacíe todas las cadenas de iptables ejecutando el siguiente comando:
|
1 |
sudo iptables -v -F |

Vaciar reglas, eliminar cadenas y aceptar todo
Realizar los pasos descritos en esta sección desactivará eficazmente el cortafuegos, permitiendo un tráfico de red sin restricciones. Al igual que en la sección anterior, recomendamos tener una copia de seguridad de iptables antes de proceder. Primero, cambiaremos la política predeterminada de cada una de las cadenas integradas a ACCEPT. Esto es para garantizar que iptables no le impida el acceso a su servidor a través de SSH:
|
1 |
sudo iptables -v -P INPUT ACCEPT && sudo iptables -v -P FORWARD ACCEPT && sudo iptables -v -P OUTPUT ACCEPT |

Ahora, vacíe las tablas nat y mangle:
|
1 2 |
sudo iptables -v -t nat -F sudo iptables -v -t mangle -F |


Vacíe todas las cadenas y elimine todas las cadenas no predeterminadas:
|
1 2 |
sudo iptables -v -F sudo iptables -v -X |


A continuación, veamos el resultado:
|
1 |
sudo iptables -L --line-numbers |
Conclusiones
Iptables es un firewall potente. Esperamos que esta guía le haya sido útil para aprender a listar y eliminar reglas de firewall de iptables. Y no olvide practicarlas antes de aplicarlas en el mundo real.
¡Feliz computación!



Comentarios
Aún no hay comentarios. Sea el primero.