Volver al blog

Configuración de un firewall Iptables: Reglas y comandos básicos

Configuración de un firewall Iptables: Reglas y comandos básicos

Introducción

Iptables​ es una utilidad de línea de comandos de ​cortafuegos ​. Esto significa que es un software que le permite configurar un cortafuegos en su sistema. Normalmente está disponible por defecto en ​Linux​ sistemas. En esta guía, ​analizaremos algunas de las reglas y comandos comunes que acompañan al cortafuegos iptables​. Cada vez que una conexión intente establecerse con su sistema, el cortafuegos consultará estas reglas para determinar cuál debe ser el siguiente paso.

Comandos de Iptables

Esta guía presentará algunos de los comandos de iptables más esenciales. Para seguir la guía, necesitará tener una comprensión básica de qué es iptables y cómo funciona. Le ayudará a comprender mejor las reglas que está implementando con los siguientes comandos. Recuerde que cualquiera de los comandos que se detallan a continuación se puede utilizar de forma aislada. Por otro lado, también puede combinarlos para adaptarlos a sus necesidades específicas.

Cosas a tener en cuenta

Antes de seguir leyendo, aquí hay algunas cosas que debe tener en cuenta:

  • El orden de las reglas en iptables es importante.
  • Para añadir una nueva regla al final de una cadena, su comando ​iptables tendrá que utilizar la opción ​-A.​​
  • Si desea añadir la regla en otra posición, tiene que utilizar la opción ​-I . Esta opción le permite especificar la ubicación exacta de la regla. Si desea colocar la regla al principio de la cadena, simplemente no proporcione un número de regla.
  • Para garantizar que tenga un acceso constante a su servidor, bloquee el tráfico SSH en el puerto 22 de forma predeterminada.
  • En caso de que no lo haga y pierda el acceso a su servidor, puede volver a conectarse utilizando la consola. Permita el tráfico SSH para cambiar la configuración del cortafuegos.
  • Si alguna vez desea revisar el conjunto de reglas actualmente activo, utilice los comandos sudo iptables -S​ y ​ ​sudo iptables -L.

Además, tenemos una ​guía detallada sobre cómo listar y eliminar reglas del cortafuegos iptables​, que le ayudará aún más a aprovechar al máximo su cortafuegos iptables.

Ahora que hemos dejado de lado los requisitos previos, profundicemos en algunos de ​los comandos comunes de iptables​:

Cómo guardar sus reglas

Comenzaremos determinando cómo puede guardar sus reglas. Es importante tener en cuenta que las reglas de iptables son efímeras. Esto significa que se perderán después de reiniciar el sistema, a menos que las guarde. A continuación, se explica cómo puede guardar manualmente sus nuevas reglas en el servidor ​Ubuntu​ y ​CentOS​ respectivamente:

  • Ubuntu

La forma más sencilla de guardar sus nuevas reglas en un servidor Ubuntu es utilizar el paquete iptables-persistent​ . Puede fácilmente ​crear un servidor Ubuntu siguiendo este tutorial​.

Ahora, el primer paso para guardar sus nuevas reglas de iptables es instalar el paquete iptables-persistent ​utilizando apt-get. Así es como puede obtenerlo:

Iptables Firewall 1

Durante el proceso de instalación, debe decidir si desea guardar las reglas del cortafuegos actualmente activas. Para actualizar las reglas en su lugar y guardar los cambios, utilice este comando:

Iptables Firewall 2

El comando anterior normalmente funciona para versiones de Ubuntu posteriores a la 16.04. Si está utilizando una versión anterior, use este comando en su lugar:

  • CentOS

Puede configurar su cortafuegos con iptables en CentOS 6 o versiones anteriores. CentOS 7 utiliza FirewallD en su lugar. Siga este tutorial para aprender cómo configurar FirewallD en CentOS 7.

Puede guardar sus nuevas reglas en CentOS utilizando el script de inicio de ​iptables . Consulte el siguiente comando:

Este comando guardará sus nuevas reglas para el cortafuegos iptables. Las reglas de iptables actualmente activas se pueden encontrar en el /etc/sysconfig/iptables​ archivo.

Comandos útiles de iptables

Ahora, pasemos a algunos comandos muy útiles del cortafuegos iptables que puede necesitar utilizar en su servidor.

  • Conexiones loopback

Primero, exploraremos cómo puede permitir conexiones loopback. Su sistema utiliza una interfaz loopback para enviarse conexiones a sí mismo. Por ejemplo, imagine que ejecutó este comando: ​ping localhost​ o ​ping 127.0.0.1​. Su servidor utilizará una interfaz de loopback, o una lo​, para esencialmente hacer ping a sí mismo. Otras veces, el servidor puede usarla si su servidor de aplicaciones está configurado para conectarse a la dirección 'localhost'.

Independientemente de cuál sea la situación, debe asegurarse de que su cortafuegos iptables no bloquee estas conexiones. Por lo tanto, tendrá que permitir las conexiones de loopback para que estas funciones puedan llevarse a cabo.

Aquí están los comandos que ejecutará para permitir todo el tráfico que entra en la interfaz de loopback:

Iptables Firewall 3

  • Conexiones entrantes establecidas y relacionadas

Otro tipo de conexión que puede necesitar permitir es la conexión saliente. Para asegurarse de que su servidor esté recibiendo y enviando tanto tráfico entrante como saliente respectivamente, debe permitir las conexiones entrantes establecidas y relacionadas. Esto permite que el servidor envíe tráfico de retorno a las conexiones salientes. Use este comando para permitir conexiones entrantes tanto establecidas como relacionadas:

Established and Related Incoming Connections

  • Conexiones salientes establecidas

El servidor normalmente enviará respuestas a las conexiones entrantes en forma de tráfico saliente de conexiones establecidas. Para permitir esto, use el siguiente comando:

Established Outgoing Connections

  • De interno a externo

A veces, es posible que incluso necesite configurar su cortafuegos para dar acceso de lo interno a lo externo. Por defecto, su red externa debería ser ​eth0​ y ​eth1 debería ser su red interna. Si este es el caso, use este comando para habilitar el acceso:

Internal to External

  • Descartar paquetes no válidos

A veces, algunos de los paquetes de tráfico de red se etiquetarán como no válidos. La mayoría de las veces, simplemente puede descartar estos paquetes no válidos. Para hacerlo, use el siguiente comando:

Dropping Invalid Packets

Reglas para bloquear direcciones IP

A continuación, veremos algunos comandos que puede utilizar para bloquear conexiones procedentes de ciertas direcciones IP. Para facilitar las cosas, utilizaremos la dirección IP ​15.15.15.51 como ejemplo en nuestros comandos. Puede sustituir este valor por su dirección IP específica.

En ​-s 15.15.15.51, ​​el ​-s​ significa origen (source). Por lo tanto, el comando está especificando la dirección IP de origen '15.15.15.51'. De manera similar, puede especificar la dirección IP de origen en cualquier regla de cortafuegos. Esto incluye la regla de permitir y la de rechazar.

Si desea rechazar la conexión, utilizará REJECT en lugar de DROP en el comando de esta manera:

Como resultado, su servidor dará un error de 'conexión rechazada' (connection refused) cada vez que esa dirección IP en particular envíe una solicitud de conexión.

  • Bloquear conexiones a una interfaz específica

Es posible que bloquee todas las solicitudes de conexión que provengan de una dirección IP en particular a una interfaz de red en particular. En nuestro ejemplo, la dirección IP es 15.15.15.51​ y la interfaz de red es ​eth0​. Use este comando para bloquear las conexiones:

Lo fantástico es que puede especificar la interfaz de red en cualquier regla. Esto significa que cualquier regla se puede aplicar y limitar únicamente a una red específica.

Reglas para el servicio: SSH

SSH ​se vuelve relevante si está utilizando un servidor en la nube. En este caso, debe permitir las conexiones SSH entrantes en el puerto 22. Habilitar estas conexiones le permite conectarse a su servidor y administrarlo. Aquí, discutiremos una serie de reglas comunes relacionadas con SSH.

  • Permitir todas las conexiones SSH entrantes

Los siguientes comandos habilitan todas las conexiones SSH entrantes:

En el conjunto anterior, solo necesita usar el segundo comando si la política ​OUTPUT​ no está configurada como ​ACCEPT​. Permite el tráfico saliente de las conexiones SSH establecidas.

  • Permitir SSH entrante desde una subred

El comando anterior permite todas las conexiones entrantes. Puede usar los siguientes comandos para permitir únicamente conexiones entrantes desde una dirección IP o subred específica. Supongamos que solo desea permitir conexiones entrantes de la subred ​15.15.15.0/24​ :

Al igual que antes, solo necesita usar el segundo comando si la política ​OUTPUT​ no está configurada como ​ACCEPT​. Permite el tráfico saliente de las conexiones SSH establecidas.

  • Permitir SSH saliente

Use estos comandos si la política ​OUTPUT​ del firewall no está configurada como ​ACCEPT​ y desea habilitar las conexiones SSH. Esto permitirá que su servidor inicie conexiones SSH con otros servidores:

Para utilizar más a fondo SSH en sus servidores en la nube, eche un vistazo a nuestros tutoriales sobre ​ cómo usar SSH para conectarse a un servidor remoto en Ubuntu ​y cómo configurar su servidor Linux para usar la autenticación basada en claves SSH​.

  • Permitir Rsync entrante desde una subred

Rsync​ es una función que puede usar para transferir archivos de un sistema a otro. Se ejecuta en el puerto 873. Por lo tanto, si desea permitir conexiones Rsync entrantes en el puerto 873 desde una dirección IP o subred específica, use los siguientes comandos:

Como puede ver, especificamos la dirección IP de origen junto con el puerto de destino. Utilizará el segundo comando solo si la política ​OUTPUT​ del firewall no está configurada como ​ACCEPT​. Permite el tráfico saliente de las conexiones Rsync establecidas. Además, puede echar un vistazo a nuestro ​tutorial sobre cómo utilizar Rsync para sincronizar directorios locales y remotos en un VPS​.

Reglas para el servicio: Servidor web

Las conexiones HTTP se reciben normalmente en el puerto 80. De manera similar, HTTPS suele llegar por el puerto 443. Los servidores web como ​Apache​ y ​Nginx​ escuchan en estos puertos para captar solicitudes de conexión. A veces, la configuración predeterminada puede hacer que su servidor deniegue o descarte estas solicitudes entrantes. Es por eso que necesitará establecer nuevas reglas para permitir el tráfico.

  • Permitir todas las conexiones HTTP entrantes

Puede permitir todas las conexiones HTTP entrantes en el puerto 80 con estos comandos:

Utilizará el segundo comando solo si la política ​OUTPUT​ del firewall no está configurada como ACCEPT​. Permite el tráfico saliente de las conexiones HTTP establecidas.

  • Permitir todas las conexiones HTTPS entrantes

Use estos comandos para permitir todas las solicitudes de conexión HTTPS entrantes en el puerto 443:

Usará el segundo comando solo si la política del cortafuegos iptables ​OUTPUT​ no está configurada como ACCEPT​. Permite el tráfico saliente de conexiones HTTP establecidas.

  • Permitir todas las conexiones entrantes de HTTP y HTTPS

Puede usar el módulo multiport si desea permitir el tráfico de los puertos HTTP y HTTPS. Use estos comandos si este es el caso:

Usará el segundo comando solo si la política del cortafuegos ​OUTPUT​ no está configurada como ACCEPT​. Permite el tráfico saliente de conexiones HTTP y HTTPS establecidas.

Reglas para el servicio: MySQL

A veces, un cliente puede usar un servidor remoto para acceder a su servidor de base de datos ​MySQL​. En ese caso, debe permitir manualmente el tráfico entrante desde el puerto correspondiente. MySQL escucha las solicitudes de conexión desde el puerto 3306.

  • Permitir conexiones MySQL entrantes desde una subred

Tendrá que especificar el origen si desea permitir conexiones MySQL desde una subred en particular. En nuestro ejemplo, permitiremos el tráfico entrante desde la 15.15.15.0/24​ subred usando estos comandos:

Usará el segundo comando solo si la política del cortafuegos ​OUTPUT​ no está configurada como ACCEPT​. Permite el tráfico saliente de conexiones MySQL establecidas.

  • Habilitar conexiones MySQL a una interfaz

Si también desea especificar qué interfaz de red debe recibir las conexiones MySQL, puede usar estos comandos:

En este caso, estamos permitiendo las conexiones a una interfaz de red privada llamada eth1​.

Usará el segundo comando solo si la política del cortafuegos ​OUTPUT​ no está configurada como ACCEPT​. Permite el tráfico saliente de conexiones MySQL establecidas.

Puede seguir nuestro ​tutorial para una configuración sencilla de MySQL en su servidor​.

Reglas para el servicio: PostgreSQL

Su cliente puede usar un servidor remoto para acceder a su servidor de base de datos ​PostgreSQL​. En ese caso, debe permitir estas conexiones entrantes. Estas conexiones vendrán a través del puerto 5432.

  • Permitir conexiones PostgreSQL entrantes desde una subred

Puede usar los siguientes comandos para permitir conexiones PostgreSQL entrantes desde una subred o dirección IP particular. Como puede ver, especificamos el origen que es la ​15.15.15.0/24​ subred.

Usará el segundo comando solo si la política del cortafuegos ​OUTPUT​ no está configurada como ACCEPT​. Permite el tráfico saliente de las conexiones PostgreSQL establecidas.

  • Habilitar conexiones PostgreSQL a una interfaz específica

Si desea permitir únicamente conexiones PostgreSQL a una interfaz de red particular, use estos comandos:

En este caso, estamos permitiendo las conexiones a una interfaz de red privada llamada eth1​. Utilizará el segundo comando solo si la política del cortafuegos ​OUTPUT​ no está establecida en ​ACCEPT​. Permite el tráfico saliente de las conexiones PostgreSQL establecidas.

Siga este ​tutorial para instalar PostgreSQL en su servidor Ubuntu​.

Reglas para el servicio: Correo

Es posible que también deba configurar su cortafuegos de acuerdo con el servidor de correo que esté utilizando. Por ejemplo, ​Sendmail​ y ​Postfix​ pueden recibir conexiones en varios puertos diferentes. Depende del protocolo que utilice para la entrega de correo. Para bloquear y permitir ciertas conexiones de correo, necesita saber qué protocolo está utilizando.

  • Permitir conexiones SMTP entrantes

Las conexiones SMTP normalmente entran por el puerto 25. Aunque SMTP también suele utilizar el puerto 587 para el correo saliente. Para permitir que su servidor responda a estas conexiones, use los siguientes comandos:

Utilizará el segundo comando solo si la política del cortafuegos ​OUTPUT​ no está establecida en ACCEPT​. Permite el tráfico saliente de las conexiones SMTP establecidas.

  • Permitir todas las conexiones IMAP entrantes

Para permitir que su servidor responda a todas las conexiones IMAP entrantes en el puerto 143, simplemente escriba y ejecute esto:​

Utilizará el segundo comando solo si la política del cortafuegos ​OUTPUT​ no está establecida en ACCEPT​. Permite el tráfico saliente de las conexiones IMAP establecidas.

  • Permitir todas las conexiones IMAPS entrantes

Use estos comandos para permitir que su servidor responda a las conexiones IMAPS en el puerto 993:

Utilizará el segundo comando solo si la política del cortafuegos ​OUTPUT​ no está establecida en ACCEPT​. Permite el tráfico saliente de las conexiones IMAPS establecidas.

  • Permitir todas las conexiones POP3 entrantes

Estas conexiones entrarán por el puerto 993. Si desea que su servidor responda a las solicitudes de conexión IMAPS, use los siguientes comandos:

Utilizará el segundo comando solo si la política del cortafuegos ​OUTPUT​ no está establecida en ACCEPT​. Permite el tráfico saliente de las conexiones POP3 establecidas.

  • Permitir todas las conexiones POP3S entrantes

Use estos comandos para permitir que su servidor establezca conexiones con solicitudes POP3S entrantes en el puerto 995:

Utilizará el segundo comando solo si la política del cortafuegos ​OUTPUT no está establecida en ACCEPT​. Permite el tráfico saliente de las conexiones POP3S establecidas.

  • Cómo bloquear el correo SMTP saliente

En lugar de permitir conexiones entrantes y habilitar la respuesta del servidor, es posible que desee bloquear el correo saliente por completo. Puede bloquear todo el correo SMTP saliente en el puerto 25 usando este comando:

Como resultado, todo el tráfico saliente en el puerto 25 será rechazado por el cortafuegos iptables. Puede utilizar la misma estructura de comandos si desea rechazar cualquier otro servicio. Todo lo que necesita hacer es reemplazar el puerto 25 con el número de puerto correspondiente.

Conclusión

Esta guía cubre los comandos esenciales del cortafuegos iptables. Le proporciona las herramientas esenciales que necesita para configurar su cortafuegos iptables de manera efectiva. Tenga en cuenta que no existe una solución única para todos. Estos comandos son extremadamente flexibles. Esto significa que puede usarlos de la manera que mejor se adapte a usted y a sus necesidades.

¡Feliz computación!

author

Manpreet Singh

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.