|

iptables en Linux: configurar tu cortafuegos, bloquea IPs, rangos y dominios en Linux

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 iptables instalado (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 TARGET

Los parámetros más utilizados en estos ejercicios son:

ParámetroDescripción
-AAñade una regla al final de la cadena (Append).
-DElimina una regla específica de la cadena (Delete).
-FElimina todas las reglas de la cadena (Flush).
-L -vLista todas las reglas activas con detalle (List verbose).
-sIP o rango de origen (source).
-pProtocolo (tcp, udp, icmp…).
-j DROP / REJECTAcción: descartar el paquete silenciosamente (DROP) o rechazarlo con respuesta (REJECT).
INPUT / OUTPUT / FORWARDCadenas: 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 DROP

Para verificar que la regla se ha añadido correctamente se ejecuta:

sudo iptables -L -v

Tras 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 DROP

Bloquear 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 DROP

Atenció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 DROP

Tras 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 ACCEPT

Tras 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:

  1. Resolver la IP del dominio con nslookup www.youtube.com o dig www.youtube.com.
  2. 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 DROP



Bloquear 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 DROP

Si 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 DROP


Resumen de comandos

EjercicioComando principal
1 – Bloquear IP concretaiptables -A INPUT -s <IP> -p icmp -j DROP
2 – Bloquear rango de rediptables -A INPUT -m iprange --src-range 192.168.0.1-192.168.3.254 -p icmp -j DROP
3 – Bloquear todo el tráfico entranteiptables -P INPUT DROP
4 – Eliminar regla del ejercicio 2iptables -D INPUT -m iprange --src-range 192.168.0.1-192.168.3.254 -p icmp -j DROP
5 – Eliminar todas las reglasiptables -F
6 – Bloquear dominio (YouTube)iptables -A OUTPUT -p tcp -d www.youtube.com -j DROP
7 – Bloquear ping ICMPiptables -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.