Contenu connexe
Plus de azuma satoshi (19)
Hachiojipm 14 LT
- 10. use strict;
use warnings;
my $limit = 10;
my $expire = 600;
my $cnt = {};
my $addr;
while ( my $line = <STDIN> ) {
my @part = split /s/, $line;
my $stat = $part[8];
$addr = $part[0];
next unless $addr =~ /^d+?.d+?.d+?.d+$/;
next if $addr =~ /^127./;
next unless $stat =~ /^4/;
$cnt->{$addr}->{cnt} ||= 0;
if ( $cnt->{$addr}->{cnt} < $limit ) {
$cnt->{$addr}->{cnt} ++;
$cnt->{$addr}->{time} = time();
if ( $cnt->{$addr}->{cnt} >= $limit ) {
`iptables -A INPUT -s $addr -j DROP`;
}
}
for $addr ( keys %$cnt ) {
if ( time - $cnt->{$addr}->{time} >= $expire ) {
delete $cnt->{$addr};
`iptables -D INPUT -s $addr -j DROP`;
}
};
}