25 reglas útiles de firewall de IPtable que todo administrador de Linux debe conocer


La gestión del tráfico de red es una de las tareas más difíciles con las que tienen que lidiar los administradores 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 los ataques.

Aquí es donde iptables resultan útiles. Iptables es un firewall de línea de comandos de Linux que permite a los administradores del sistema administrar 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 hay 3 tipos de tablas:

    1. FILTER – this is the default table, which contains the built in chains for:
      1. INPUT  – packages destined for local sockets
      2. FORWARD – packets routed through the system
      3. OUTPUT – packets generated locally
      1. PREROUTING – used for altering a packet as soon as it’s received
      2. OUTPUT – used for altering locally generated packets
      3. POSTROUTING – used for altering packets as they are about to go out
      1. PREROUTING – for altering incoming connections
      2. OUTPUT – for altering locally generated  packets
      3. INPUT – for incoming packets
      4. POSTROUTING – for altering packets as they are about to go out
      5. FORWARD – for packets routed through the box

      En este artículo, verá algunos comandos útiles que lo ayudarán a administrar el firewall de su caja de Linux a través de iptables. Para el propósito de este artículo, comenzaré con comandos más simples y pasaré a los más complejos hasta el final.

      1. Iniciar / Detener / Reiniciar el cortafuegos de Iptables

      Primero, debe saber cómo administrar el servicio iptables en diferentes distribuciones de Linux. Esto es bastante sencillo:

      ------------ On Cent/RHEL 7 and Fedora 22+ ------------
      # systemctl start iptables
      # systemctl stop iptables
      # systemctl restart iptables
      
      ------------ 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 de 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 para una tabla específica, puede usar la opción -t seguida de la tabla que desea verificar. Por ejemplo, para verificar las reglas en la tabla NAT , puede usar:

      # 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 desee bloquear el tráfico TCP de esa dirección IP, puede utilizar la opción -p que especifica el protocolo. De esa forma, el comando se verá 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 usar la opción más larga, puede usar --delete .

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

      A veces, es posible que desee bloquear las conexiones entrantes o salientes en un puerto específico. Es una buena medida de seguridad y realmente debería pensar en ese asunto cuando configure su firewall.

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

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

      Para permitir conexiones entrantes, use:

      # 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 la regla de iptables anterior.

      6. Permitir múltiples puertos en IPtables usando multipuerto

      Puede permitir varios puertos a la vez, utilizando multipuerto, a continuación puede encontrar dicha regla para las 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 es administrador del sistema y necesita aplicar estas reglas, tenga en cuenta que sus colegas pueden dejar de hablar con usted :)

      Primero encuentre 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 puede 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 que utiliza Facebook puede variar en su país.

      9. Configurar el reenvío de puertos en IPtables

      A veces, es posible que desee reenviar el tráfico de un servicio a otro puerto. Puede 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 . Puede cambiar los puertos por los que necesite.

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

      A veces, las direcciones IP pueden solicitar demasiadas conexiones hacia puertos web en 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 en 200 . Puede editar el límite y la ráfaga de límites 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 debido a problemas 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 el acceso de bucle invertido

      El acceso de bucle invertido (acceso desde 127.0.0.1 ) es importante y siempre debe dejarlo activo:

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

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

      Si desea registrar los paquetes descartados en la interfaz de red eth0 , puede usar 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 que elija. Los mensajes se registran en /var/log/messages y puede buscarlos con:

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

      14. Bloquear el acceso a direcciones MAC específicas en tablas IP

      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, deberá cambiar 00: 00: 00: 00: 00: 00 con la dirección MAC real que desea bloquear.

      15. Limite el número de conexiones simultáneas por dirección IP

      Si no desea que se establezcan demasiadas conexiones simultáneas desde una única dirección IP en un puerto determinado, puede usar 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 de IPtables

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

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

      En el ejemplo anterior, necesitará cambiar con la tabla real en la que desea buscar y con la cadena real que está buscando.

      Aquí hay un ejemplo:

      # iptables -L INPUT -v -n | grep 192.168.0.100
      

      17. Definir nueva cadena de IPTables

      Con iptables, puede definir su propia cadena y almacenar reglas personalizadas en ella. Para definir una cadena, use:

      # iptables -N custom-filter
      

      Ahora puede verificar si su nuevo filtro está allí:

      # iptables -L
      
      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 de firewall de IPtables

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

      # iptables -F
      

      Puede vaciar cadenas de una mesa 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 guardará el archivo y cómo le asignará un 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. Configurar 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 por parte de los diferentes proveedores de cumplimiento de PCI, pero hay algunos comunes.

      En muchos de los casos, deberá tener más de una dirección IP. Deberá aplicar las siguientes reglas para la dirección IP del sitio. Tenga mucho cuidado al usar las reglas a continuación y utilícelas solo 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, verifique su informe cuidadosamente y aplique las reglas requeridas. En algunos casos, es posible que también deba bloquear el tráfico UDP en ciertos puertos.

      22. Permitir conexiones establecidas y relacionadas

      Dado que el tráfico de red está separado en el tráfico 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 eliminar los paquetes inválidos, puede utilizar:

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

      24. Bloquear 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 cierta dirección 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 real (o red) que desea bloquear.

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

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

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

      Conclusión

      Iptables es un potente cortafuegos del que puede beneficiarse fácilmente. Es vital que todos los administradores de sistemas aprendan al menos los conceptos básicos de iptables. Si desea encontrar información más detallada sobre iptables y sus opciones, le recomendamos que lea el 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.