LinuxParty
Hoy les mostraré una forma sencilla pero efectiva de bloquear automáticamente IP sospechosas usando un pequeño script y herramientas como iptables y Fail2Ban . Estas herramientas son potentes, ligeras y pueden ayudar a proteger su servidor Linux de ataques de fuerza bruta, bots o cualquier tráfico malicioso.
Esta guía es ideal para principiantes y es excelente para administradores de sistemas, estudiantes o cualquier persona que ejecute un VPS, un servidor web o incluso un servidor Linux doméstico.
¿Qué son iptables y Fail2Ban?
Antes de profundizar en la configuración, entendamos las dos herramientas clave que estamos usando: iptables
y Fail2Ban
.
iptables
iptables
es una utilidad de firewall de línea de comandos integrada en la mayoría de las distribuciones de Linux , que funciona aplicando un conjunto de reglas (llamadas cadenas de políticas ) para controlar el tráfico de la red.
Estas reglas pueden filtrar paquetes según la dirección IP, el número de puerto o el protocolo. Se puede considerar iptables
como un guardián que vigila la puerta de su servidor, permitiendo solo la entrada del tráfico confiable y bloqueando el resto.
Fail2Ban
Por otro lado, Fail2Ban
es una herramienta de monitoreo de registros que detecta y responde automáticamente al comportamiento malicioso. Supervisa los archivos de registro en tiempo real y busca patrones sospechosos, como múltiples intentos fallidos de inicio de sesión .
Cuando detecta algo sospechoso, como un ataque de fuerza bruta a tu SSH, interviene y bloquea la IP responsable añadiendo una regla de bloqueo en iptables. Puedes configurar el número de fallos permitidos, la duración del bloqueo e incluso personalizar la respuesta.
Utilizados en conjunto, iptables
ofrecen Fail2Ban
una forma sencilla pero eficaz de proteger su servidor. Si bien iptables
actúan como el núcleo del firewall, Fail2Ban
aportan inteligencia al detectar amenazas y actualizar las reglas del firewall sobre la marcha.
¿Por qué utilizar un script de bloqueo de IP personalizado?
Si bien Fail2Ban hace un excelente trabajo por sí solo al prohibir automáticamente direcciones IP sospechosas según patrones de registro predefinidos, tener un script bloqueador de IP personalizado agrega una capa adicional de flexibilidad y control.
Un script personalizado le permite agregar o eliminar rápidamente direcciones IP de su lista de bloqueo sin modificar directamente las complejas reglas del firewall. También le permite crear lógica basada en registros o activadores personalizados que Fail2Ban podría no estar monitoreando.
Por ejemplo, si tiene una aplicación web que escribe sus propios registros o una herramienta de monitoreo que detecta patrones específicos, puede vincular fácilmente esas alertas a su script para su bloqueo automático.
Además, este script se puede integrar en otras tareas de automatización o herramientas de gestión de servidores , lo que lo hace especialmente útil en entornos más grandes o para administradores de sistemas que gestionan varios servidores.
Paso 1: Instalación de iptables y Fail2Ban
Antes de comenzar la configuración, asegurémonos de que tanto [nombre del archivo] iptables
como [nombre Fail2Ban
del archivo] estén instalados en su sistema. Estas herramientas están disponibles en los repositorios de paquetes predeterminados de la mayoría de las distribuciones principales de Linux, por lo que la instalación es sencilla.
Si está utilizando un sistema basado en Debian, como Ubuntu o el propio Debian , comience por actualizar su lista de paquetes para asegurarse de que todo esté actualizado.
sudo apt update
Una vez completada la actualización, instale ambos iptables
ejecutando fail2ban
:
sudo apt install iptables fail2ban
Para los sistemas basados en RPM, puede instalar ambas herramientas utilizando el administrador de paquetes yum.
sudo yum install iptables-services fail2ban
Una vez completada la instalación, estará listo para configurar su firewall y configurar la protección automática usando Fail2Ban
.
Paso 2: Creación de un script bloqueador de IP simple
Ahora que ambos iptables
están Fail2Ban
instalados, vamos a crear un script bash simple ( block-ip.sh
) que le permita bloquear manualmente cualquier dirección IP usando iptables.
sudo nano /usr/local/bin/block-ip.sh
Dentro de este archivo, pegue el siguiente código:
#!/bin/bash if [ -z "$1" ]; then echo "Uso: $0 " exit 1 fi IP=$1 #Comprobar si la IP ya está bloqueada if iptables -L INPUT -v -n | grep -q "$IP"; then echo "La IP $IP ya está bloqueada." else iptables -A INPUT -s $IP -j DROP echo "La IP $IP ha sido bloqueada." fi
Este script primero comprueba si se ha proporcionado una dirección IP como argumento. De lo contrario, imprime un mensaje de uso y finaliza. Si se proporciona una IP, comprueba si ya está bloqueada mediante iptables. Si no está en las reglas del firewall, añade una nueva regla para bloquear todo el tráfico de esa dirección IP y confirma la acción.
Una vez que el contenido del script esté listo, pulse CTRL+O
para guardar y CTRL+X
salir del editor. Ahora, configure el script como ejecutable para que pueda ejecutarse directamente desde la línea de comandos:
sudo chmod +x /usr/local/bin/block-ip.sh
Con el script listo, probémoslo bloqueando una dirección IP de ejemplo. Por ejemplo, para bloquear la IP 192.168.1.100
, ejecute:
sudo /usr/local/bin/block-ip.sh 192.168.1.100
Si todo funciona correctamente, deberías ver un mensaje que diga:
La dirección IP 192.168.1.100 ha sido bloqueada.
Para confirmar que la IP fue efectivamente bloqueada, puedes ver las iptables
reglas actuales ejecutando:
sudo iptables -L -n -v
Este script es muy útil cuando quieres bloquear IP manualmente o desde registros personalizados.
Paso 3: Configuración de Fail2Ban con iptables
Con iptables
nuestro script personalizado listo y en funcionamiento, es hora de configurarlo Fail2Ban
para que pueda detectar y bloquear automáticamente direcciones IP maliciosas que intenten comprometer servicios como SSH , Apache o cualquier otra aplicación con conexión a Internet en su servidor.
Fail2Ban utiliza un concepto llamado " jaulas ", que son simplemente bloques de configuración diseñados para monitorear servicios específicos. Cada jaula indica a Fail2Ban qué registros supervisar, qué patrones buscar y cómo responder ante un ataque.
Para empezar, necesitamos editar o crear el jail.local
archivo, que es donde defines tus configuraciones personalizadas sin afectar la configuración predeterminada.
sudo nano /etc/fail2ban/jail.local
Pegue el siguiente bloque en el archivo:
[sshd] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 5 bantime = 3600 findtime = 600
Analicemos qué significa cada una de estas opciones:
enabled = true
: Esto activa la cárcel para que monitoree activamente SSH.port = ssh
: Esto le dice a Fail2Ban qué puerto monitorear.filter = sshd
: Esto especifica el filtro utilizado para detectar fallas de inicio de sesión.logpath = /var/log/auth.log
: Este es el archivo de registro que Fail2Ban escaneará en busca de intentos fallidos de inicio de sesión de SSH.maxretry = 5
: Si una IP no inicia sesión 5 veces dentro del período de tiempo, será bloqueada.bantime = 3600
: Esto establece la duración de la prohibición en 3600 segundos (1 hora).findtime = 600
: Esto define la ventana de tiempo (en segundos) durante la cual se cuentan los intentos de maxretry, en este caso, 10 minutos.
Si está ejecutando un sistema basado en CentOS o RHEL, deberá cambiar la ruta de registro para que coincida con el lugar donde se almacenan los registros SSH.
/var/log/secure
Después de guardar el archivo de configuración de la cárcel, reinicie el servicio Fail2Ban para aplicar los cambios:
sudo systemctl restart fail2ban
Para verificar que su cárcel esté funcionando correctamente, utilice el siguiente comando para comprobar el estado de la cárcel SSH:
sudo fail2ban-client status sshd
Esto le mostrará cuántas IP han sido baneadas, cuántos intentos totales se han detectado y si la cárcel está activa.
Si deseas ver qué IP están bloqueadas actualmente iptables
(incluidas aquellas prohibidas por Fail2Ban), ejecuta:
sudo iptables -L -n
Por último, si desea desbloquear una dirección IP específica que fue bloqueada automáticamente por Fail2Ban, puede eliminarla manualmente utilizando el siguiente comando:
sudo fail2ban-client set sshd unbanip 192.168.1.100
Paso 4: Combine su script con Fail2Ban (opcional)
De forma predeterminada, Fail2Ban utiliza sus propias acciones internas para bloquear direcciones IP mediante iptables
. Sin embargo, si prefiere que Fail2Ban ejecute su script de bloqueo de IP personalizado, quizás porque ha añadido lógica o registro personalizados, puede configurar una acción personalizada de Fail2Ban .
Para hacer esto, primero deberá crear un nuevo archivo de definición de acción.
sudo nano /etc/fail2ban/action.d/customblock.conf
En este archivo, pegue la siguiente configuración:
[Definition] actionstart = actionstop = actioncheck = actionban = /usr/local/bin/block-ip.sh actionunban = iptables -D INPUT -s -j DROP [Init]
Esta configuración le indica a Fail2Ban que use su script personalizado siempre que necesite bloquear una dirección IP. La actionban
línea ejecuta su script y le pasa la dirección IP infractora. Para desbloquear, elimina directamente la regla de bloqueo de iptables.
A continuación, debes indicarle a Fail2Ban que utilice esta acción personalizada en la configuración de tu cárcel.
sudo nano /etc/fail2ban/jail.local
Debajo de tu [sshd]
cárcel o de cualquier otra cárcel que hayas configurado, actualiza la línea de acción para que apunte a tu acción personalizada:
[sshd] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 5 bantime = 3600 findtime = 600 action = customblock
Después de realizar estos cambios, reinicie el servicio Fail2Ban para aplicarlos:
sudo systemctl restart fail2ban
Ahora, cada vez que Fail2Ban detecte una IP sospechosa, llamará a su script para manejar el bloqueo, lo que le brindará la flexibilidad de registrar, alertar o realizar acciones adicionales si es necesario.
Guardar reglas de iptables
Una cosa importante a tener en cuenta es que iptables
las reglas no son persistentes de forma predeterminada, lo que significa que cualquier regla agregada, ya sea manualmente o por Fail2Ban, se perderá después de reiniciar el servidor a menos que las guarde explícitamente.
En sistemas Debian o Ubuntu , puedes hacer que las reglas del firewall sean persistentes instalando el iptables-persistent
paquete:
sudo apt install iptables-persistent
Una vez instalado, guarde sus reglas actuales con:
sudo netfilter-persistent save
En CentOS o RHEL , el proceso es ligeramente diferente, puede guardar sus reglas usando el siguiente comando de servicio:
sudo service iptables save
Alternativamente, y para ambos sistemas, puede guardar manualmente las reglas en el archivo de configuración adecuado de la siguiente manera:
sudo iptables-save > /etc/sysconfig/iptables
Al guardar sus reglas, se asegura de que las IP bloqueadas manualmente o mediante Fail2Ban permanezcan bloqueadas incluso después de que se reinicie el sistema.
Proteger su servidor Linux no tiene por qué ser complicado. Al combinar la potencia de iptables
con la inteligencia de Fail2Ban
, puede crear una defensa sólida y flexible contra ataques de fuerza bruta, intentos de inicio de sesión no deseados y actividad IP sospechosa.
Si bien Fail2Ban
automatiza el proceso de detección y prohibición, un script bloqueador de IP personalizado le brinda control manual cuando más lo necesita.

-
Internet
- Guerra de Titanes.
- Recuperando emails con fetchmail
- Las palabras que más odian los internautas
- Virtual Hosting con PureFTPd y MySQL
- Las direcciones de Internet podrían agotarse en 3 años.
- Mi hija está embarazada, la culpa la tiene internet
- TradeDoubler Adquiere 'The Search Works' y 'The Technology Works'
- Blogueros del Mundo, Sindicato de Blogueros.
- Un simple script para seguir Web sites.
- Análisis y Estadísticas con AWStats
- Fin de ciclo de vida para BIND 8.x
- Los 100 dominios más antiguos de Internet