Univers Libre

Compter le nombre de connections par IP

Written on 18 June 2010, 00:00 EDT
Tags: sysadmin, sécurité.

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