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 :
#!/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