Solution 1 :
Si vous voulez dire qu'iptables supprime complètement la règle par elle-même, vous ne pourrez pas le faire, pour autant que je sache. Quel est le but de ceci ? Si vous avez besoin d'une sorte d'interdiction temporaire automatique, la solution standard est fail2ban.
Vous pouvez également utiliser une tâche cron pour supprimer la règle que vous ajoutez ou, mieux si vous souhaitez le faire de manière interactive, un at
travail :
iptables -I INPUT -s 192.168.1.100 -j DROP
echo "iptables -D INPUT -s 192.168.1.100 -j DROP" | at @10pm
Jetez également un œil au recent
module d'iptables. Ceci avec son --seconds
option peut être utile, selon vos besoins réels. man iptables
pour plus d'informations.
Solution 2 :
Mettez un commentaire avec un horodatage (probablement secondes depuis l'époque) dans les règles. Balayez périodiquement les règles expirées.
Notez que le noyau Linux le plus récent prend en charge le chargement dynamique des adresses IP dans un cache consulté par les règles iptable au lieu des règles iptables directes.
Exemple :
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"; }'
Vous pouvez bien sûr iptables -D INPUT $1
au lieu d'imprimer la commande.
Solution 3 :
iptables a une méthode pour ajouter automatiquement des adresses IP à une liste si les conditions définies par l'utilisateur sont remplies. J'utilise ce qui suit pour éviter les tentatives de piratage automatisées sur mon port ssh :
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --name ssh --seconds 60 --reap -j DROP
Cela permet de limiter les tentatives automatisées d'accès au serveur en limitant les tentatives de connexion depuis la même adresse IP à une toutes les 60 secondes.
Si vous souhaitez autoriser un nombre défini de tentatives dans un laps de temps, par exemple 4 en 5 minutes, et en cas d'échec, puis les mettre sur liste noire pour une période plus longue, par exemple 24 heures, vous pouvez faire quelque chose comme :
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
Dans ce qui précède, nous créons 2 chaînes ; "ssh" et "noir", et 2 listes ; "minuteur" et "liste noire".
Brièvement; la dernière chaîne montrée ci-dessus est la "porte" dans la chaîne ssh.
- La règle 1 de la chaîne ssh vérifie si l'adresse IP source figure dans la liste "liste noire". Si c'est le cas, la connexion est interrompue et la minuterie de la liste noire de 24 heures est redémarrée. Si la règle 1 est fausse, alors on passe à la règle 2.
- La règle 2 de la chaîne ssh vérifie si l'adresse IP source a effectué plus de 4 tentatives de connexion en 5 minutes. Si c'est le cas, il envoie le paquet à la chaîne « black » où il est ajouté à la liste « blacklist ». La chaîne "noire" supprime alors la connexion, et nous avons terminé.
- La règle 3 de la chaîne "ssh" n'est atteinte que si les règles 1 et 2 sont fausses. Si tel est le cas, le paquet est ACCEPTÉ et l'adresse IP source est ajoutée à la liste "timer" afin que nous puissions surveiller la fréquence des tentatives de connexion.
L'option "--reap" indique au noyau de rechercher dans la liste et de purger tous les éléments qui sont plus anciens que la limite de temps définie ; 5 minutes pour la liste "timer", et 24 heures pour la liste "blacklist".
remarque :les espaces supplémentaires sont destinés à la lisibilité et sont facultatifs dans votre script shell.
Solution 4 :
IPTables a une fonctionnalité spécialement conçue pour cela :IP Set. Vous créez la règle une fois et elle persiste comme d'habitude, mais elle enregistre un ensemble d'ips (ou de ports) pour les correspondances. Ce qui est cool, c'est que cet ensemble peut être mis à jour de manière dynamique et efficace sans perturber le reste du pare-feu.
Le site principal, exemples.
Donc, pour l'utiliser, vous devrez toujours utiliser at
ou cron
pour programmer la suppression.
Solution 5 :
Vous pouvez utiliser fail2ban pour interdire les adresses IP et configurer la durée pendant laquelle une adresse sera interdite.