Compter le nombre de connections par IP
Aujourd’hui au boulot, j’ai été confronté à un petit problème : sur un serveur victime d’une attaque DDoS (visiblement), je voulais savoir quelles IP ouvraient le plus de connections. Ne trouvant rien de bien intéressant dans les commandes Unix, j’ai écris un petit script en Perl.
Il se charge de récupérer la sortie de netstat (la commande est à adapter à votre besoin) et compte le nombre de lignes identiques (donc d’IP), qu’il se charge ensuite de trier par ordre décroissant et d’afficher.
Voici le script en question :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #!/usr/bin/perl use strict; use warnings; my %addrs = (); my @netstatOut = split( /\n/, `netstat -taupen | grep SYN | tr -s " " | cut -d" " -f 5 | cut -d: -f1` ); for (@netstatOut) { chomp $_; $addrs{$_} += 1; } for my $key ( sort {$addrs{$b} <=> $addrs{$a}} keys %addrs ) { print $addrs{$key}."\t$key\n"; } |
Le script retourne alors son résultat sous la forme :
nbConnection IP1 nbConnection IP2 ...
Il ne vous reste plus qu’à blacklister les IP les plus actives avec la commande
iptables -I INPUT -s IP -j DROP


N’y a t’il pas moyen que la commande fonctionne pour un utilisateur simple sur Ubuntu 10.04 et Debain 5.05 j’ai une erreur comme quoi je dois être root?
Si effectivement, l’option -p de netstat nécessite d’être root et n’est pas nécessaire pour le script, tu peux l’enlever.
Ce qui donne :
ligne 7 du script.
bonjour,
Pourrais tu le faire en php ?
Car mon idées serrai m’en servir pour compter / limité le nombre de connexion par ip.
merci