上一篇文章讲了屏蔽ssh恶意扫描ip的脚本,主要里利用shell和perl-oneline代码,后来又写了一个纯perl版本的,一并发上了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
#!/usr/bin/env perl my $LIMIT=30; my $log="/var/log/secure"; my $LOGFILE="/data/block_ip.log"; my $TIME=`date '+%b %e %H'`; chomp $TIME; my $BLOCK_IP; my %hash; open $FD,'<',$log)||die("Can not open the file!$!n"); while(){ chomp; if ( /$TIME/ and /Failed password/ ) { my @line=split; my $ip=$line[-4]; $hash{$ip}++; } } close $FD; for(keys %hash) { if ($hash{$_} > $LIMIT) { my $IP=$_; $ips= `iptables-save`; $mo= qr(/INPUT/ and /DROP/ and /$IP/); unless ($ips=~$mo) { `iptables -I INPUT -s $IP -j DROP`; my $NOW=`date '+%Y-%m-%d %H:%M'`; chomp $NOW; `echo -e "$NOW : $IP" >>$LOGFILE`; } } } |