Todo sobre Apple, Android, Juegos Apks y Sitios de Peliculas

La guía para principiantes de iptables, el firewall de Linux

Iptables es una utilidad de firewall extremadamente flexible creada para sistemas operativos Linux. Ya sea que sea un novato en Linux o un administrador de sistemas, probablemente haya alguna manera en que iptables pueda serle de gran utilidad. Continúe leyendo mientras le mostramos cómo configurar el firewall de Linux más versátil.

Foto por ezioman.

Acerca de 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 con la que coincidir. Si no encuentra ninguno, recurre a la acción predeterminada.

iptables casi siempre viene preinstalado en cualquier distribución de Linux. Para actualizarlo/instalarlo, simplemente recupere 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 a SSH en un servidor, porque un comando incorrecto puede bloquearlo permanentemente hasta que se solucione manualmente en la máquina física. Y no olvide bloquear su servidor SSH si abre el puerto.

Tipos de cadenas

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

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

Adelante – Esta cadena se utiliza para conexiones entrantes que en realidad no se entregan localmente. Piense en un enrutador: siempre se le envían datos, pero rara vez se destinan al enrutador; los datos simplemente se reenvían a su destino. A menos que esté realizando algún tipo de enrutamiento, NATing o cualquier otra cosa en su sistema que requiera reenvío, ni siquiera utilizará esta cadena.

Hay una forma segura de comprobar si su sistema utiliza/necesita la cadena directa.

 iptables -L -v 

La captura de pantalla anterior es de un servidor que ha estado funcionando durante algunas semanas y no tiene restricciones en las conexiones entrantes o salientes. Como puede ver, la cadena de entrada ha procesado 11 GB de paquetes y la cadena de salida ha procesado 17 GB. La cadena directa, por otro lado, no ha necesitado procesar ni un solo paquete. Esto se debe a que el servidor no realiza ningún tipo de reenvío ni se utiliza como dispositivo de transferencia.

Producción – 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 al ping y howtogeek.com antes de tomar la decisión de permitir o denegar el intento de conexión.

La advertencia

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

Comportamiento predeterminado de la cadena de políticas

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

Para ver para qué están configuradas actualmente sus cadenas de políticas con tráfico inigualable, ejecute el

 iptables -L 

dominio.

Como puede ver, también usamos el comando grep para obtener un resultado más limpio. En esa captura de pantalla, se calcula que nuestras cadenas actualmente aceptan tráfico.

La mayoría de las veces querrás que tu 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. De cualquier manera, aquí está el comando para aceptar conexiones de forma predeterminada:

 iptables  
 iptables  
 iptables  

Al utilizar de forma predeterminada la regla de aceptación, puede usar iptables para denegar direcciones IP o números de puerto específicos, mientras continúa aceptando todas las demás conexiones. Llegaremos a esos comandos en un minuto.

Si prefiere negar todas las conexiones y especificar manualmente cuáles desea permitir que se conecten, debe cambiar la política predeterminada de sus cadenas para eliminarlas. Hacer esto probablemente solo sería útil para servidores que contienen información confidencial y solo tienen conectadas las mismas direcciones IP.

 iptables  
 iptables  
 iptables  

Respuestas específicas de conexión

Con sus políticas de cadena predeterminadas configuradas, 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 utilizadas comúnmente.

Aceptar – Permitir la conexión.

Gota – Corta la conexión, actúa como si nunca hubiera sucedido. Esto es mejor si no desea que la fuente se dé cuenta de que su sistema existe.

Rechazar – No permitir la conexión, pero devolver un error. Esto es mejor si no desea que una fuente en particular se conecte a su sistema, pero quiere que sepan que su firewall los bloqueó.

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 configurados para cada una de estas configuraciones.

Permitiendo la conexión:

Cerrar la conexión:

Rechazando la conexión:

Permitir o bloquear conexiones específicas

Con sus cadenas de políticas configuradas, ahora puede configurar iptables para permitir o bloquear direcciones, rangos de direcciones y puertos específicos. En estos ejemplos, configuraremos las conexiones para

 DROP 

pero puedes cambiarlos a

 ACCEPT 

o

 REJECT 

según sus necesidades y cómo configuró sus cadenas de políticas.

Note: En estos ejemplos, usaremos

 iptables -A 

para agregar reglas a la cadena existente. iptables comienza en la parte superior de su lista y revisa cada regla hasta encontrar una que coincida. Si necesita insertar una regla encima de otra, puede usar

 iptables -I [chain] [number] 

para especificar el número que debe estar 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 archivo 10.10.10.0/24 rango de red. Puede utilizar una máscara de red o una notación de barra diagonal estándar para especificar el rango de direcciones IP.

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

o

 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 desde 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. El

 -p tcp 

Parte del código le dice a iptables qué tipo de conexión utiliza 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  

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é pasa si solo desea que se permita la entrada SSH a su sistema? ¿Agregar una regla a la cadena de salida no permitirá también intentos SSH salientes?

Ahí es donde entran los estados de conexión, que le brindan la capacidad que necesitaría para permitir la comunicación bidireccional pero solo permiten que se establezcan conexiones unidireccionales. Mire este ejemplo, donde se permiten conexiones SSH DESDE 10.10.10.10, pero no conexiones SSH HACIA 10.10.10.10. Sin embargo, el sistema puede enviar 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 

Guardando cambios

Los cambios que realice en sus reglas de iptables se eliminarán la próxima vez que se reinicie el servicio de iptables, a menos que ejecute un comando para guardar los cambios. Este comando puede diferir dependiendo de 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 

Añadiendo el

 -v 

opción le dará información de 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 emitir el comando de descarga.

 iptables -F 

RELACIONADO: Las mejores computadoras portátiles con Linux para desarrolladores y entusiastas