Una de las principales razones detrás de la inmensa popularidad que disfruta Linux es su gran destreza en la creación de redes. Linux impulsa la mayoría de los servidores comerciales del mundo debido a sus sólidas capacidades de red. Permite a los administradores del sistema la capacidad de controlar su red de la forma que deseen. Linux iptables es una de esas utilidades que brinda a los administradores de sistemas todo lo que necesitan para administrar las redes modernas de manera efectiva. Es un programa de espacio de usuario que permite a los usuarios configurar su tabla de firewall de kernel y administrar las cadenas y reglas que contiene usando reglas simples de iptables.
50 reglas productivas de cortafuegos de IPtables
La gente a menudo piensa mucho en las reglas de firewall de iptables, pero en la práctica, son bastante sencillas una vez que comienza. El conocimiento fundamental de la utilidad iptables y su propósito facilitará el dominio del firewall. Hemos curado esta guía cuidadosamente y esbozado los contenidos de acuerdo con eso. Comience a perfeccionar sus habilidades para establecer contactos practicando estas reglas de iptables para obtener una mejor visión del tema.
Fundamentos y estructura de las reglas de IPtables de Linux
El kernel de Linux contiene un marco llamado Netfilter para fines de red. Es simplemente una pila de rutinas del kernel que brindan capacidades de red básicas a nuestro sistema. El marco es de un nivel bastante bajo y, por lo tanto, no es factible para los usuarios cotidianos. Bang, aquí viene iptables.
Es un programa de espacio de usuario, con una interfaz de línea de comandos ordenada que permite a los usuarios utilizar la potencia bruta de Netfilter de una manera concisa y bien organizada. Puede inspeccionar, modificar, redirigir o descartar paquetes, unidades de comunicaciones de red utilizadas por nuestros sistemas.
Iptables actúa como un cortafuegos al bloquear los paquetes de red entrantes de sistemas hostiles. Sin embargo, puede hacer todo tipo de magia de red que quieras que haga. Ahora bien, ¿en qué consisten las iptables? Debajo del capó, solo contiene algunas tablas, cadenas y reglas.
Examen más profundo de los componentes de IPtables
Iptables consta de cinco tablas, cada una para trabajos de redes especializados. Contienen cadenas y reglas. La tabla predeterminada es filtro; otros son crudos , natural , destrozar y seguridad . Las cadenas son simples listas de reglas. El filtro tiene tres cadenas integradas; ENTRADA , SALIDA y ADELANTE . La tabla nat tiene dos cadenas adicionales llamadas PREROUTING y POST ENRUTAMIENTO .
El filtrado del tráfico de red se realiza a través de las reglas. Se pueden especificar para que tengan múltiples coincidencias y en objetivos específicos. Los objetivos se activan usando la j opción, abreviatura de –jump . Pueden ser una cadena definida por el usuario, un objetivo integrado o una extensión. Los objetivos integrados de Iptables son ACEPTAR , SOLTAR , Cola y VOLVER .
- -La cadena de políticas dicta el comportamiento de la cadena predeterminada. Determinan qué hacer con los paquetes que no coinciden con ninguna regla de iptables en sus tablas. Aprenderá su funcionamiento probando algunos comandos que le enseñamos. Así que prepárese y encienda su terminal para alguna amenaza de red.
Reglas básicas de IPtables para Linux
Comprender los comandos básicos de iptables lo ayudará a dominar la herramienta a largo plazo. A continuación, analizamos algunos comandos muy fundamentales pero cruciales que mejorarán su productividad como administrador de sistemas de Linux a un nivel completamente nuevo.
1. Comprobar el comportamiento predeterminado de la cadena de políticas
$ sudo iptables -L | grep policy
El comando anterior imprimirá el comportamiento de la cadena de políticas predeterminada de su sistema. En mi sistema Ubuntu 19.08, la política predeterminada es aceptar paquetes para las tres cadenas integradas de la tabla de filtros. Debería ser lo mismo para su sistema dado que no los ha modificado antes.
2. Consulta las reglas actuales
$ sudo iptables -L
Puede verificar la configuración actual de iptables de su sistema llamando a iptables con -L opción. Debería mostrar una lista bien formateada de sus reglas junto con información sobre su política, destino, fuente y destino.
3. Enumerar reglas por especificación
$ sudo iptables -S
La -S La opción agregada con el comando iptables mostrará una lista de todas sus reglas según su especificación. Mi shell me muestra que acepta todos los paquetes para las cadenas INPUT, OUTPUT y FORWARD.
4. Verifique el estado de su Iptables
$ sudo iptables -L -v
El comando anterior le mostrará el estado actual de sus iptables. Enumerará cuántos paquetes ha aceptado y enviado su sistema hasta ahora. Debe prestar atención a la cadena FORWARD. Debe ser todo ceros a menos que haya cambiado la configuración de su cortafuegos anteriormente.
5. Restablezca sus reglas de Iptables
$ sudo iptables -F
Puede llegar un momento en el que haya distorsionado la configuración de iptables y estropeado por completo la red de su sistema. Esto puede suceder cuando está probando nuevas reglas y no puede revertir algunos cambios. Sin embargo, puede relajarse ya que este comando vendrá a su rescate en tales situaciones.
6. Guardar iptables modificados
$ sudo service iptables save
Los cambios en iptables son transitorios, lo que significa que se restablece automáticamente cada vez que se reinicia el demonio. Es posible que desee guardar sus iptables después de cambiar algunas reglas para uso futuro. El comando anterior hace esto y se asegura de que iptables se cargue con la nueva configuración la próxima vez que arranque.
7. Limpiar IPtables y conservar cambios
$ sudo iptables -F && sudo /sbin/iptables-save
Debe usar el comando anterior para vaciar sus iptables y hacer que los cambios sean permanentes. La última parte del comando (después de &&) hace el mismo trabajo que el comando número seis. Por lo tanto, se pueden usar indistintamente.
Administración de tablas IP de Linux
Iptables proporciona comandos de administración robustos que facilitan la administración de esta utilidad de red. Sin embargo, estos comandos tienden a variar de un sistema a otro. Afortunadamente, los cambios son sutiles y fáciles de entender incluso para los nuevos usuarios de Linux.
8. Iniciar el cortafuegos de Iptables
$ sudo systemctl start iptables
Puede usar el comando anterior para iniciar el servicio iptables en sistemas que usan systemd, incluidos Fedora, OpenSUSE y Ubuntu.
$ sudo /etc/init.d/iptables start
Los sistemas que usan sysvinit en su lugar requerirán la variación anterior para este trabajo. Las personas que usen MX Linux, Slackware o Puppy Linux necesitarán usar esta versión para iniciar iptables en su sistema.
9. Detener el cortafuegos de Iptables
$ sudo systemctl stop iptables
Este comando detendrá la ejecución del demonio iptables en sistemas que usan systemd.
$ sudo /etc/init.d/iptables stop
Hará lo mismo para los sistemas que ejecutan sysvinit.
10. Reinicio del cortafuegos de Iptables
$ sudo systemctl restart iptables
Puede usar el comando anterior para reiniciar el servicio iptables en su máquina Ubuntu.
$ sudo /etc/init.d/iptables restart
Para los sistemas que usan sysvinit, pruebe el comando anterior en su lugar. Observe la similitud en los patrones entre los tres comandos anteriores.
11. Comprobar todas las reglas existentes
$ sudo iptables -L -n -v
Este comando de iptables imprimirá todas las reglas de firewall de iptables existentes que haya configurado hasta ese momento. Dado que este comando mostrará mucha información, usar grep para encontrar reglas específicas sería una buena idea.
12. Verifique las reglas existentes para tablas específicas
El comando anterior mostrará información sobre la tabla predeterminada, que es el filtro. Si desea encontrar información sobre alguna otra tabla, digamos la tabla NAT, use el siguiente comando en su lugar.
$ sudo iptables -t nat -L -v -n
Observe cómo la -t La opción se usa aquí para especificar el nombre de la tabla en iptables.
13. Mostrar reglas solo para cadenas TCP
$ sudo iptables -S TCP
Este comando mostrará información solo sobre la cadena TCP. Esto es útil cuando desea salidas solo para solicitudes TCP entrantes.
14. Reglas de lista solo para cadenas UDP
$ sudo iptables -S UDP
Las solicitudes UDP también representan una cantidad sustancial de tráfico en muchos sistemas. Si desea bloquear el tráfico UDP no deseado, puede usar este comando para inspeccionar estas solicitudes.
Reglas de cortafuegos de Linux IPtables
Uno de los usos principales de iptables en Linux es configurar firewalls de red. Se puede usar para bloquear solicitudes entrantes no deseadas en función de muchos criterios diferentes, incluidas direcciones IP específicas, rangos de IP, direcciones MAC, etc. A continuación, enumeramos algunos ejemplos apropiados de dichos comandos.
15. Bloquear todas las solicitudes entrantes
El siguiente comando bloqueará todas las solicitudes entrantes para su sistema. Este comando tendrá prioridad sobre otras reglas en sus tablas, ya que será la primera regla verificada para cada solicitud.
$ sudo iptables INPUT -j DROP
16. Bloquear una dirección IP específica
A menudo, notará comportamientos de tráfico molestos desde algunas direcciones IP específicas. El comando dado será útil en tales situaciones y permitirá a los administradores de sistemas bloquear esas direcciones IP por completo.
$ sudo iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP
Este comando bloqueará todas las solicitudes entrantes de la variable de dirección IP. En términos de iptables, esto se conoce como solicitudes de "caída". El -A La opción se usa para agregar esta regla al final de su cadena de ENTRADA, en lugar de al principio.
17. Bloquear todas las solicitudes TCP desde una IP
El siguiente comando se puede usar para bloquear todas las solicitudes TCP entrantes desde una dirección IP dada. No olvide reemplazar la variable de dirección IP con una existente.
$ sudo iptables -A INPUT -p tcp -s xxx.xxx.xxx.xxx -j DROP
El -p La bandera se usa aquí para seleccionar solo solicitudes TCP. El -j La opción se utiliza para "saltar" a una acción específica.
18. Desbloquear una dirección IP
A veces, es posible que desee desbloquear una dirección IP que bloqueó anteriormente. El siguiente comando le permite hacer exactamente esto.
$ sudo iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP
Este comando simplemente elimina la regla que bloqueó la IP dada. También puede usar –eliminar en lugar de -D si quieres.
19. Bloquear intervalos de direcciones IP
Los administradores de sistemas a menudo bloquean rangos de IP específicos debido a su continuo comportamiento sospechoso. El siguiente comando le permite bloquear todas las solicitudes entrantes del rango de IP xxx.xxx.xxx.0/24.
$ sudo iptables -A INPUT -s xxx.xxx.xxx.0/24 -j DROP
20. Desbloquear intervalos de direcciones IP
A veces, es posible que desee bloquear un rango de IP para realizar alguna inspección. Cuando p es legítimo, debe volver a habilitar su acceso a su sistema. Use el siguiente comando para desbloquear un rango de direcciones IP determinado de su firewall de iptables.
$ sudo iptables -D INPUT -s xxx.xxx.xxx.0/24 -j DROP
21. Bloquear todas las solicitudes de TCP para el rango de IP determinado
Los usuarios maliciosos a menudo usan su vasta red de bots para inundar servidores legítimos con solicitudes TCP. Puede usar el siguiente comando para bloquear todas las solicitudes de TCP de un rango de IP dado, digamos xxx.xxx.xxx.0/24.
$ sudo iptables -A INPUT -p tcp -s xxx.xxx.xxx.0/24 -j DROP
22. Desbloquee todas las solicitudes de TCP para el rango de IP determinado
Puede usar el siguiente comando al desbloquear todos los tráficos TCP de un rango de IP dado, digamos xxx.xxx.xxx.0/24. Esto será útil cuando bloquee todas las solicitudes TCP entrantes de algún rango de direcciones IP.
$ sudo iptables -D INPUT -p tcp -s xxx.xxx.xxx.0/24 -j DROP
23. Bloquear conexiones TCP en puertos específicos
Las reglas de iptables se pueden usar para bloquear todas las conexiones TCP salientes en un puerto específico, digamos 111 en este caso.
$ sudo iptables -A OUTPUT -p tcp --dport 111 -j DROP
Puede reemplazar el nombre de la cadena por INPUT para bloquear conexiones TCP en el mismo puerto, pero para solicitudes entrantes.
$ sudo iptables -A INPUT -p tcp --dport xxx -j DROP
24. Permitir conexiones TCP en el puerto 80
El siguiente comando permitirá las solicitudes TCP entrantes en el puerto 80 de su sistema. Los administradores de sistemas a menudo designan números de puerto específicos para diferentes conexiones por el bien de la administración.
$ sudo iptables -A INPUT -p tcp -s xxx.xxx.xxx.0/24 --dport 80 -j ACCEPT
25. Rechazar conexiones TCP en el puerto 80
El siguiente comando de iptables rechazará cualquier intento de conexión TCP en el puerto 80. Todo lo que necesita hacer es pasar DROP como argumento a -j .
$ sudo iptables -A INPUT -p tcp -s xxx.xxx.xxx.0/24 --dport 80 -j DROP
Lo mismo se aplica a las conexiones UDP.
$ sudo iptables -A INPUT -p udp -s xxx.xxx.xxx.0/24 --dport 80 -j DROP
26. Permitir conexiones SSH entrantes en el puerto 22
El siguiente comando es útil cuando desea permitir todas las conexiones SSH entrantes en el puerto predeterminado. Debe pasar ssh como argumento a –dport marcar en las reglas de iptables.
$ sudo iptables -A INPUT -p tcp -s xxx.xxx.xxx.0/24 --dport ssh -j ACCEPT
27. Bloquear conexiones SSH entrantes
Para bloquear cualquier intento de ssh entrante, use el siguiente comando. Esto bloqueará todos los intentos de SSH entrantes realizados desde el rango de IP xxx.xxx.xxx.0/24.
$ sudo iptables -A INPUT -p tcp -s xxx.xxx.xxx.0/24 --dport ssh -j DROP
28. Permitir conexiones SSH salientes
Debe tener SSH saliente habilitado si desea establecer una comunicación remota segura para su máquina Linux. El siguiente comando te permite hacer precisamente esto.
$ sudo iptables -A OUTPUT -p tcp --dport ssh -j ACCEPT
Permite todas las conexiones SSH salientes desde su sistema a través de la web.
29. Bloquear todas las conexiones SSH salientes
El siguiente comando bloqueará todos los intentos de SSH salientes desde su sistema a cualquier red. Tenga cuidado al usar este comando de forma remota, ya que también puede dejarlo bloqueado del sistema.
$ sudo iptables -A INPUT -p tcp --dport ssh -j DROP
30. Establecer estados al permitir SSH entrante
Los administradores de sistemas a menudo usan estados SSH para determinar si las conexiones remotas pertenecen a la entidad correcta o no. Primero, asigne estados a las solicitudes SSH entrantes usando el siguiente comando. El -i bandera se utiliza para referirse a la interfaz, que es eth0 en este caso.
$ sudo iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
31. Establecer estados al permitir SSH entrante
Asigne estados a las solicitudes SSH salientes de la misma manera que lo hizo con las solicitudes entrantes. El -o flag se usa aquí para referirse a la interfaz, que también es eth0 en este caso.
$ sudo iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
32. Permitir múltiples puertos para solicitudes entrantes
Las iptables del firewall de Linux permiten a los administradores habilitar más de un puerto a la vez usando la opción multipuerto de iptables. El siguiente comando configura una regla para aceptar todas las solicitudes entrantes en los puertos número 22, 80 y 110.
$ sudo iptables -A INPUT -p tcp -m multiport --dports 22,80,110 -j ACCEPT
33. Permitir múltiples puertos para solicitudes salientes
La configuración de múltiples puertos para conexiones salientes es casi idéntica al comando anterior. Aquí, todo lo que necesita hacer es usar la opción SALIDA.
$ sudo iptables -A OUTPUT -p tcp -m multiport --sports 22,80,110 -j ACCEPT
34. Permitir rangos de IP en un puerto específico
A veces, puede recibir solicitudes de red solo de un rango de IP específico, es decir, redes de empresas privadas. El siguiente comando permite todas las solicitudes SSH salientes del rango xxx.xxx.xxx.0/24 en el puerto SSH predeterminado.
$ sudo iptables -A OUTPUT -p tcp -d xxx.xxx.xxx.0/24 --dport 22 -j ACCEPT
35. Bloquear rangos de IP en puertos específicos
A menudo encontrará solicitudes de red continuas de usuarios de bots malintencionados. Por lo general, forman parte de un rango de IP específico. Es fácil bloquear estos tráficos usando el siguiente comando.
$ sudo iptables -A INPUT -p tcp -s xxx.xxx.0.0/24 --dport 22 -j DROP
36. Bloquear Facebook en las reglas de Iptables
A menudo, muchas empresas bloquean los sitios de redes sociales como Facebook durante el horario de oficina. Los siguientes comandos se pueden utilizar para este propósito. Primero, averigüe el rango de red utilizado por Facebook en su ubicación geográfica.
$ sudo host facebook.come
Esto debería devolver un resultado que consiste en la IP específica utilizada por Facebook, digamos 157.240.7.35 en este caso. Ahora ejecuta el siguiente comando.
$ sudo whois 66.220.156.68 | grep CIDR
Proporcionará el rango de IP que usa Facebook para su ubicación, digamos 157.240.0.0/16 en este caso. Ahora podemos simplemente bloquear todas las conexiones salientes a esta red.
$ sudo iptables -A OUTPUT -p tcp -d 157.240.0.0/16 -j DROP
37. Bloquear inundación de red
Los usuarios maliciosos a menudo recurren a la inundación de la red para comprometer los servidores de la empresa. Puede limitar las solicitudes entrantes por unidad de tiempo para salvar su sistema de tales ataques.
$ sudo iptables -A INPUT -p tcp --dport 80 -m limit --limit 50/minute --limit-burst 100 -j ACCEPT
Este comando limita el tráfico entrante al puerto 80 a un máximo de 50 conexiones por minuto y establece un límite de ráfaga de 100.
38. Bloquear solicitudes de ping entrantes
Las solicitudes de ping se utilizan para determinar si un servidor está activo o no. También puede proporcionar información valiosa para posibles piratas informáticos. Puede bloquear estas solicitudes agregando el siguiente comando a sus iptables de firewall de Linux.
$ sudo iptables -A INPUT -pr icmp -i eth0 -j DROP
39. Registrar paquetes de red descartados
Es posible que desee almacenar los paquetes de red descartados por las reglas del firewall de iptables para una inspección posterior. Esto se puede lograr con el siguiente comando.
$ sudo iptables -A INPUT -i eth0 -j LOG --log-prefix "IPtables dropped packets:"
Puede sustituir la cadena después de –log-prefix a algo de tu elección. Use grep para averiguar los paquetes descartados.
$ sudo grep "IPtables dropped packets:" /var/log/*.log
40. Bloquear solicitudes de conexión en la interfaz de red
Si tiene más de una interfaz de red, es posible que desee bloquear las conexiones en una de ellas. Use el siguiente comando para bloquear todas las solicitudes del rango de IP xxx.xxx.xxx.0/24 en la primera interfaz de ethernet, eth0.
$ sudo iptables -A INPUT -i eth0 -s xxx.xxx.xxx.0/24 -j DROP
Reglas de cortafuegos de IPtables diversas
Dado que las reglas de iptables de Linux pueden ser bastante diversas, vamos a enumerar algunos comandos esenciales que tienen un impacto considerable en la administración del sistema. A menudo pueden conducir a la solución de problemas específicos y también se pueden utilizar para solucionar problemas del cortafuegos de iptables.
41. Permitir el reenvío de puertos en Iptables
A veces, es posible que desee reenviar los tráficos de un servicio a algún puerto diferente. El siguiente comando demuestra uno de esos ejemplos simples.
$ sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 3535
El comando anterior reenvía todo el tráfico entrante en la interfaz de red eth0 desde el puerto 25 al 3535.
42. Permitir acceso de bucle invertido
El acceso de bucle invertido es importante para solucionar problemas de su red y varios propósitos de prueba. Puede permitir esto usando los siguientes comandos.
Para conexiones entrantes,
$ sudo iptables -A INPUT -i lo -j ACCEPT
Para conexiones salientes,
$ sudo iptables -A OUTPUT -o lo -j ACCEPT
43. Bloquear el acceso a direcciones MAC específicas
Si desea evitar que otras personas accedan a su sistema desde alguna dirección MAC en particular, puede usar el siguiente comando para hacerlo. Cambie el MAC a continuación con la dirección que desea bloquear.
$ sudo iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j DROP
44. Limite las conexiones simultáneas por IP
Los administradores de sistemas a veces quieren limitar la cantidad de conexiones simultáneas establecidas desde una sola dirección IP en un puerto determinado. El siguiente comando nos muestra cómo hacer esto con iptables.
$ sudo iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT
Puede cambiar el número de puerto y el límite de conexión como desee.
45. Buscar reglas de Iptables
Una vez que su firewall de iptables esté configurado y funcionando, es posible que deba inspeccionar algunas reglas más adelante. Esto se puede hacer usando la siguiente sintaxis de comando.
$ sudo iptables -L $table -v -n | grep $string
No olvide reemplazar $table con el nombre de su tabla y $string con su término de búsqueda.
46. Guardar reglas de Iptables en un archivo
Puede guardar su nuevo firewall de iptables fácilmente en un archivo. El siguiente comando muestra cómo guardar una iptables recién configurada en un archivo llamado iptables.rules. Puede cambiar el nombre del archivo por el que desee.
$ sudo iptables-save > ~/iptables.rules
47. Restaurar Iptables desde un Archivo
El siguiente comando demuestra cómo restaurar las reglas de firewall de iptables desde archivos. En este ejemplo, asumimos que las reglas se guardan en el archivo creado en el ejemplo anterior.
$ sudo iptables-restore < ~/iptables.rules
48. Deshabilitar correos salientes
Si está seguro de que su sistema no necesita enviar correos electrónicos salientes, puede deshabilitarlos completamente usando iptables. El siguiente comando bloquea todas las conexiones salientes en los puertos SMTP. Utilice DROP en lugar de REJECT si no desea enviar un acuse de recibo.
$ sudo iptables -A OUTPUT -p tcp --dports 25,465,587 -j REJECT
49. Restablecer recuentos y tamaño de paquetes
Puede usar el siguiente comando para restablecer los recuentos de paquetes de iptables y el tamaño agregado. Esto es útil cuando desea determinar cuánto tráfico nuevo maneja su servidor durante una conexión ya establecida.
$ sudo iptables -Z
50. Permite conexión interna a externa
Suponga que su interfaz de red interna en eth1 y la interfaz externa es eth0. El siguiente comando permitirá que el adaptador eth1 acceda al tráfico del adaptador externo.
$ sudo iptables -A FORWARD l-i eth1 -o eth0 -j ACCEPT
Pensamientos finales
Las reglas de iptables de Linux ofrecen un medio flexible para controlar el tráfico de red y permiten a los administradores administrar su sistema de manera conveniente. La gente a menudo piensa que iptables está fuera de su alcance debido a la abundancia de reglas de firewall de iptables. Sin embargo, son bastante simples una vez que los entiendes.
Además, el conocimiento profundo de iptables es obligatorio si desea seguir una carrera en los campos de redes. Hemos resumido los 50 comandos de iptables más útiles para que pueda aprenderlos rápidamente. Comience a practicarlos de inmediato y siga experimentando hasta que aprenda algo nuevo. Déjanos tu opinión sobre esta guía y quédate con nosotros para obtener guías más emocionantes sobre varios comandos de Linux y Unix.