Conceptos básicos de Iptables: reglas y comandos comunes de firewall

Introducción

Índice
  1. Introducción
  • Reglas de ahorro
  • Reglas de listado y eliminación
  • Reglas de utilidad general
    1. Permitir conexiones de bucle invertido
    2. Permitir conexiones entrantes establecidas y relacionadas
    3. Permitir conexiones salientes establecidas
    4. Permitir que la red interna acceda a la red externa
    5. Descartar paquetes no válidos
  • Bloquear una dirección IP
    1. Bloqueo de conexiones a una interfaz de red
  • Servicio: SSH
    1. Permitir todas las conexiones SSH entrantes
    2. Permitir SSH entrante desde una dirección IP o subred específica
    3. Permitir SSH saliente
    4. Permitir Rsync entrante desde una dirección IP o subred específica
  • Servicio: Servidor Web
    1. Permitir todos los HTTP entrantes
    2. Permitir todos los HTTPS entrantes
    3. Permitir todos los HTTP y HTTPS entrantes
  • Servicio: MySQL
    1. Permitir MySQL desde una dirección IP o subred específica
    2. Permitir el acceso a MySQL a una interfaz de red específica
  • Servicio: PostgreSQL
    1. PostgreSQL desde una dirección IP o subred específica
    2. Permitir PostgreSQL en una interfaz de red específica
  • Servicio: Correo
    1. Bloqueo de correo SMTP saliente
    2. Permitir todos los SMTP entrantes
    3. Permitir todos los IMAP entrantes
    4. Permitir todos los IMAPS entrantes
    5. Permitir todos los POP3 entrantes
    6. Permitir todos los POP3 entrantes
  • Conclusión
  • Iptables es un firewall de software para distribuciones Linux. Esta guía, que parece una hoja de referencia, ofrece una referencia rápida de los comandos de iptables que crearán reglas de firewall útiles en situaciones cotidianas comunes. Incluye ejemplos de iptables para permitir y bloquear varios servicios por puerto, interfaz de red y dirección IP de origen.

    Cómo utilizar esta guía

    • La mayoría de las reglas que se describen aquí suponen que su iptables está configurado para ELIMINAR el tráfico entrante, a través de la política de entrada predeterminada, y desea permitir selectivamente el tráfico entrante.
    • Utilice las secciones siguientes que sean aplicables a lo que está intentando lograr. La mayoría de las secciones no se basan en ninguna otra, por lo que puede utilizar los ejemplos a continuación de forma independiente.
    • Utilice el menú Contenido en el lado derecho de esta página (en páginas amplias) o la función de búsqueda de su navegador para localizar las secciones que necesita.
    • Copie y pegue los ejemplos de línea de comandos dados, sustituyendo los valores resaltados con los suyos propios.

    Tenga en cuenta que el orden de las reglas es importante. Todos estos iptablescomandos utilizan la -Aopción de agregar la nueva regla al final de una cadena. Si desea colocarla en otro lugar de la cadena, puede utilizar la -Iopción que le permite especificar la posición de la nueva regla (o colocarla al principio de la cadena sin especificar un número de regla).

    Nota: Cuando trabaje con firewalls, tenga cuidado de no bloquear el acceso a su propio servidor bloqueando el tráfico SSH (puerto 22, por defecto). Si pierde el acceso debido a la configuración de su firewall, es posible que deba conectarse a él a través de una consola basada en web para solucionar el problema. Si utiliza DigitalOcean, puede leer la documentación del producto de la Consola de recuperación para obtener más información. Una vez que se haya conectado a través de la consola, puede cambiar las reglas de su firewall para permitir el acceso SSH (o permitir todo el tráfico). Si las reglas de firewall guardadas permiten el acceso SSH, otro método es reiniciar su servidor.

    Recuerde que puede comprobar su conjunto de reglas de iptables actual con sudo iptables -Sy sudo iptables -L.

    ¡Echemos un vistazo a los comandos de iptables!

    Reglas de ahorro

    Las reglas de iptables son efímeras, lo que significa que deben guardarse manualmente para que persistan después de un reinicio.

    En Ubuntu, una forma de guardar las reglas de iptables es usar el iptables-persistentpaquete. Instálelo con apt de la siguiente manera:

    1. sudo apt install iptables-persistent

    Durante la instalación, se le preguntará si desea guardar las reglas de firewall actuales.

    Si actualiza las reglas de su firewall y desea guardar los cambios, ejecute este comando:

    1. sudo netfilter-persistent save

    Es posible que otras distribuciones de Linux tengan formas alternativas de hacer que los cambios en iptables sean permanentes. Consulte la documentación correspondiente para obtener más información.

    Reglas de listado y eliminación

    Si desea aprender cómo enumerar y eliminar reglas de iptables, consulte este tutorial: Cómo enumerar y eliminar reglas de firewall de iptables .

    Reglas de utilidad general

    Esta sección incluye una variedad de comandos de iptables que crearán reglas que generalmente son útiles en la mayoría de los servidores.

    Permitir conexiones de bucle invertido

    La interfaz de bucle invertido , también conocida como lo, es lo que utiliza una computadora para reenviar conexiones de red hacia sí misma. Por ejemplo, si ejecuta ping localhosto ping 127.0.0.1, su servidor se hará ping a sí mismo utilizando el bucle invertido. La interfaz de bucle invertido también se utiliza si configura su servidor de aplicaciones para conectarse a un servidor de base de datos con una localhostdirección. Por lo tanto, querrá asegurarse de que su firewall permita estas conexiones.

    Para aceptar todo el tráfico en su interfaz de bucle invertido, ejecute estos comandos:

    1. sudo iptables -A INPUT -i lo -j ACCEPT
    2. sudo iptables -A OUTPUT -o lo -j ACCEPT

    Permitir conexiones entrantes establecidas y relacionadas

    Como el tráfico de red generalmente debe ser bidireccional (entrante y saliente) para funcionar correctamente, es habitual crear una regla de firewall que permita el tráfico entrante establecido y relacionado , de modo que el servidor permita el tráfico de retorno para las conexiones salientes iniciadas por el propio servidor. Este comando permitirá que:

    1. sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

    Permitir conexiones salientes establecidas

    Es posible que desee permitir el tráfico saliente de todas las conexiones establecidas , que suelen ser la respuesta a las conexiones entrantes legítimas. Este comando permitirá que:

    1. sudo iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

    Permitir que la red interna acceda a la red externa

    Suponiendo eth0que su red es externa y eth1es su red interna, esto permitirá que su red interna acceda a la externa:

    1. sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

    Descartar paquetes no válidos

    Algunos paquetes de tráfico de red se marcan como no válidos . A veces puede ser útil registrar este tipo de paquetes, pero a menudo no hay problema en descartarlos. Para ello, utilice este comando:

    1. sudo iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

    Bloquear una dirección IP

    Para bloquear conexiones de red que se originan desde una dirección IP específica, 203.0.113.51por ejemplo, ejecute este comando:

    1. sudo iptables -A INPUT -s 203.0.113.51 -j DROP

    En este ejemplo, -s 203.0.113.51se especifica una dirección IP de origen “203.0.113.51”. La dirección IP de origen se puede especificar en cualquier regla de firewall, incluida una regla de permiso .

    Si, en cambio, desea rechazar la conexión, lo que responderá a la solicitud de conexión con un error de “conexión rechazada”, reemplace “DROP” por “REJECT” de la siguiente manera:

    1. sudo iptables -A INPUT -s 203.0.113.51 -j REJECT

    Bloqueo de conexiones a una interfaz de red

    Para bloquear conexiones desde una dirección IP específica, por ejemplo 203.0.113.51, a una interfaz de red específica, por ejemplo eth0, utilice este comando:

    1. iptables -A INPUT -i eth0 -s 203.0.113.51 -j DROP

    Este es el mismo ejemplo anterior, con el agregado de -i eth0. La interfaz de red se puede especificar en cualquier regla de firewall y es una excelente manera de limitar la regla a una red en particular.

    Servicio: SSH

    Si utiliza un servidor sin una consola local, probablemente desee permitir conexiones SSH entrantes (puerto 22) para poder conectarse a su servidor y administrarlo. Esta sección explica cómo configurar su firewall con varias reglas relacionadas con SSH.

    Permitir todas las conexiones SSH entrantes

    Para permitir todas las conexiones SSH entrantes, ejecute estos comandos:

    1. sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
    2. sudo iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

    El segundo comando, que permite el tráfico saliente de conexiones SSH establecidasOUTPUT , solo es necesario si la política no está configurada en ACCEPT.

    Permitir SSH entrante desde una dirección IP o subred específica

    Para permitir conexiones SSH entrantes desde una dirección IP o subred específica, especifique la fuente. Por ejemplo, si desea permitir toda la 203.0.113.0/24subred, ejecute estos comandos:

    1. sudo iptables -A INPUT -p tcp -s 203.0.113.0/24 --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
    2. sudo iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

    El segundo comando, que permite el tráfico saliente de conexiones SSH establecidasOUTPUT , solo es necesario si la política no está configurada en ACCEPT.

    Permitir SSH saliente

    Si su OUTPUTpolítica de firewall no está configurada en ACCEPTy desea permitir conexiones SSH salientes (su servidor inicia una conexión SSH a otro servidor), puede ejecutar estos comandos:

    1. sudo iptables -A OUTPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
    2. sudo iptables -A INPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

    Permitir Rsync entrante desde una dirección IP o subred específica

    Rsync, que se ejecuta en el puerto 873, se puede utilizar para transferir archivos de una computadora a otra.

    Para permitir conexiones rsync entrantes desde una dirección IP o subred específica, especifique la dirección IP de origen y el puerto de destino. Por ejemplo, si desea permitir que toda la 203.0.113.0/24subred pueda realizar conexiones rsync con su servidor, ejecute estos comandos:

    1. sudo iptables -A INPUT -p tcp -s 203.0.113.0/24 --dport 873 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
    2. sudo iptables -A OUTPUT -p tcp --sport 873 -m conntrack --ctstate ESTABLISHED -j ACCEPT

    El segundo comando, que permite el tráfico saliente de conexiones rsync establecidasOUTPUT , solo es necesario si la política no está configurada en ACCEPT.

    Servicio: Servidor Web

    Los servidores web, como Apache y Nginx, suelen escuchar solicitudes en los puertos 80 y 443 para conexiones HTTP y HTTPS, respectivamente. Si su política predeterminada para el tráfico entrante está configurada para descartar o denegar, deberá crear reglas que permitan que su servidor responda a esas solicitudes.

    Permitir todos los HTTP entrantes

    Para permitir todas las conexiones HTTP entrantes (puerto 80), ejecute estos comandos:

    1. sudo iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
    2. sudo iptables -A OUTPUT -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT

    El segundo comando, que permite el tráfico saliente de conexiones HTTP establecidas , solo es necesario si la OUTPUTpolítica no está configurada en ACCEPT.

    Permitir todos los HTTPS entrantes

    Para permitir todas las conexiones entrantes HTTPS (puerto 443), ejecute estos comandos:

    1. sudo iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
    2. sudo iptables -A OUTPUT -p tcp --sport 443 -m conntrack --ctstate ESTABLISHED -j ACCEPT

    El segundo comando, que permite el tráfico saliente de conexiones HTTP establecidas , solo es necesario si la OUTPUTpolítica no está configurada en ACCEPT.

    Permitir todos los HTTP y HTTPS entrantes

    Si desea permitir el tráfico HTTP y HTTPS, puede utilizar el módulo multipuerto para crear una regla que permita ambos puertos. Para permitir todas las conexiones entrantes HTTP y HTTPS (puerto 443), ejecute estos comandos:

    1. sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
    2. sudo iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate ESTABLISHED -j ACCEPT

    El segundo comando, que permite el tráfico saliente de conexiones HTTP y HTTPS establecidasOUTPUT , solo es necesario si la política no está configurada en ACCEPT.

    Servicio: MySQL

    MySQL escucha conexiones de clientes en el puerto 3306. Si su servidor de base de datos MySQL está siendo utilizado por un cliente en un servidor remoto, debe asegurarse de permitir ese tráfico.

    Permitir MySQL desde una dirección IP o subred específica

    Para permitir conexiones MySQL entrantes desde una dirección IP o subred específica, especifique la fuente. Por ejemplo, si desea permitir toda la 203.0.113.0/24subred, ejecute estos comandos:

    1. sudo iptables -A INPUT -p tcp -s 203.0.113.0/24 --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
    2. sudo iptables -A OUTPUT -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT

    El segundo comando, que permite el tráfico saliente de conexiones MySQL establecidasOUTPUT , solo es necesario si la política no está configurada en ACCEPT.

    Permitir el acceso a MySQL a una interfaz de red específica

    Para permitir conexiones MySQL a una interfaz de red específica (por ejemplo, si tiene una interfaz de red privada eth1), utilice estos comandos:

    1. sudo iptables -A INPUT -i eth1 -p tcp --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
    2. sudo iptables -A OUTPUT -o eth1 -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT

    El segundo comando, que permite el tráfico saliente de conexiones MySQL establecidasOUTPUT , solo es necesario si la política no está configurada en ACCEPT.

    Servicio: PostgreSQL

    PostgreSQL escucha conexiones de clientes en el puerto 5432. Si su servidor de base de datos PostgreSQL está siendo utilizado por un cliente en un servidor remoto, debe asegurarse de permitir ese tráfico.

    PostgreSQL desde una dirección IP o subred específica

    Para permitir conexiones entrantes de PostgreSQL desde una dirección IP o subred específicas, especifique la fuente. Por ejemplo, si desea permitir toda la 203.0.113.0/24subred, ejecute estos comandos:

    1. sudo iptables -A INPUT -p tcp -s 203.0.113.0/24 --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
    2. sudo iptables -A OUTPUT -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT

    El segundo comando, que permite el tráfico saliente de conexiones PostgreSQL establecidasOUTPUT , solo es necesario si la política no está configurada en ACCEPT.

    Permitir PostgreSQL en una interfaz de red específica

    Para permitir conexiones PostgreSQL a una interfaz de red específica (por ejemplo, si tiene una interfaz de red privada eth1), utilice estos comandos:

    1. sudo iptables -A INPUT -i eth1 -p tcp --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
    2. sudo iptables -A OUTPUT -o eth1 -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT

    El segundo comando, que permite el tráfico saliente de conexiones PostgreSQL establecidasOUTPUT , solo es necesario si la política no está configurada en ACCEPT.

    Servicio: Correo

    Los servidores de correo, como Sendmail y Postfix, escuchan en distintos puertos según los protocolos que se utilicen para la entrega de correo. Si utiliza un servidor de correo, determine qué protocolos está utilizando y permita los tipos de tráfico adecuados. También le mostraremos cómo crear una regla para bloquear el correo SMTP saliente.

    Bloqueo de correo SMTP saliente

    Si su servidor no debería enviar correo saliente, es posible que desee bloquear ese tipo de tráfico. Para bloquear el correo SMTP saliente, que utiliza el puerto 25, ejecute este comando:

    1. sudo iptables -A OUTPUT -p tcp --dport 25 -j REJECT

    Esto configura iptables para rechazar todo el tráfico saliente en el puerto 25. Si necesita rechazar un servicio diferente por su número de puerto, en lugar del puerto 25, sustituya ese número de puerto por el 25anterior.

    Permitir todos los SMTP entrantes

    Para permitir que su servidor responda a las conexiones SMTP en el puerto 25, ejecute estos comandos:

    1. sudo iptables -A INPUT -p tcp --dport 25 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
    2. sudo iptables -A OUTPUT -p tcp --sport 25 -m conntrack --ctstate ESTABLISHED -j ACCEPT

    El segundo comando, que permite el tráfico saliente de conexiones SMTP establecidasOUTPUT , solo es necesario si la política no está configurada en ACCEPT.

    Permitir todos los IMAP entrantes

    Para permitir que su servidor responda a las conexiones IMAP, puerto 143, ejecute estos comandos:

    1. sudo iptables -A INPUT -p tcp --dport 143 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
    2. sudo iptables -A OUTPUT -p tcp --sport 143 -m conntrack --ctstate ESTABLISHED -j ACCEPT

    El segundo comando, que permite el tráfico saliente de conexiones IMAP establecidas , solo es necesario si la OUTPUTpolítica no está configurada en ACCEPT.

    Permitir todos los IMAPS entrantes

    Para permitir que su servidor responda a las conexiones IMAPS, puerto 993, ejecute estos comandos:

    1. sudo iptables -A INPUT -p tcp --dport 993 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
    2. sudo iptables -A OUTPUT -p tcp --sport 993 -m conntrack --ctstate ESTABLISHED -j ACCEPT

    El segundo comando, que permite el tráfico saliente de conexiones IMAPS establecidas , solo es necesario si la OUTPUTpolítica no está configurada en ACCEPT.

    Permitir todos los POP3 entrantes

    Para permitir que su servidor responda a las conexiones POP3, puerto 110, ejecute estos comandos:

    1. sudo iptables -A INPUT -p tcp --dport 110 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
    2. sudo iptables -A OUTPUT -p tcp --sport 110 -m conntrack --ctstate ESTABLISHED -j ACCEPT

    El segundo comando, que permite el tráfico saliente de conexiones POP3 establecidasOUTPUT , solo es necesario si la política no está configurada en ACCEPT.

    Permitir todos los POP3 entrantes

    Para permitir que su servidor responda a las conexiones POP3S, puerto 995, ejecute estos comandos:

    1. sudo iptables -A INPUT -p tcp --dport 995 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
    2. sudo iptables -A OUTPUT -p tcp --sport 995 -m conntrack --ctstate ESTABLISHED -j ACCEPT

    El segundo comando, que permite el tráfico saliente de conexiones POP3S establecidas , solo es necesario si la OUTPUTpolítica no está configurada en ACCEPT.

    Conclusión

    Esto debería cubrir muchos de los comandos que se usan comúnmente al configurar un firewall de iptables. Por supuesto, iptables es una herramienta muy flexible, así que siéntete libre de combinar los comandos con diferentes opciones para satisfacer tus necesidades específicas si no están cubiertas aquí.

    Si busca ayuda para determinar cómo debe configurarse su firewall, consulte este tutorial: Cómo elegir una política de firewall eficaz para proteger sus servidores .

    SUSCRÍBETE A NUESTRO BOLETÍN 
    No te pierdas de nuestro contenido ni de ninguna de nuestras guías para que puedas avanzar en los juegos que más te gustan.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Subir

    Este sitio web utiliza cookies para mejorar tu experiencia mientras navegas por él. Este sitio web utiliza cookies para mejorar tu experiencia de usuario. Al continuar navegando, aceptas su uso. Mas informacion