Alguien me dijo que esto es posible, pero no puedo encontrar nada en google o en páginas man.
Necesito prohibir las direcciones IP durante un cierto período de tiempo y, luego, dejar de bloquearlas automáticamente.
Alguien me dijo que esto es posible, pero no puedo encontrar nada en google o en páginas man.
Necesito prohibir las direcciones IP durante un cierto período de tiempo y, luego, dejar de bloquearlas automáticamente.
Respuestas:
Si quiere decir que iptables elimina completamente la regla por sí mismo, no puedo hacerlo, que yo sepa. ¿Cuál es el propósito de esto? Si necesita algún tipo de prohibición temporal automática, 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
opción puede ser de ayuda, dependiendo de sus necesidades reales. man iptables
para más información.
/bin/sh
por defecto. Pero eso probablemente no será un problema en este caso.
Ponga un comentario con una marca de tiempo (probablemente segundos desde la época) en las reglas. Periódicamente barrer las reglas caducadas.
Tenga en cuenta que el kernel de Linux más reciente es compatible con la carga dinámica de direcciones IP en un caché consultado por las reglas de iptable en lugar de las 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, puede en iptables -D INPUT $1
lugar de imprimir el comando.
iptables -L FORWARD --line-numbers | sort -r | awk 'substr($8,1,4) == "exp@" && substr($8,5) < systime() { systems("iptables -D FORWARD " $1) }'
donde se hacen reglas como:iptables -A FORWARD -j DROP -m comment --comment "exp@EPOCH"
iptables -L FORWARD --line-numbers | tac | perl -walne 'system "iptables -D FORWARD $F[0]" if $F[-2] =~ /^expire=(\d+)$/ and $1<time()'
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 automático a 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, haga una lista negra durante 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" hacia la cadena ssh.
La opción "--reap" le dice al núcleo que busque en la lista y purgue cualquier elemento que sea anterior al 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.
IPTables tiene una función hecha expresamente para esto: IP Set. Establece la regla una vez y persiste como de costumbre, pero comprueba un conjunto de ips (o puertos) para encontrar coincidencias. Lo bueno es que este conjunto se puede actualizar de forma dinámica y eficiente sin molestar al resto del firewall.
El sitio web principal , ejemplos .
Entonces, para usarlo, aún tendría que usar at
o cron
programar la eliminación.
Puede usar fail2ban para prohibir las direcciones IP y configurar el tiempo durante el cual se prohibirá una dirección.
Como alguien ya dijo: debe usar ipset para esta función.
ipset puede agregar una dirección IP con valor de tiempo de espera. Cuando finaliza el tiempo de espera, el registro se eliminará automáticamente de ipset.
timeout
All set types supports the optional timeout parameter when creating a set and adding entries. The value of the timeout parameter for the create command means the default timeout value (in seconds) for new entries. If a set is created with timeout support, then the same timeout option can be used to specify non-default timeout values when adding entries. Zero timeout value means the entry is added permanent to the set. The timeout value of already added elements can be changed by readding the element using the -exist option. Example:
ipset create test hash:ip timeout 300
ipset add test 192.168.0.1 timeout 60
ipset -exist add test 192.168.0.1 timeout 600
http://ipset.netfilter.org/ipset.man.html
Esta es la forma preferible de controlar este comportamiento.
Dependiendo de qué es exactamente lo que desea lograr, ya sea el netfilter reciente o los módulos de tiempo podrían usarse para lograr esto.
Ambos están documentados en la página del manual de iptables .