Quelqu'un m'a dit que c'était possible, mais je ne trouve rien sur google ou sur les pages de manuel.
J'ai besoin d'interdire les adresses IP pendant un certain temps, puis je les ai automatiquement supprimées.
Quelqu'un m'a dit que c'était possible, mais je ne trouve rien sur google ou sur les pages de manuel.
J'ai besoin d'interdire les adresses IP pendant un certain temps, puis je les ai automatiquement supprimées.
Réponses:
Si vous voulez que iptables supprime complètement la règle par lui-même, vous ne pourrez pas le faire, à ma connaissance. Quel est le but de cela? Si vous avez besoin d'une sorte d'interdiction temporaire automatique, la solution standard est fail2ban .
Vous pouvez également utiliser un travail cron pour supprimer la règle que vous ajoutez, ou mieux, si vous voulez 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. Cela avec son --seconds
option peut être utile, selon vos besoins réels. man iptables
pour plus d'informations.
/bin/sh
par défaut. Mais ce ne sera probablement pas un problème dans ce cas.
Mettez un commentaire avec un horodatage (probablement secondes depuis l'époque) dans les règles. Balayez régulièrement 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 des règles iptables au lieu de 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.
iptables -L FORWARD --line-numbers | sort -r | awk 'substr($8,1,4) == "exp@" && substr($8,5) < systime() { systems("iptables -D FORWARD " $1) }'
où les règles sont faites comme: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 a une méthode pour ajouter automatiquement des adresses IP à une liste si les conditions définies par l'utilisateur sont remplies. J'utilise les éléments suivants 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 de 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, tel que 4 en 5 minutes, et en cas d'échec, puis les mettre sur liste noire pour une période plus longue, comme 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 "black", et 2 listes; "timer" et "blacklist".
Brièvement; la dernière chaîne montrée ci-dessus est la "porte" dans la chaîne ssh.
L'option "--reap" indique au noyau de rechercher dans la liste et de purger tous les éléments 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 pour la lisibilité et sont facultatifs dans votre script shell.
IPTables a une fonctionnalité spécialement conçue pour cela: IP Set. Vous faites la règle une fois et elle persiste comme d'habitude mais elle vérifie dans un ensemble d'ips (ou ports) 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
planifier la suppression.
Vous pouvez utiliser fail2ban pour interdire les adresses IP et configurer la durée pendant laquelle une adresse sera interdite.
Comme quelqu'un l'a déjà dit: vous devez utiliser l'ipset pour cette fonctionnalité.
l'ipset peut ajouter une adresse IP avec une valeur de temporisation. Une fois le délai expiré, l'enregistrement serait automatiquement supprimé de l'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
Il s'agit de la meilleure façon de contrôler ce comportement.
Selon ce que vous voulez accomplir exactement, les modules netfilter récent ou horaire peuvent être utilisés pour accomplir cela.
Les deux sont documentés dans la page de manuel iptables .