免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1059 | 回复: 0
打印 上一主题 下一主题

iptables [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-15 21:58 |只看该作者 |倒序浏览
#!/usr/bin/perl
use Date::Manip qw(UnixDate);
use Time::HiRes qw(gettimeofday);
use POSIX qw(strftime);
$log = "/var/log/iptables/iptables.log";
$undenytime = 300;
$exiretime = 600;
$finelogtime = 600;
sub add_ip {
@array = `tail -n 2000 /var/log/secure|grep "Failed"|grep "ffff:"`;
foreach (@array){
        if(/^(\w+\s+\d{1,2}\s+\d{2}:\d{2}:\d{2}).*::ffff:(.*)port/){
                print  "$1 $2\n";
                $timeold = UnixDate("$1","%s") - 14*3600;
                chomp ( $ip = $2);
                 $time = time;
                 $timenow =  strftime ("%Y-%m-%d %H:%M:%S",localtime($time)); #strftime( "%Y-%m-%d %H:%M:%S",localtime(time))
                ($timenew,$temenewsec)= gettimeofday;
                if ($time - $timeold
sub refresh_ip {
#       print "refresh_ip\n";
foreach $ipnew (keys %badlist){
        foreach $misec (keys %{$badlist{$ipnew}}){
                if ( time - $misec > $exiretime  ){
                        delete $badlist{$ipnew}{$misec};
#                       print "$badlist{$ipnew}{$misec}\n";
                                        }
                $num = keys %{$badlist{$ipnew}};
                if ( $num == 0 ){
#                       print "delete $badlist{$ipnew}\n";
                        delete $badlist{$ipnew};
                                }
                }}}
sub check_bad_ip {
#       print "check_bad_ip\n";
        foreach $ipnew (keys %badlist){
                $num = keys (%{$badlist{$ipnew}});
                if ( $num > 0 ) {
                        print "check_bad_ip $ipnew -- $num\n";
                        deny_bad_ip($ipnew);
                        delete $badlist{$ipnew};
                                }
                                }}
sub deny_bad_ip{
        local $ip;
        $ip = $_[0];
        chomp $ip;
#       print "deny_bad_ip() $ip\n";
        foreach ( keys %deny_ip ){
                return if (/^$ip$/)
                }
#               print "if ( $ip =~ /\./){\n";
         if ( $ip =~ /\./){
        $cmd = "iptables -A INPUT -p tcp -s $ip -j REJECT --reject-with tcp-reset";
        system ( $cmd );
#       print "$cmd\n";
        $deny_ip{$ip} = time;
        $time =  strftime ("%Y-%m-%d %H:%M:%S",localtime(time));
        open(LOG,">>$log") or die "$!";
        print LOG "$time $ip deny login with ssh $undenytime \n";
        close(LOG);
        }}
sub undeny_bad_ip {
        local $time;
        local $ip;
#       print "undeny_bad_ip\n";
        foreach $ip ( keys %deny_ip){
                if (time - $deny_ip{$ip} > $undenytime){
                        delete $deny_ip{$ip};
                        $time =  strftime ("%Y-%m-%d %H:%M:%S",localtime(time));
                        open(LOG,">>$log") or die "$!";
                        print LOG "$time $ip Undeny login with ssh $undenytime \n";
                        close(LOG);
                        chomp $ip;
                        $ipline = `iptables -L -n --line-number |grep $ip `;
#                       print "$ipline\n";
                        $ipline =~ /^(.*)\s+REJECT/ ;
                        $iplin = $1;
#                       print "$iplin = iptables -L -n --line-number |grep $ip\n";
                        chomp $iplin;
                        $cmd = "iptables -D INPUT $iplin ";
                #       print "iptables -D INPUT $iplin\n";
                        system( $cmd );
                }}}
sub init_iptables {
$cmd1 = "iptables -F  > /dev/null 2>&1";
$cmd2 = "iptables -X  > /dev/null 2>&1";
$cmd3 = "iptables -N  > /dev/null 2>&1";
system ($cmd1);
system ($cmd2);
system ($cmd3);
}
init_iptables ();
while (1){
#       init_iptables ();
        add_ip ();
        refresh_ip ();
        check_bad_ip ();
        deny_bad_ip ();
        undeny_bad_ip();
#print "sleep 60 now \n";
sleep 60;
}


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/5591/showart_2122312.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP