Búsqueda de sitios web

25 reglas útiles de firewall de IPtable que todo administrador de Linux debería conocer


La gestión del tráfico de red es uno de los trabajos más difíciles con los que tiene que lidiar un administrador de sistemas. Debe configurar el firewall de tal manera que cumpla con los requisitos del sistema y de los usuarios para las conexiones entrantes y salientes, sin dejar el sistema vulnerable a ataques.

Aquí es donde iptables resulta útil. Iptables es un firewall de línea de comandos de Linux que permite a los administradores de sistemas gestionar el tráfico entrante y saliente a través de un conjunto de reglas de tabla configurables.

Iptables utiliza un conjunto de tablas que tienen cadenas que contienen un conjunto de reglas integradas o definidas por el usuario. Gracias a ellos, un administrador del sistema puede filtrar adecuadamente el tráfico de red de su sistema.

Según el manual de iptables, actualmente existen 3 tipos de tablas:

    1. FILTER : esta es la tabla predeterminada, que contiene las cadenas integradas para:

      1. INPUT  : paquetes destinados a sockets locales
      2. FORWARD – paquetes enrutados a través del sistema
      3. SALIDA: paquetes generados localmente
    2. NAT – una tabla que se consulta cuando un paquete intenta crear una nueva conexión. Tiene incorporado lo siguiente:

      1. PREROUTING: se utiliza para modificar un paquete tan pronto como se recibe
      2. SALIDA: se utiliza para alterar paquetes generados localmente
      3. POSTROUTING: se utiliza para modificar paquetes cuando están a punto de salir
    3. MANGLE: esta tabla se utiliza para alterar paquetes. Hasta la versión del kernel 2.4 esta tabla tenía sólo dos cadenas, pero ahora son 5:

      1. PREROUTING – para alterar las conexiones entrantes
      2. SALIDA: para alterar paquetes generados localmente
      3. ENTRADA – para paquetes entrantes
      4. POSTROUTING: para modificar paquetes cuando están a punto de salir
      5. FORWARD – para paquetes enrutados a través de la caja

En este artículo, verá algunos comandos útiles que le ayudarán a administrar el firewall de su equipo Linux a través de iptables. A los efectos de este artículo, comenzaré con comandos más simples y llegaré a los más complejos hasta el final.

1. Iniciar/Detener/Reiniciar el Firewall de Iptables

Primero, debes saber cómo administrar el servicio iptables en diferentes distribuciones de Linux. Esto es bastante fácil:

En distribuciones de Linux basadas en SystemD

------------ On Cent/RHEL 7 and Fedora 22+ ------------
systemctl start iptables
systemctl stop iptables
systemctl restart iptables

En distribuciones de Linux basadas en SysVinit

------------ On Cent/RHEL 6/5 and Fedora ------------
/etc/init.d/iptables start 
/etc/init.d/iptables stop
/etc/init.d/iptables restart

2. Verifique todas las reglas del firewall de IPtables

Si desea verificar sus reglas existentes, use el siguiente comando:

iptables -L -n -v

Esto debería devolver un resultado similar al siguiente:

Chain INPUT (policy ACCEPT 1129K packets, 415M bytes)
 pkts bytes target prot opt in out source destination 
 0 0 ACCEPT tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
 0 0 ACCEPT udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
 0 0 ACCEPT tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67
 0 0 ACCEPT udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target prot opt in out source destination 
 0 0 ACCEPT all -- * lxcbr0 0.0.0.0/0 0.0.0.0/0 
 0 0 ACCEPT all -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 354K packets, 185M bytes)
 pkts bytes target prot opt in out source destination

Si prefiere verificar las reglas de una tabla específica, puede usar la opción -t seguida de la tabla que desea verificar. Por ejemplo, para comprobar las reglas en la tabla NAT, puede utilizar:

iptables -t nat -L -v -n

3. Bloquear una dirección IP específica en el firewall de IPtables

Si encuentra una actividad inusual o abusiva en una dirección IP, puede bloquear esa dirección IP con la siguiente regla:

iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP

Donde necesita cambiar "xxx.xxx.xxx.xxx" con la dirección IP real. Tenga mucho cuidado al ejecutar este comando, ya que puede bloquear accidentalmente su propia dirección IP. La opción -A agrega la regla al final de la cadena seleccionada.

En caso de que solo quieras bloquear el tráfico TCP desde esa dirección IP, puedes usar la opción -p que especifica el protocolo. De esa forma el comando quedará así:

iptables -A INPUT -p tcp -s xxx.xxx.xxx.xxx -j DROP

4. Desbloquear la dirección IP en el Firewall de IPtables

Si ha decidido que ya no desea bloquear solicitudes de una dirección IP específica, puede eliminar la regla de bloqueo con el siguiente comando:

iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP

La opción -D elimina una o más reglas de la cadena seleccionada. Si prefiere utilizar la opción más larga, puede utilizar --delete.

5. Bloquear un puerto específico en el firewall de IPtables

A veces es posible que desees bloquear conexiones entrantes o salientes en un puerto específico. Es una buena medida de seguridad y realmente deberías pensar en ello al configurar tu firewall.

Para bloquear conexiones salientes en un puerto específico, utilice:

iptables -A OUTPUT -p tcp --dport xxx -j DROP

Para permitir conexiones entrantes utilice:

iptables -A INPUT -p tcp --dport xxx -j ACCEPT

En ambos ejemplos, cambie "xxx" por el puerto real que desea permitir. Si desea bloquear el tráfico UDP en lugar de TCP, simplemente cambie "tcp" por "udp" en el regla de iptables anterior.

6. Permitir múltiples puertos en IPtables usando Multiport

Puedes permitir múltiples puertos a la vez, usando multipuerto, a continuación puedes encontrar dicha regla para conexiones entrantes y salientes:

iptables -A INPUT  -p tcp -m multiport --dports 22,80,443 -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --sports 22,80,443 -j ACCEPT

7. Permitir un rango de red específico en un puerto particular en IPtables

Es posible que desee limitar ciertas conexiones en un puerto específico a una red determinada. Supongamos que desea permitir conexiones salientes en el puerto 22 a la red 192.168.100.0/24.

Puedes hacerlo con este comando:

iptables -A OUTPUT -p tcp -d 192.168.100.0/24 --dport 22 -j ACCEPT

8. Bloquear Facebook en el Firewall de IPtables

A algunos empleadores les gusta bloquear el acceso a Facebook a sus empleados. A continuación se muestra un ejemplo de cómo bloquear el tráfico a Facebook.

Nota: Si eres administrador de sistemas y necesitas aplicar estas reglas, ten en cuenta que tus compañeros pueden dejar de hablar contigo :)

Primero busque las direcciones IP utilizadas por Facebook:

host facebook.com 
facebook.com has address 66.220.156.68
whois 66.220.156.68 | grep CIDR
CIDR: 66.220.144.0/20

Luego puedes bloquear esa red de Facebook con:

iptables -A OUTPUT -p tcp -d 66.220.144.0/20 -j DROP

Tenga en cuenta que el rango de direcciones IP utilizado por Facebook puede variar en su país.

9. Configurar el reenvío de puertos en IPtables

A veces es posible que desees reenviar el tráfico de un servicio a otro puerto. Puedes lograr esto con el siguiente comando:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525

El comando anterior reenvía todo el tráfico entrante en la interfaz de red eth0, desde el puerto 25 al puerto 2525. Puedes cambiar los puertos por los que necesites.

10. Bloquear la inundación de la red en el puerto Apache con IPtables

A veces, las direcciones IP pueden solicitar demasiadas conexiones hacia los puertos web de su sitio web. Esto puede causar varios problemas y, para evitarlos, puede utilizar la siguiente regla:

iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT

El comando anterior limita las conexiones entrantes por minuto a 100 y establece un límite de ráfaga a 200. Puede editar el límite y el límite máximo según sus propios requisitos específicos.

11. Bloquear solicitudes de ping entrantes en IPtables

A algunos administradores de sistemas les gusta bloquear las solicitudes de ping entrantes por motivos de seguridad. Si bien la amenaza no es tan grande, es bueno saber cómo bloquear dicha solicitud:

iptables -A INPUT -p icmp -i eth0 -j DROP

12. Permitir acceso de bucle invertido

El acceso loopback (acceso desde 127.0.0.1) es importante y siempre debes dejarlo activo:

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

13. Mantenga un registro de los paquetes de red descartados en IPtables

Si desea registrar los paquetes descartados en la interfaz de red eth0, puede utilizar el siguiente comando:

iptables -A INPUT -i eth0 -j LOG --log-prefix "IPtables dropped packets:"

Puede cambiar el valor después de "--log-prefix" con algo de su elección. Los mensajes se registran en /var/log/messages y puedes buscarlos con:

grep "IPtables dropped packets:" /var/log/messages

14. Bloquear el acceso a una dirección MAC específica en IPtables

Puede bloquear el acceso a su sistema desde una dirección MAC específica utilizando:

iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j DROP

Por supuesto, necesitarás cambiar "00:00:00:00:00:00" con la dirección MAC real que deseas bloquear.

15. Limite la cantidad de conexiones simultáneas por dirección IP

Si no desea establecer demasiadas conexiones simultáneas desde una única dirección IP en un puerto determinado, puede utilizar el siguiente comando:

iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT

El comando anterior no permite más de 3 conexiones por cliente. Por supuesto, puede cambiar el número de puerto para que coincida con un servicio diferente. Además, el --connlimit-above debe cambiarse para que coincida con sus requisitos.

16. Buscar dentro de la regla IPtables

Una vez que haya definido sus reglas de iptables, querrá buscar de vez en cuando y es posible que deba modificarlas. Una manera fácil de buscar dentro de sus reglas es usar:

iptables -L $table -v -n | grep $string

En el ejemplo anterior, necesitará cambiar $table por la tabla real dentro de la cual desea buscar y $string por la cadena real que está buscando.

Aquí hay un ejemplo:

iptables -L INPUT -v -n | grep 192.168.0.100

17. Definir una nueva cadena de IPTables

Con iptables, puedes definir tu propia cadena y almacenar reglas personalizadas en ella. Para definir una cadena, utilice:

iptables -N custom-filter

Ahora puedes comprobar si tu nuevo filtro está ahí:

iptables -L
Salida de muestra
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain custom-filter (0 references)
target prot opt source destination

18. Vaciar cadenas o reglas del firewall de IPtables

Si desea limpiar las cadenas de su firewall, puede usar:

iptables -F

Puedes lavar cadenas de una tabla específica con:

iptables -t nat -F

Puede cambiar "nat" con la tabla real qué cadenas desea vaciar.

19. Guarde las reglas de IPtables en un archivo

Si desea guardar las reglas de su firewall, puede usar el comando iptables-save. Puede utilizar lo siguiente para guardar y almacenar sus reglas en un archivo:

iptables-save > ~/iptables.rules

Depende de usted dónde almacenará el archivo y cómo le asignará el nombre.

20. Restaurar reglas de IPtables desde un archivo

Si desea restaurar una lista de reglas de iptables, puede usar iptables-restore. El comando se ve así:

iptables-restore < ~/iptables.rules

Por supuesto, la ruta a su archivo de reglas puede ser diferente.

21. Configure las reglas de IPtables para el cumplimiento de PCI

Es posible que algunos administradores de sistemas deban configurar sus servidores para que sean compatibles con PCI. Existen muchos requisitos de diferentes proveedores de cumplimiento de PCI, pero hay pocos comunes.

En muchos de los casos, necesitarás tener más de una dirección IP. Deberá aplicar las reglas siguientes para la dirección IP del sitio. Tenga mucho cuidado al utilizar las reglas siguientes y úselas sólo si está seguro de lo que está haciendo:

iptables -I INPUT -d SITE -p tcp -m multiport --dports 21,25,110,143,465,587,993,995 -j DROP

Si usa cPanel o un panel de control similar, es posible que también deba bloquear sus puertos. Aquí hay un ejemplo:

iptables -I in_sg -d DEDI_IP -p tcp -m multiport --dports  2082,2083,2095,2096,2525,2086,2087 -j DROP

Nota: Para asegurarse de cumplir con los requisitos de su proveedor de PCI, consulte su informe detenidamente y aplique las reglas requeridas. En algunos casos, es posible que también necesites bloquear el tráfico UDP en determinados puertos.

22. Permitir conexiones establecidas y relacionadas

Como el tráfico de red está separado entre entrante y saliente, querrá permitir el tráfico entrante establecido y relacionado. Para conexiones entrantes hazlo con:

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

Para uso saliente:

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

23. Eliminar paquetes no válidos en IPtables

Es posible que algunos paquetes de red se marquen como no válidos. Algunas personas pueden preferir registrar esos paquetes, pero otras prefieren descartarlos. Para descartar paquetes no válidos, puede utilizar:

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

24. Bloquear la conexión en la interfaz de red

Algunos sistemas pueden tener más de una interfaz de red. Puede limitar el acceso a esa interfaz de red o bloquear conexiones desde determinadas direcciones IP.

Por ejemplo:

iptables -A INPUT -i eth0 -s xxx.xxx.xxx.xxx -j DROP

Cambie “xxx.xxx.xxx.xxx ” por la dirección IP (o red) real que desea bloquear.

25. Deshabilite los correos salientes a través de IPTables

Si su sistema no envía ningún correo electrónico, puede bloquear los puertos salientes en los puertos SMTP. Por ejemplo puedes usar esto:

iptables -A OUTPUT -p tcp --dports 25,465,587 -j REJECT

Conclusión

Iptables es un potente cortafuegos del que puedes beneficiarte fácilmente. Es vital que todo administrador de sistemas aprenda al menos los conceptos básicos de iptables. Si desea encontrar información más detallada sobre iptables y sus opciones, le recomendamos leer su manual:

man iptables

Si cree que deberíamos agregar más comandos a esta lista, compártalos con nosotros enviándolos en la sección de comentarios a continuación.