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:
-
FILTER
: esta es la tabla predeterminada, que contiene las cadenas integradas para:- INPUT : paquetes destinados a sockets locales
- FORWARD – paquetes enrutados a través del sistema
- SALIDA: paquetes generados localmente
NAT
– una tabla que se consulta cuando un paquete intenta crear una nueva conexión. Tiene incorporado lo siguiente:- PREROUTING: se utiliza para modificar un paquete tan pronto como se recibe
- SALIDA: se utiliza para alterar paquetes generados localmente
- POSTROUTING: se utiliza para modificar paquetes cuando están a punto de salir
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:
- PREROUTING – para alterar las conexiones entrantes
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.