Cómo usar las reglas y comandos de Iptables Firewall

1 mar 2021 9 min di lettura
Cómo usar las reglas y comandos de Iptables Firewall
Indice dei contenuti

Introducción

Iptables es el software de firewall que se incluye de forma predeterminada con la mayoría de las distribuciones de Linux. Esta guía proporciona una referencia rápida a los comandos de iptables que crearán reglas de firewall útiles en escenarios cotidianos comunes. Esto incluye ejemplos de iptables para permitir y bloquear varios servicios por puerto, interfaz de red y dirección IP de origen.

Tenga en cuenta que el orden de sus reglas es importante. Todos estos comandos de iptables -A para agregar la nueva regla al final de una cadena. Si desea colocarlo en otro lugar de la cadena, puede usar la -I que le permite especificar la posición de la nueva regla (o simplemente colocarla al principio de la cadena sin especificar un número de regla).

Nota:

Recuerde que puede verificar su conjunto de reglas iptables actual con el comando sudo iptables -S y sudo iptables -L.

Guarda las reglas

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

Ubuntu

En Ubuntu, la forma más fácil de guardar las reglas de iptables para que sobrevivan al reinicio es usar el paquete iptables-persistent Instálelo con apt-get así:

sudo apt-get update
sudo apt-get install iptables-persistent

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

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

sudo netfilter-persistent save

En las versiones de Ubuntu anteriores a la 16.04, ejecute este comando en su lugar:

sudo invoke-rc.d iptables-persistent save

CentOS 8 y versiones anteriores

En CentOS 6 y versiones anteriores (CentOS 7 y versiones posteriores usan FirewallD de forma predeterminada), puede usar el iptables para guardar las reglas de iptables:

sudo service iptables save

Esto guardará sus reglas actuales de iptables en el /etc/sysconfig/iptables.

Reglas generalmente útiles

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 reenviarse las conexiones de red a sí misma. Por ejemplo, si hace ping localhost o a ping 127.0.0.1, el servidor se hará ping a sí mismo utilizando loopback. La interfaz de bucle invertido también se utiliza si configura el servidor de aplicaciones para que se conecte a un servidor de base de datos con una localhost ". Por lo tanto, querrá asegurarse de que su firewall permita estas conexiones.

Para aceptar todo el tráfico en la interfaz de loopback, ejecute estos comandos:

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT

Permitir conexiones entrantes establecidas y relacionadas

Dado que el tráfico de red generalmente debe ser bidireccional (entrante y saliente) para funcionar correctamente, es típico crear una regla de firewall que permita el tráfico entrante establecido ( establecido) y relacionado (relacionado), de modo que el servidor permita que el tráfico regrese a las conexiones salientes iniciadas. por el servidor sí. Este comando permitirá:

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

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

De adentro hacia afuera

Suponiendo que eth0 es su red externa y eth1 es su red interna, esto permitirá que su interno acceda a la externa:

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

Eliminar (DROP) paquetes no válidos

Algunos paquetes de tráfico de red están marcados como no válidos (no válidos). A veces puede ser útil registrar este tipo de paquetes, pero a menudo está bien descartarlos. Hazlo con este comando:

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

Bloquear una dirección IP

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

sudo iptables -A INPUT -s 15.15.15.51 -j DROP

En este ejemplo, -s 15.15.15.51 Especifica un origen dirección IP del " 15.15.15.51 ". La dirección IP de origen se puede especificar en cualquier regla de firewall, incluida una regla de permitir (permitir).

Si quieres rechazar en su lugar (rechazar) la conexión, que responderá a la solicitud de conexión con un error de "conexión rechazada", reemplace "DROP" con "REJECT" así:

sudo iptables -A INPUT -s 15.15.15.51 -j REJECT

Bloquear conexiones a una interfaz de red

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

sudo iptables -A INPUT -i eth0 -s 15.15.15.51 -j DROP

Esto es lo mismo que en el ejemplo anterior, con la adición de -i eth0. La interfaz de red se puede especificar en cualquier regla de firewall y es una excelente manera de restringir la regla a una red en particular.

Servicio: SSH

Si está utilizando un servidor en la nube, probablemente desee permitir conexiones SSH entrantes (puerto 22) para poder conectarse y administrar su servidor. Esta sección explica cómo configurar el firewall con varias reglas relacionadas con SSH.

Permitir SSH entrante

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

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

El segundo comando, que permite el tráfico saliente de las conexiones SSH establecidas, solo es necesario si la OUTPUT no está configurada en ACCEPT.

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

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

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

El segundo comando, que permite el tráfico saliente de las conexiones SSH establecidas, solo es necesario si la OUTPUT no está configurada en ACCEPT.

Permitir SSH saliente

Si OUTPUT su firewall no está configurada en ACCEPT y desea permitir conexiones SSH salientes (el servidor inicia una conexión SSH a otro servidor), puede ejecutar estos comandos:

sudo iptables -A OUTPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
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 funciona 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 15.15.15.0/24 pueda resincronizarse con el servidor, ejecute estos comandos:

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

El segundo comando, que permite el tráfico saliente de las conexiones rsync establecidas, es necesario solo si la OUTPUT 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 de tráfico entrante predeterminada está configurada para descartar o denegar, le recomendamos que cree reglas que permitan que su servidor responda a tales solicitudes.

Permitir HTTP entrante

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

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

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

Permitir HTTPS entrante

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

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

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

Permitir HTTP y HTTPS entrantes

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

sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
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 de salida de conexiones establecidas HTTP y HTTPS, sólo es necesaria si la OUTPUT política no se establece en ACCEPT.

Servicio: MySQL

MySQL escucha las conexiones del cliente 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 entrantes de MySQL desde una dirección IP o subred específica, especifique la fuente. Por ejemplo, si desea permitir toda la 15.15.15.0/24, ejecute estos comandos:

sudo iptables -A INPUT -p tcp -s 15.15.15.0/24 --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
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 establecidas, solo es necesario si la OUTPUT no está configurada en ACCEPT.

Permitir MySQL a una interfaz de red específica

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

sudo iptables -A INPUT -i eth1 -p tcp --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
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 las conexiones MySQL establecidas, es necesario solo si la OUTPUT no está configurada en ACCEPT.

Servicio: PostgreSQL

PostgreSQL está escuchando conexiones de cliente 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 subred o dirección IP específica

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

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

El segundo comando, que permite el tráfico saliente de las conexiones PostgreSQL establecidas, es necesario solo si la OUTPUT no está configurada en ACCEPT.

Permitir que PostgreSQL acceda a una interfaz de red específica

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

sudo iptables -A INPUT -i eth1 -p tcp --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
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 las conexiones PostgreSQL establecidas, es necesario solo si la OUTPUT no está configurada en ACCEPT.

Servicio: correo

Los servidores de correo, como Sendmail y Postfix, escuchan en una variedad de puertos dependiendo de los protocolos utilizados para la entrega de correo. Si está ejecutando 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.

Bloquear correo SMTP saliente

Si se supone que su servidor no debe enviar correo saliente, es posible que desee bloquear ese tipo de tráfico. Para bloquear el correo SMTP saliente, que usa el puerto 25, ejecute este comando:

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 que no sea su número de puerto, en lugar del puerto 25, simplemente reemplácelo.

Permitir todos los SMTP entrantes

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

sudo iptables -A INPUT -p tcp --dport 25 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
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 establecidas, es necesario solo si la OUTPUT no está configurada en ACCEPT.

Nota: Es

Permitir todos los IMAP entrantes

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

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

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

Permitir todos los IMAP entrantes

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

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

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

Permitir todos los POP3 entrantes

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

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

El segundo comando, que permite el tráfico saliente de las conexiones POP3 establecidas, es necesario solo si la OUTPUT no está configurada en ACCEPT.

Permitir todos los POP3S entrantes

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

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

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

Conclusión

Este tutorial debe 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éntase libre de intentar emparejar los comandos con diferentes opciones para satisfacer sus necesidades específicas si no se tratan aquí.

Support us with a

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.