Comment répertorier les adresses IP bloquées par iptables?

16

Pour empêcher les attaques par force brute contre ssh, j'ai ajouté quelques règles iptables (ci-dessous). La question est: comment puis-je répertorier les adresses IP bloquées?

(1)
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 8 --rttl --name SSH -j DROP
Eddie
la source
1
iptables -L INPUT -v -naffiche tous les IP bloqués
dynamique

Réponses:

16

Une option serait d'enregistrer n'importe lequel de vos paquets perdus avec une règle comme:

iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 8 --rttl -j LOG --log-prefix "FW_DROPPED: "

Insérez-le juste avant la DROPrègle. Ensuite, vous pouvez grep le fichier syslog pour quoi que ce soit avec "FW_DROPPED" en elle et la liste des adresses IP sera là. Les entrées du fichier journal ressemblent à ceci:

Jun  3 08:05:57 some-machine kernel: [15852451.420557] FW_DROPPED: IN=eth0 OUT= MAC=00:50:ba:4a:d9:e3:00:12:17:3a:e3:64:08:00 SRC=228.23.45.189 DST=192.168.1.1 LEN=48 TOS=0x00 PREC=0x00 TTL=106 ID=10941 PROTO=TCP SPT=58212 DPT=22 WINDOW=65535 RES=0x00 SYN URGP=0

Donc, couper ce qui suit "SRC =" vous montrera les adresses IP supprimées. Triez cela, en éliminant les doublons, et vous aurez votre liste.

J'ai trouvé que le Tutoriel Iptables est la documentation la plus utile pour iptables / netfilter.

yukondude
la source
Oui, c'est la façon de procéder.
Brent
Cela vous obligerait à dupliquer vos règles car vous ne vous connectez pas et déposez la même règle.
David Pashley
3
Ce serait encore mieux s'il crée une chaîne d'utilisateurs où il se connecte et supprime les paquets incriminés. Ce faisant, la duplication inutile est supprimée. Cela peut être fait comme ceci: iptables -N attaques; iptables -A INPUT -i eth0 -p tcp --dport 22 -m état --state NEW -m récent --update --secondes 60 --hitcount 8 --rttl --name SSH -j attaques; iptables -A attaques -j LOG --log-prefix "FW_DROPPED:"; iptables -A attaques -j DROP
Cristian Ciupitu
1
D'accord. Les tables / chaînes sont le chemin à parcourir; tout l'intérêt d'iptables, vraiment. Je crée des tableaux séparés pour les inondations acceptées, silencieusement rejetées, rejetées de manière audible, rejetées, suspectées, illégales, suspectées, les analyses suspectées, les types inconnus et le trafic surveillé. Mes FW sont basés sur cet ancien script (avertissement: auto-promotion): code.google.com/p/klondike-firewall/source/browse/trunk/…
yukondude
1
Le module ipt_recent référencé par ipozgaj et David Pashley est un ajout assez astucieux, bien qu'il ne puisse pas fournir la même raison précise qu'une adresse IP particulière a été supprimée (comme vous pouvez le faire avec différents paramètres --log-prefix) ou garder une trace d'un longue histoire d'attaques avec horodatage. Certainement une bonne idée d'utiliser les deux techniques de concert.
yukondude le
5

Vous pouvez trouver des détails sous / proc / net / ipt_recent / SSH.

Cet article contient plus d'informations.

David Pashley
la source
Cet article ne semble plus exister.
Dan Metheus
4

Regarder

/proc/net/ipt_recent/YOURNAME

où YOURNAME est le nom que vous avez utilisé avec l'option --name dans votre règle iptables.

ipozgaj
la source
Sur certaines distributions (par exemple Debian), le chemin valide est:/proc/net/xt_recent/[list-name]
itachi
3

Voici une simple doublure:

$ iptables -L -n --line
giorgio79
la source
1

Ce que je fais, par exemple pour l'usurpation d'adresse d'entrée, c'est de définir la chaîne SPOOF_REJECT:

iptables -N SPOOF_REJECT
iptables -A SPOOF_REJECT -j LOG --log-prefix "Input spoof detected: "
iptables -A SPOOF_REJECT -j REJECT

puis d'envoyer des paquets à cette chaîne s'ils sont usurpés:

iptables -A INPUT -i $EXT_DEV1 -s $INT_NET -j SPOOF_REJECT
iptables -A INPUT -i $EXT_DEV2 -s $INT_NET -j SPOOF_REJECT

Vous pouvez faire quelque chose comme ça pour chaque catégorie de paquets que vous supprimez ou rejetez pour obtenir une ligne dans le syslog à rechercher, puis périodiquement grep, couper, trier, pour obtenir uniquement les adresses IP de ces lignes de journal.

L'avantage d'utiliser des chaînes individuelles pour chaque catégorie est que votre configuration devient plus simple et qu'il est plus facile de lire votre iptablesconfiguration. Au fur et à mesure que vous ajoutez de plus en plus de règles, vous serez heureux d'avoir utilisé des chaînes individuelles pour différentes actions spécifiques.

Eddie
la source
Comment détectez-vous exactement les paquets usurpés? D'après mon expérience, cela est impossible dans le cas général.
MarkR
Ce qui précède n'est qu'un exemple. Ici, je recherche tout paquet arrivant à la chaîne INPUT qui provient d'un périphérique externe mais prétend provenir d'une adresse IP interne à mon réseau. Dans ce cas, je peux absolument détecter l'usurpation d'adresse, mais oui, dans le cas général, les choses sont différentes.
Eddie
1

"La question est: comment lister les adresses IP bloquées?"

Créez une chaîne bannie:

iptables -N BANNED
iptables -F BANNED

Créez une chaîne de journalisation:

iptables -N BANNEDLOG
iptables -F BANNEDLOG
iptables -A BANNEDLOG -j LOG --log-prefix "BANNED:" --log-level 6
iptables -A BANNEDLOG -j DROP

Ajouter un saut à la chaîne interdite dans la chaîne INPUT avant la plupart des autres règles

...
iptables -A INPUT -j BANNED
...

Ajoutez maintenant des adresses IP à la chaîne interdite:

flock -w 5 /var/lock/iptables -c 'iptables -A BANNED -s 140.130.20.202/32 -i eth0 -m comment --comment "2012-03-19 23:49:33 accesslog" -j BANNEDLOG'
etc...

Vous pouvez également l'utiliser comme une base de données avec les options de commentaire, afin que vous puissiez savoir quand et pourquoi etc. flock est important lorsque iptables est fréquemment mis à jour par de nombreux processus - il semble que iptables n'a pas de verrouillage intégré.

Pour afficher les adresses et les règles interdites dans la chaîne interdite:

iptables -S BANNED

Pour afficher les adresses IP uniques triées:

iptables -S BANNED | egrep -o '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | sort -u

J'ai un certain nombre de démons en cours d'exécution sur mes serveurs vérifiant les fichiers syslog et les blogs, donc si quelque chose de méchant est tenté par quelqu'un, leur adresse est automatiquement interdite pendant quelques jours, selon le type et la gravité et le nombre d'attaques précédentes. Les informations sont enregistrées dans une base de données mysql et expirent périodiquement. Les adresses sont également distribuées à toutes les autres machines du cluster via la réplication mysql afin qu'elles soient également protégées et restent synchronisées. Mon logiciel recherche également le propriétaire du réseau et envoie une plainte au FAI.

Après 10 ans de travail, j'espère le mettre à la disposition de tous pour bientôt. J'ai actuellement environ 1,5 million d'histoires d'adresses IP et des centaines de milliers d'attaques par courrier et SSH signalées, aidant à nettoyer le net. Si plus l'utilisaient, j'espère que cela aurait plus d'impact.

Andy Lee Robinson
la source