Cómo configurar iptables en CentOS

El programa de utilidad de espacio de usuario iptables permite configurar las tablas proporcionadas por el firewall del kernel de Linux, así como las cadenas y reglas que almacena. El módulo del kernel que se usa actualmente para iptables solo se aplica al tráfico de IPv4, para configurar las reglas de firewall para las conexiones de IPv6, en su lugar debes usar ip6tables, que responde a las mismas estructuras de comando que iptables. Si estás utilizando CentOS 7, deberías considerar la configuración de firewalld, que combina la funcionalidad de iptables e ip6tables, aunque es posible seguir usando iptables de la misma manera.

Listado de reglas actuales

En CentOS y otras variantes de Red Hat, iptables a menudo viene con algunas reglas preconfiguradas, verifica las reglas actuales de iptable usando el siguiente comando:

Esto imprimirá una lista de tres cadenas, input, forward and output, como la salida del ejemplo de la tabla de reglas vacía a continuación:

Los nombres de la cadena indican a qué tráfico se aplicarán las reglas en cada lista, input es para cualquier conexión que llegue a tu servidor en la nube, output es cualquier tráfico saliente y forward para cualquier paso. Cada cadena también tiene su configuración de política que determina cómo se maneja el tráfico si no coincide con ninguna regla específica, de forma predeterminada está configurado para aceptar.

Añadiendo reglas

Por lo general, los firewalls se pueden configurar de una o dos maneras, ya sea configurando la regla predeterminada para que acepte y luego bloquee cualquier tráfico no deseado con reglas específicas, o bien, utilizando las reglas para definir el tráfico permitido y bloquear todo lo demás.

Este último es a menudo el enfoque recomendado, ya que permite el bloqueo preventivo del tráfico, en lugar de rechazar de forma reactiva las conexiones que no deberían intentar acceder a tu servidor en la nube.

Para comenzar a utilizar iptables, primero debes agregar las reglas para el tráfico entrante permitido para los servicios que necesitas. Iptables puede rastrear el estado de la conexión, así que usa el siguiente comando para permitir que continúen las conexiones establecidas.

Puedes verificar que la regla se agregó usando el mismo comando sudo iptables -L como antes.

A continuación, debes permitir el tráfico a un puerto específico para habilitar las conexiones SSH con el siguiente comando:

El comando ssh en el comando se traduce al número de puerto 22, que el protocolo utiliza de forma predeterminada.

La misma estructura de comando se puede usar para permitir el tráfico a otros puertos también. Para habilitar el acceso a un servidor web HTTP, usa el siguiente comando:

Después de agregar todas las reglas permitidas que requiera, cambia la política de output para eliminar.

Las mismas reglas de política se pueden definir para otras cadenas también al ingresar el nombre de la cadena y seleccionar DROP o ACCEPT.

Guardando y restaurando reglas

Ahora, si tuvieras que reiniciar tu servidor en la nube, se borrarán todas estas configuraciones de iptables. Para evitar esto, guarda las reglas en un archivo.

Luego, simplemente puedes restaurar las reglas guardadas leyendo el archivo que guardaste.

Para automatizar la restauración al reiniciar, CentOS ofrece un servicio de sistema con el mismo nombre, iptables, que debe habilitarse.

Luego, simplemente puedes guardar las reglas actuales usando el siguiente comando:

Estos son solo algunos comandos simples que puedes usar con iptables, que es capaz de mucho más. Sigue leyendo para ver algunas de las otras opciones disponibles para un control más avanzado sobre las reglas de iptable.

Configuración avanzada de reglas

Según el comportamiento del firewall básico, las reglas se leen en el orden en que aparecen en cada cadena, lo que significa que deberás colocar las reglas en el orden correcto.

Al agregar nuevas reglas, se agregan al final de la lista. Puedes agregar nuevas reglas a una posición específica de la lista insertándolas usando el comando iptables -I <index> -, donde <index> es el número de orden en el que deseas insertar la regla. Para saber qué número de index (índice) se debe ingresar, usa el siguiente comando:

El número al principio de cada línea de regla indica la posición en la cadena. Para insertar una nueva regla sobre una regla existente específica, simplemente usa el número de índice de esa regla existente. Por ejemplo, para insertar una nueva regla en la parte superior de la cadena, usa el siguiente comando con el número de índice 1.

Si deseas eliminar una regla existente de una cadena determinada, usa el comando de eliminación con el parámetro -D. La forma más fácil de seleccionar la regla para eliminar es usar los números de índice explicados anteriormente. Por ejemplo, para eliminar la segunda regla en la cadena de entrada, usa este comando:

También es posible eliminar todas las reglas de una cadena específica o incluso las iptables completas utilizando el parámetro -F.

Esto es útil si sospechas que iptables está interfiriendo con tu intento de tráfico de red, o simplemente deseas comenzar a configurar nuevamente desde una tabla limpia. Recuerda guardar las reglas en un archivo antes de vaciar la tabla.

Con el iptable vacío, tu servidor podría ser vulnerable a los ataques. Asegúrate de proteger tu sistema con un método alternativo mientras deshabilitas iptables incluso temporalmente.