
Bloquear IP con iptables es quizá la medida de seguridad más eficaz (y la más barata) para proteger un servidor Linux frente a ataques de fuerza bruta, spam, scraping abusivo o intentos directos de intrusión. iptables, el firewall clásico del kernel de Linux, filtra el tráfico a nivel de red con reglas precisas que se aplican al instante. Sin reiniciar servicios. Sin instalar nada extra. En esta primera parte de la guía verás qué es iptables, cómo detectar IPs sospechosas y los comandos esenciales para bloquearlas de inmediato, incluyendo rangos completos y países enteros.
¿Qué es iptables y por qué usarlo para bloquear IPs sospechosas?
iptables es el sistema de filtrado de paquetes que viene integrado en el kernel de Linux. Funciona con tablas (filter, nat, mangle) que contienen cadenas (INPUT, OUTPUT, FORWARD), y en esas cadenas defines reglas que inspeccionan cada paquete que entra o sale del servidor. Si un paquete encaja con una regla, se aplica la acción indicada: aceptarlo (ACCEPT), rechazarlo (REJECT) o descartarlo sin decir nada (DROP).
¿Por qué iptables y no otra cosa? Alguna razón hay:
- Inmediatez: las reglas se aplican en tiempo real, sin cortar el servicio ni un segundo.
- Bajo consumo: el filtrado ocurre en el kernel, así que el impacto en rendimiento es prácticamente nulo.
- Precisión: puedes bloquear por IP individual, rango CIDR, puerto, protocolo o incluso geolocalización.
- Disponibilidad: viene preinstalado en casi cualquier distribución (Debian, Ubuntu, CentOS, AlmaLinux).
Para ataques concretos, DROP suele preferirse a REJECT: al no informar al atacante de que la petición ha sido bloqueada, te ahorras también el ancho de banda de los paquetes de respuesta. Pequeño detalle, pero suma.
Cómo identificar direcciones IP sospechosas en tu servidor
Antes de bloquear, hay que saber qué bloquear. Parece obvio, pero más de un servidor ha acabado con reglas absurdas por bloquear a ciegas. Estos son los métodos que más uso dan:
Revisar los logs de acceso
En servidores web, analiza el access log de Apache o Nginx:
- Apache/Nginx: tail -f /var/log/nginx/access.log o /var/log/apache2/access.log
- SSH (ataques de fuerza bruta): grep «Failed password» /var/log/auth.log | awk ‘{print $NF}’ | sort | uniq -c | sort -nr | head -20
Ver conexiones activas con netstat y ss
Para cazar IPs con demasiadas conexiones simultáneas:
- netstat -ntu | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -nr | head -20
- O con herramientas más modernas: ss -tunap | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -nr | head
Consejos prácticos
- Comprueba siempre la IP en herramientas como whois antes de bloquearla. No vayas a cortar el acceso a un proveedor legítimo o a un CDN.
- No te bloqueques a ti mismo: mantén siempre una sesión SSH activa de respaldo mientras pruebas reglas. Créeme, pasa más de lo que parece.
- Valora instalar fail2ban para automatizar el baneo de IPs que fallan repetidamente en SSH, FTP o el panel de WordPress (wp-login.php).
Tip: si administras WordPress, revisa también los plugins de seguridad como Wordfence, que registran los intentos de acceso fallidos junto con las IPs implicadas. En RedServicio (redservicio.net) encontrarás guías y soporte profesional para configurar fail2ban y blindar tu wp-login.
Comandos para bloquear IP con iptables: reglas básicas y ejemplos
Aquí van los comandos esenciales. Ejecútalos como root o con sudo:
Bloquear una IP concreta:
- iptables -A INPUT -s 203.0.113.45 -j DROP — descarta todo el tráfico entrante desde esa IP.
Bloquear una IP solo en un puerto específico (por ejemplo, el 80):
- iptables -A INPUT -s 203.0.113.45 -p tcp –dport 80 -j DROP
Rechazar en lugar de descartar:
- iptables -A INPUT -s 203.0.113.45 -j REJECT
Verificar las reglas activas:
- iptables -L INPUT -n –line-numbers — muestra las reglas numeradas, lo que resulta útil para eliminarlas después con iptables -D INPUT 3.
Hacer las reglas persistentes tras reiniciar:
- En Debian/Ubuntu: apt install iptables-persistent y luego netfilter-persistent save.
- En CentOS/AlmaLinux: service iptables save.
Importante: las reglas de iptables no son persistentes por defecto. Si reinicias el servidor sin guardarlas, desaparecen. Todas. Verifica siempre la persistencia antes de dar por terminada la configuración.
Bloquear rangos de IP y países completos con iptables
A veces una sola IP no basta. Cuando los ataques llegan desde decenas de direcciones dentro de la misma red, bloquearlas una por una es perder el tiempo. Para eso iptables acepta notación CIDR:
- iptables -A INPUT -s 203.0.113.0/24 -j DROP — con esto bloqueas las 256 IPs del rango 203.0.113.x.
- iptables -A INPUT -s 198.51.100.0/16 -j DROP — aquí son 65.536 direcciones de golpe.
¿Y si quieres bloquear un país entero? Hay dos caminos:
Opción 1: ipset con listas GeoIP
El más eficiente con diferencia, porque iptables procesa miles de IPs del país con una sola regla. Los pasos:
- Instala ipset: apt install ipset.
- Descarga las listas por país de fuentes como IPdeny (por ejemplo, cn.zone para China).
- Crea el conjunto: ipset create bloqueo hash:net.
- Carga la lista: for i in $(cat cn.zone); do ipset add bloqueo $i; done.
- Añade la regla: iptables -A INPUT -m set –match-set bloqueo src -j DROP.
Opción 2: módulo geoip de xtables-addons
La alternativa usa bases de datos de MaxMind: iptables -A INPUT -m geoip –src-cc CN,RU -j DROP. El inconveniente es que hay que compilar xtables-addons, así que en la mayoría de servidores ipset resulta más sencillo.
Eso sí, bloquear países no es una decisión que debas tomar a la ligera. Piénsalo: ¿tus usuarios o clientes vienen de esas regiones? Si la respuesta es sí, una regla geográfica amplia te va a pasar factura. En RedServicio (redservicio.net) tienes más guías sobre hardening de servidores y, si lo necesitas, ayuda profesional para diseñar una política de filtrado adaptada a tu caso.
Cómo hacer persistentes las reglas de iptables tras un reinicio
Este detalle atrapa a más de un administrador novato: las reglas de iptables viven en memoria. Reinicias el servidor y desaparecen. Sin persistencia, tu filtrado se esfuma sin previo aviso. Según tu distribución, tienes varias salidas.
Con iptables-persistent (Debian y Ubuntu)
En sistemas basados en Debian, lo más cómodo es el paquete iptables-persistent:
- Instala el paquete: apt install iptables-persistent.
- Durante la instalación te preguntará si quieres guardar las reglas actuales de IPv4 e IPv6; acepta si ya las tienes configuradas.
- Para guardar cambios posteriores ejecuta: netfilter-persistent save.
- Las reglas quedan en /etc/iptables/rules.v4 y /etc/iptables/rules.v6, que puedes editar a mano si lo prefieres.
Con iptables-services (CentOS, RHEL, AlmaLinux)
En sistemas derivados de Red Hat, instala iptables-services, desactiva firewalld si está activo y guarda tus reglas:
- systemctl stop firewalld && systemctl disable firewalld
- systemctl enable iptables && systemctl start iptables
- service iptables save (escribe en /etc/sysconfig/iptables)
Mediante scripts de restauración
Otra vía: vuelca tus reglas con iptables-save > /etc/iptables.rules y restáuralas desde un script de arranque o una unidad de systemd con iptables-restore < /etc/iptables.rules. Este método te da control total y, como ventaja extra, facilita versionar el archivo de reglas con git.
Consejo: tras configurar la persistencia, reinicia el servidor y verifica con iptables -L -n que las reglas se cargaron. Una regla que no sobrevive a un reinicio es, a efectos prácticos, una regla que no existe.
Buenas prácticas y errores comunes al gestionar iptables
Un firewall en producción exige disciplina. Y también humildad: casi todos hemos metido la pata alguna vez. Estos son los errores que más se repiten y cómo evitarlos:
- Bloquearte a ti mismo: antes de aplicar una política por defecto DROP, añade siempre una regla que permita tu conexión SSH actual: iptables -A INPUT -p tcp –dport 22 -m state –state ESTABLISHED,NEW -s TU_IP -j ACCEPT.
- No probar antes de comprometer: usa iptables-apply en lugar de un script directo; revierte los cambios automáticamente si pierdes la conexión.
- Olvidar IPv6: bloquear una IP en ip4tables no afecta a su equivalente IPv6. Gestiona ip6tables en paralelo o desactiva IPv6 si no lo usas.
- No documentar las reglas: añade comentarios con el flag -m comment –comment «motivo» y mantén un archivo de reglas versionado. Tu yo del futuro lo agradecerá.
- Acumular reglas obsoletas: revisa periódicamente con iptables -L -n -v qué reglas reciben tráfico y elimina las que ya no aplican.
- Depender solo del bloqueo manual: ante ataques repetitivos, combina iptables con fail2ban, que automatiza el bloqueo por patrones en los logs.
Y algo muy simple que evita disgustos: copia de seguridad antes de cada cambio importante. iptables-save > backup-$(date +%F).rules. Diez segundos que te ahorran más de un dolor de cabeza.
Conclusión: protege tu servidor Linux bloqueando IPs con iptables
Saber bloquear IPs con iptables es de las habilidades más rentables para quien administra servidores Linux: es gratuito, nativo del kernel y flexible hasta límites que quizá no imaginabas. En esta guía has visto cómo bloquear una IP concreta o un rango completo, cómo actuar sobre puertos específicos, cómo revertir reglas erróneas y cómo lograr que tu configuración sobreviva a los reinicios. El siguiente paso es convertir todo esto en rutina: vigila tus logs, mantén las reglas documentadas y respaldadas, y cuando el volumen de ataques lo justifique, añade herramientas automatizadas al bloqueo manual.
Un matiz final. Un firewall es solo una capa, no toda tu estrategia de seguridad; acompáñalo de actualizaciones al día, autenticación por claves SSH y copias de seguridad regulares. Y si algún día te enfrentas a reglas complejas que no terminan de cuajar, a un servidor bloqueado o a la necesidad de diseñar una política de filtrado sólida, en RedServicio (redservicio.net) encontrarás guías detalladas y soporte profesional para mantener tu infraestructura Linux protegida.

