Una guía para principiantes de iptables, el cortafuegos de Linux

Una guía para principiantes de iptables, el cortafuegos de Linux

Iptables es una utilidad de firewall extremadamente flexible diseñada para sistemas operativos Linux. Ya sea que sea un novato en Linux o un administrador de sistemas, iptables probablemente pueda serle de gran utilidad. Siga leyendo mientras le mostramos cómo configurar el firewall de Linux más versátil.

Foto por ezioman.

Sobre iptables

iptables es una utilidad de firewall de línea de comandos que utiliza cadenas de políticas para permitir o bloquear el tráfico. Cuando una conexión intenta establecerse en su sistema, iptables busca una regla en su lista que coincida con ella. Si no encuentra uno, utiliza la acción predeterminada.

iptables casi siempre está preinstalado en cualquier distribución de Linux. Para actualizarlo / instalarlo, simplemente tome el paquete iptables:

sudo apt-get install iptables

Hay alternativas GUI a iptables como Iniciador de fuego, pero iptables no es tan difícil una vez que tienes algunos comandos. Debe tener mucho cuidado al configurar las reglas de iptables, especialmente si está conectado SSH a un servidor, ya que un comando incorrecto puede bloquearlo permanentemente hasta que se arregle manualmente en la máquina física. Y no te olvides de bloquear su servidor SSH si abre el puerto.

Tipos de cadenas

iptables usa tres cadenas diferentes: entrada, reenvío y salida.

Tomar – Esta cadena se utiliza para controlar el comportamiento de las conexiones entrantes. Por ejemplo, si un usuario intenta iniciar sesión SSH en su PC / servidor, iptables intentará hacer coincidir la dirección IP y el puerto con una regla en la cadena de entrada.

Fresco – Esta cadena se utiliza para conexiones entrantes que en realidad no se entregan localmente. Piense en un enrutador: los datos siempre se envían a él, pero rara vez están destinados al enrutador en sí; los datos simplemente se transmiten a su objetivo. A menos que realice algún tipo de enrutamiento, NAT o lo que sea en su sistema que requiera reenvío, ni siquiera usará esa cadena.

Existe una forma infalible de comprobar si su sistema está utilizando o necesita la cadena antes.

iptables -L -v

La captura de pantalla anterior es de un servidor que se ha estado ejecutando durante algunas semanas y no tiene restricciones en las conexiones entrantes o salientes. Como puede ver, la cadena de entrada procesó 11 GB de paquetes y la cadena de salida procesó 17 GB, mientras que la cadena directa no necesitó procesar un solo paquete. Esto se debe a que el servidor no realiza ningún tipo de transferencia o se utiliza como dispositivo de paso.

Salir – Esta cadena se utiliza para conexiones salientes. Por ejemplo, si intenta hacer ping a howtogeek.com, iptables verificará su cadena de salida para ver cuáles son las reglas con respecto a ping y howtogeek.com antes de tomar la decisión de permitir o denegar el intento de conexión.

La advertencia

Aunque hacer ping desde un host externo parece algo que solo necesitaría atravesar la cadena de salida, tenga en cuenta que para reenviar los datos, también se utilizará la cadena de entrada. Cuando use iptables para bloquear su sistema, tenga en cuenta que muchos protocolos requerirán comunicación bidireccional, por lo que las cadenas de entrada y salida deberán configurarse correctamente. SSH es un protocolo común que las personas olvidan permitir en ambas cadenas.

Comportamiento de la cadena de políticas predeterminada

Antes de entrar y configurar reglas específicas, querrá decidir el comportamiento predeterminado de las tres cadenas. En otras palabras, ¿qué quiere que haga iptables si la conexión no coincide con ninguna regla existente?

Para ver qué están configuradas actualmente sus cadenas de políticas para hacer con tráfico inigualable, ejecute el comando iptables -L pedido.

Como puede ver, también usamos el comando grep para darnos una salida más limpia. En esta captura de pantalla, se supone que nuestros canales actualmente aceptan tráfico.

La mayoría de las veces, querrá que su sistema acepte conexiones de forma predeterminada. A menos que haya cambiado las reglas de la cadena de políticas anteriormente, esta configuración ya debería estar configurada. En cualquier caso, aquí está el comando para aceptar las conexiones predeterminadas:

iptables --policy INPUT ACCEPT
iptables --policy OUTPUT ACCEPT
iptables --policy FORWARD ACCEPT

Usando la regla de aceptación predeterminada, puede usar iptables para denegar direcciones IP o números de puerto específicos, mientras acepta todas las demás conexiones. Cubriremos estos comandos en un minuto.

Si prefiere denegar todas las conexiones y especificar manualmente cuáles desea permitir que se conecten, debe cambiar la política predeterminada para que se eliminen sus canales. Hacer esto probablemente solo sería útil para servidores con información confidencial a los que se conectan las mismas direcciones IP.

iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP

Respuestas específicas de conexión

Una vez configuradas sus políticas de cadena predeterminadas, puede comenzar a agregar reglas a iptables para que sepa qué hacer cuando encuentre una conexión desde o hacia una dirección IP o puerto en particular. En esta guía, repasaremos las tres “respuestas” más básicas y de uso común.

acepto – Autorizar la conexión.

Fecha de publicación – Corta la conexión, finge que nunca sucedió. Es mejor si no desea que la fuente se dé cuenta de que su sistema existe.

Rechazar – No permite la conexión, pero devuelve un error. Es mejor si no desea que una fuente en particular se conecte a su sistema, pero quiere que sepan que su firewall los ha bloqueado.

La mejor manera de mostrar la diferencia entre estas tres reglas es mostrar cómo se ve cuando una PC intenta hacer ping a una máquina Linux con iptables configuradas para cada una de estas configuraciones.

Permitir conexión:

Eliminar la conexión:

Rechazar conexión:

Permitir o bloquear conexiones específicas

Una vez que sus cadenas de políticas estén configuradas, ahora puede configurar iptables para permitir o bloquear direcciones, rangos de direcciones y puertos específicos. En estos ejemplos, configuraremos las conexiones a DROP, pero puedes cambiarlos a ACCEPT Dónde REJECT, dependiendo de sus necesidades y de cómo haya configurado sus cadenas de políticas.

Nota: En estos ejemplos usaremos iptables -A para agregar reglas a la cadena existente. iptables comienza en la parte superior de su lista y pasa por cada regla hasta encontrar una que coincida con ella. Si necesita insertar una regla encima de otra, puede usar iptables -I [chain] [number] para especificar el número debe aparecer en la lista.

Conexiones desde una única dirección IP

Este ejemplo muestra cómo bloquear todas las conexiones desde la dirección IP 10.10.10.10.

iptables -A INPUT -s 10.10.10.10 -j DROP

Conexiones desde una variedad de direcciones IP

Este ejemplo muestra cómo bloquear todas las direcciones IP en el rango de red 10.10.10.0/24. Puede utilizar una máscara de red o una notación de barra estándar para especificar el rango de direcciones IP.

iptables -A INPUT -s 10.10.10.0/24 -j DROP

Dónde

iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP

Conexiones a un puerto específico

Este ejemplo muestra cómo bloquear conexiones SSH de 10.10.10.10.

iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP

Puede reemplazar «ssh» con cualquier protocolo o número de puerto. los -p tcp parte del código le dice a iptables qué tipo de conexión usa el protocolo. Si estaba bloqueando un protocolo que usa UDP en lugar de TCP, entonces -p udp sería necesario en su lugar.

Este ejemplo muestra cómo bloquear conexiones SSH desde cualquier dirección IP.

iptables -A INPUT -p tcp --dport ssh -j DROP

Estados de conexión

Como mencionamos anteriormente, muchos protocolos requerirán comunicación bidireccional. Por ejemplo, si desea permitir conexiones SSH a su sistema, las cadenas de entrada y salida necesitarán que se les agregue una regla. Pero, ¿qué sucede si desea que solo se permita SSH que ingrese a su sistema? ¿Agregar una regla a la cadena de salida también permitirá los intentos de SSH salientes?

Aquí es donde entran los estados de conexión, lo que le brinda la capacidad que necesitaría para permitir la comunicación bidireccional pero solo permitir que se realicen conexiones unidireccionales. Eche un vistazo a este ejemplo, donde se permiten conexiones SSH DE 10.10.10.10, pero no las conexiones SSH TO 10.10.10.10. Sin embargo, el sistema puede reenviar información a través de SSH siempre que la sesión ya se haya establecido, lo que hace posible la comunicación SSH entre estos dos hosts.

iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state ESTABLISHED -j ACCEPT

Guardar cambios

Cualquier cambio que realice en sus reglas de iptables se eliminará la próxima vez que reinicie el servicio de iptables, a menos que ejecute un comando para guardar los cambios. Este comando puede diferir según su distribución:

Ubuntu:

sudo /sbin/iptables-save

Red Hat / CentOS:

/sbin/service iptables save

O

/etc/init.d/iptables save

Otros comandos

Enumere las reglas de iptables configuradas actualmente:

iptables -L

Además de -v La opción le dará información sobre paquetes y bytes, y agregará -n enumerará todo numéricamente. En otras palabras, los nombres de host, los protocolos y las redes se enumeran como números.

Para borrar todas las reglas configuradas actualmente, puede ejecutar el comando flush.

iptables -F

Deja un comentario

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

Experto Geek - Tu Guía en Tendencias Tecnológicas