Solución 1:
Si quiere que iptables elimine completamente la regla por sí mismo, no podrá hacerlo, que yo sepa. ¿Cuál es el propósito de esto? Si necesita algún tipo de baneo temporal automático, la solución estándar es fail2ban.
Alternativamente, puede usar un trabajo cron para eliminar la regla que está agregando o, mejor si desea hacerlo de forma interactiva, un at
trabajo:
iptables -I INPUT -s 192.168.1.100 -j DROP
echo "iptables -D INPUT -s 192.168.1.100 -j DROP" | at @10pm
También eche un vistazo al recent
módulo de iptables. Esto con su --seconds
La opción puede ser de ayuda, dependiendo de sus necesidades reales. man iptables
para más información.
Solución 2:
Ponga un comentario con una marca de tiempo (probablemente segundos desde la época) en las reglas. Realice un barrido periódico en busca de reglas caducadas.
Tenga en cuenta que el kernel de Linux más reciente tiene soporte para la carga dinámica de direcciones IP en un caché consultado por reglas de iptable en lugar de reglas de iptables directas.
Ejemplo:
iptables -A INPUT -s 192.168.200.100/32 -m comment --comment "expire=`date -d '+ 5 min' +%s`" -j DROP
iptables -L INPUT -n --line-numbers | tac | perl -ne 'next unless /(^\d+).*expire=(\d+)/; if ($2 < time) { print "iptables -D INPUT $1\n"; }'
Por supuesto que puedes iptables -D INPUT $1
en lugar de imprimir el comando.
Solución 3:
iptables tiene un método para agregar automáticamente direcciones IP a una lista si se cumplen las condiciones definidas por el usuario. Utilizo lo siguiente para ayudar a evitar intentos de pirateo automatizados en mi puerto ssh:
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --name ssh --seconds 60 --reap -j DROP
Esto ayuda a limitar los intentos automatizados de obtener acceso al servidor al limitar los intentos de conexión desde la misma dirección IP a uno cada 60 segundos.
Si desea permitir un número determinado de intentos en un período de tiempo, como 4 en 5 minutos, y en caso de falla, luego incluirlos en la lista negra por un período más largo, como 24 horas, puede hacer algo como:
iptables -X black
iptables -N black
iptables -A black -m recent --set --name blacklist -j DROP
iptables -X ssh
iptables -N ssh
iptables -I ssh 1 -m recent --update --name blacklist --reap --seconds 86400 -j DROP
iptables -I ssh 2 -m recent --update --name timer --reap --seconds 600 --hitcount 4 -j black
iptables -I ssh 3 -m recent --set --name timer -j ACCEPT
iptables -A INPUT -p TCP --dport ssh -m state --state NEW -j ssh
En lo anterior, creamos 2 cadenas; "ssh" y "black", y 2 listas; "temporizador" y "lista negra".
Brevemente; la última cadena que se muestra arriba es la "puerta de entrada" a la cadena ssh.
- La regla 1 en la cadena ssh verifica si la IP de origen está en la lista "lista negra". Si es así, se interrumpe la conexión y se reinicia el temporizador de la lista negra de 24 horas. Si la regla 1 es falsa, entonces vamos a la regla 2.
- La regla 2 en la cadena ssh verifica si la IP de origen ha realizado más de 4 intentos de conexión en 5 minutos. Si es así, envía el paquete a la cadena "negra" donde se agrega a la lista "lista negra". La cadena "negra" luego DROPs la conexión, y hemos terminado.
- La regla 3 en la cadena "ssh" solo se alcanza si las reglas 1 y 2 son falsas. Si es así, el paquete se ACEPTA y la IP de origen se agrega a la lista "temporizador" para que podamos monitorear la frecuencia de los intentos de conexión.
La opción "--reap" le dice al núcleo que busque en la lista y elimine cualquier elemento que sea más antiguo que el límite de tiempo establecido; 5 minutos para la lista "temporizador" y 24 horas para la lista "lista negra".
nota:los espacios adicionales son para facilitar la lectura y son opcionales en su script de shell.
Solución 4:
IPTables tiene una función hecha expresamente para esto:IP Set. Usted hace la regla una vez y persiste como de costumbre, pero verifica un conjunto de ips (o puertos) en busca de coincidencias. Lo bueno es que este conjunto se puede actualizar de manera dinámica y eficiente sin afectar al resto del firewall.
El sitio web principal, ejemplos.
Entonces, para usarlo, aún tendría que usar at
o cron
para programar la eliminación.
Solución 5:
Puede usar fail2ban para prohibir direcciones IP y configurar el período de tiempo durante el cual se prohibirá una dirección.