Volver al blog

Listar y eliminar reglas del cortafuegos Iptables

Listar y eliminar reglas del cortafuegos Iptables

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:

iptables list

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”:

list specific 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:

list rules as table iptables

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”:

filter by 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):

package and byte counters iptables

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:

Reset packet counts and aggregate size

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:

reset particular counter

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:

reset specific rule

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:

Delete rules by specification

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:

Delete rules by chain and number - get line number

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”:

Delete rules by chain and number - filter

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:

delete iptables rule

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:

iptables rules export

Vaciar una sola cadena

Veamos cómo vaciar una cadena. Use la bandera “-F” seguida de la cadena de destino:

flush a single 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:

flush all changes

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:

Flush rules, delete chains and accept all

Ahora, vacíe las tablas nat y mangle:

 flush nat and mangle tables

 mangle tables

Vacíe todas las cadenas y elimine todas las cadenas no predeterminadas:

Flush all the chains

 delete all the non-default chains

A continuación, veamos el resultado:

iptables result

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!

author

Akshay Nagpal

Autor · CloudSigma

Preslav Dobrev es diseñador creativo en CloudSigma, centrado en una identidad empresarial coherente mediante el uso de canales de marketing tradicionales e innovadores. Es experto en fusionar la visión artística con el marketing estratégico para crear narrativas de marca impactantes.

Comentarios

Aún no hay comentarios. Sea el primero.