GNU/Linux >> Tutoriels Linux >  >> Linux

Comment faire expirer les règles iptables ?

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.


Linux
  1. Comment afficher et supprimer les règles Iptables - Lister et vider

  2. CentOS / RHEL :Comment faire persister les règles iptable à travers les redémarrages

  3. CentOS / RHEL :Comment ajouter des règles iptable

  4. Comment puis-je supprimer des règles spécifiques d'iptables ?

  5. Comment faire en sorte que ssh se connecte avec le bon utilisateur ?

Comment utiliser Port Knocking sur Ubuntu pour masquer le port SSH

Comment configurer le pare-feu iptables sous Linux

Procédure :configuration de base des fichiers IPTables

Comment verrouiller votre serveur CentOS avec IPTables

Comment sécuriser un pare-feu Linux avec les règles IPTables

CentOS / RHEL 6 :Comment enregistrer les règles iptables