iptables en Linux
Introducción
iptables es la herramienta de filtrado de paquetes por excelencia en sistemas Linux. Permite definir reglas que controlan qué tráfico de red entra, sale o es redirigido en una máquina, convirtiéndola en un cortafuegos (firewall) completamente personalizable.
En esta guía se resuelven 7 ejercicios prácticos de nivel introductorio-intermedio: desde el bloqueo de una IP concreta hasta el filtrado de dominios, pasando por rangos de red, bloqueo total de tráfico entrante y gestión de reglas ICMP. Todos los ejercicios incluyen el comando exacto utilizado y la verificación del resultado con iptables -L -v.
Requisitos previos
- Dos máquinas virtuales Linux en red (para los ejercicios de ping entre equipos).
- Acceso a terminal con privilegios de superusuario (
sudo). - El paquete
iptablesinstalado (incluido por defecto en la mayoría de distribuciones Linux).
Para una referencia completa de la sintaxis y opciones de iptables, se recomienda consultar el manual oficial antes de comenzar los ejercicios, ya que es muy didáctico y cubre todos los parámetros disponibles.
Referencia rápida de sintaxis
Antes de los ejercicios, conviene tener presente la estructura básica de un comando iptables:
sudo iptables -[ACDI] CHAIN -p PROTOCOL -s SOURCE -d DESTINATION -j TARGETLos parámetros más utilizados en estos ejercicios son:
| Parámetro | Descripción |
|---|---|
-A | Añade una regla al final de la cadena (Append). |
-D | Elimina una regla específica de la cadena (Delete). |
-F | Elimina todas las reglas de la cadena (Flush). |
-L -v | Lista todas las reglas activas con detalle (List verbose). |
-s | IP o rango de origen (source). |
-p | Protocolo (tcp, udp, icmp…). |
-j DROP / REJECT | Acción: descartar el paquete silenciosamente (DROP) o rechazarlo con respuesta (REJECT). |
INPUT / OUTPUT / FORWARD | Cadenas: tráfico entrante, saliente o en tránsito. |
Bloquear el ping de una IP concreta
El objetivo es impedir que la máquina de otro equipo (con IP conocida) pueda hacer ping al servidor. Para ello se añade una regla en la cadena INPUT que descarte los paquetes ICMP provenientes de esa IP específica.
En este ejercicio se trabaja con dos máquinas virtuales. La IP del equipo que se quiere bloquear se introduce en el parámetro -s. El comando ejecutado es el siguiente:
sudo iptables -A INPUT -s <IP_del_compañero> -p icmp -j DROPPara verificar que la regla se ha añadido correctamente se ejecuta:
sudo iptables -L -vTras aplicar la regla, el equipo bloqueado no recibe respuesta al hacer ping, confirmando que la regla DROP está funcionando correctamente.
Bloquear el ping de un rango de red completo (iprange)
En este ejercicio se bloquea el tráfico ICMP proveniente de toda una subred, simulando el bloqueo de todos los equipos de una clase o red local. Se utiliza el módulo iprange de iptables para definir un rango de IPs.
La red utilizada en el ejemplo es 192.168.0.0/22, que abarca las IPs desde 192.168.0.1 hasta 192.168.3.254. El comando es el siguiente:
sudo iptables -A INPUT -m iprange --src-range 192.168.0.1-192.168.3.254 -p icmp -j DROPBloquear todo el tráfico de entrada
Este aplica una política más agresiva: denegar todo el tráfico entrante sin excepción. Se modifica la política por defecto de la cadena INPUT a DROP, de modo que cualquier paquete que llegue al servidor y no tenga una regla ACCEPT explícita será descartado.
sudo iptables -P INPUT DROPAtención: este comando afecta a todo el tráfico entrante, incluyendo conexiones SSH activas. Es fundamental asegurarse de tener acceso físico o una consola de recuperación antes de ejecutarlo en un servidor en producción.
Eliminar una regla específica (la del ejercicio 2)
iptables permite eliminar reglas concretas sin afectar al resto. Para borrar la regla de bloqueo por rango añadida en el ejercicio 2 se utiliza la opción -D con exactamente los mismos parámetros con los que fue creada:
sudo iptables -D INPUT -m iprange --src-range 192.168.0.1-192.168.3.254 -p icmp -j DROPTras ejecutar el comando, la regla desaparece del listado de iptables, como se puede comprobar con sudo iptables -L -v.
Eliminar todas las reglas (flush)
Para dejar las cadenas de iptables completamente limpias, sin ninguna regla activa, se utiliza la opción -F (flush). Este comando borra todas las reglas de todas las cadenas y restablece las políticas por defecto a ACCEPT:
# Eliminar todas las reglas
sudo iptables -F
# Restablecer políticas por defecto
sudo iptables -P INPUT ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -P FORWARD ACCEPTTras ejecutar estos comandos, el listado de iptables debe aparecer completamente vacío, confirmando que todas las reglas de los ejercicios anteriores han sido eliminadas.
Bloquear el acceso a un dominio web (YouTube)
Este ejercicio va un paso más allá: en lugar de bloquear una IP, se bloquea el acceso a un dominio completo, en este caso www.youtube.com. Para ello es necesario obtener primero la IP (o rango de IPs) asociada al dominio y luego crear una regla OUTPUT que descarte las conexiones salientes hacia esas IPs.
El procedimiento es el siguiente:
- Resolver la IP del dominio con
nslookup www.youtube.comodig www.youtube.com. - Añadir una regla OUTPUT que bloquee el tráfico TCP hacia esa IP en los puertos 80 (HTTP) y 443 (HTTPS).
# Bloquear HTTP y HTTPS hacia la IP de YouTube
sudo iptables -A OUTPUT -p tcp -d <IP_de_youtube> --dport 80 -j DROP
sudo iptables -A OUTPUT -p tcp -d <IP_de_youtube> --dport 443 -j DROP
# Alternativa bloqueando el dominio directamente (requiere módulo string o uso de DNS):
sudo iptables -A OUTPUT -p tcp -d www.youtube.com -j DROPBloquear los pings ICMP al servidor
El protocolo ICMP utilizado por el comando ping tiene dos tipos básicos de paquetes:
- icmp-echo-request (tipo 8): el paquete que envía el cliente al hacer ping.
- icmp-echo-reply (tipo 0): la respuesta que devuelve el servidor.
Para impedir que el servidor responda a los pings, basta con bloquear los paquetes icmp-echo-request entrantes en la cadena INPUT. De este modo, el servidor recibe la petición pero la descarta sin responder:
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j DROPSi además se quiere impedir que el propio servidor pueda hacer ping hacia fuera, se añade una regla en la cadena OUTPUT para bloquear los icmp-echo-reply:
sudo iptables -A OUTPUT -p icmp --icmp-type echo-reply -j DROPResumen de comandos
| Ejercicio | Comando principal |
|---|---|
| 1 – Bloquear IP concreta | iptables -A INPUT -s <IP> -p icmp -j DROP |
| 2 – Bloquear rango de red | iptables -A INPUT -m iprange --src-range 192.168.0.1-192.168.3.254 -p icmp -j DROP |
| 3 – Bloquear todo el tráfico entrante | iptables -P INPUT DROP |
| 4 – Eliminar regla del ejercicio 2 | iptables -D INPUT -m iprange --src-range 192.168.0.1-192.168.3.254 -p icmp -j DROP |
| 5 – Eliminar todas las reglas | iptables -F |
| 6 – Bloquear dominio (YouTube) | iptables -A OUTPUT -p tcp -d www.youtube.com -j DROP |
| 7 – Bloquear ping ICMP | iptables -A INPUT -p icmp --icmp-type echo-request -j DROP |
Conclusión
Estos 7 ejercicios cubren las operaciones fundamentales de iptables: creación, verificación y eliminación de reglas, bloqueo por IP y rango, control de protocolos y filtrado de tráfico saliente. Dominar estas bases es imprescindible para implementar políticas de seguridad de red sólidas en cualquier servidor Linux.
Entradas recientes
- De la web estática a la dinámica: diferencias entre HTML y PHP, motores de búsqueda y herramientas
- KDE vs GNOME: diferencias, historia, alternativas y tutorial para instalar nuevos entornos en tu distribución
- Cómo funciona una fuente de alimentación: desmontaje, análisis de componentes y comprobación con multímetro
- Redes locales en Linux: tarjetas de red, comandos de diagnóstico, Wireshark y conceptos clave
- Permisos en Linux: acceso administrativo, chmod y chown

