zoukankan      html  css  js  c++  java
  • 批量屏蔽符合条件的IP地址《目前仅测Centos 6 版本》

    使用办法:可以将下面的sh保存到一个单独的文件中,比如ipad.sh,然后再编辑获取IP地址列表中的那段。最终的结果是需要直接获取到IP地址,一行一个,可以有多个文件,一行一个,进行重定向到指定的IP文件中

    然后再对比iptables现在的IP,没有的再进行添加至iptables中。

    可接一个变量,不等于空就执行屏蔽地址段的操作

    #!/bin/bash
    #Filename:ipad.sh
    #Version: 0.1 2018-3-26 cs
     
    NOWTIME=`date "+%Y-%m-%d %H:%M:%S"`
    OLDIPFILELIST="/tmp/iplist"
    NEWIPFILELIST="/tmp/ipnewlist"
    LOGBANK="/var/log/ipbank"
     
    #printlog 函数说明
    #两个参数,一,是否打印日志,二,日志内容
    #一可选,01,0表示不打印日志内容出来,1表示打印日志内容出来
    LOGFILE_PATH="/var/log/ipbank"
    #LOGFILE_PATH="/var/log/mailcaojc-server"
    NOWTIME=`date "+%Y-%m-%d %H:%M:%S"`
    function printlog()
    {
            LOG_CONTENT="$NOWTIME $2"
            #echo $LOG_CONTENT
            if [ $1 -ne 0 ]; then
                    echo $LOG_CONTENT
                    echo $LOG_CONTENT>>$LOGFILE_PATH
            else
                    echo $LOG_CONTENT>>$LOGFILE_PATH
            fi
    }
     
    #检查上一条命令执行是否正常,不正常退出
    check_error_exit()
    {
            RUSELT=$?
            if [ ${RUSELT} -ne 0 ]; then
                    printlog 1 "#[ERROR] >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
                    printlog 1 "#[ERROR] 恭喜,光荣而伟大的报错了 : " $1
                    printlog 1 "#[ERROR] <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
                    exit 1
            fi
    }
     
    printlog 0 ">>>>>>>>>>>>>>>>>>>>START IPADD<<<<<<<<<<<<<<<<<<<<<<<<<"
     
    #检查ipTABLES现在屏蔽的IP地址
    printlog 0 "准备获取iptables..."
    IPOLDLIST=`iptables -L -n|egrep 'DROP'|awk '{print $4}'|sort|uniq>$OLDIPFILELIST`
    check_error_exit "获取现在iptables的IP失败,请检查iptables的命令是非正常!!!"
    printlog 0 "获取iptables成功!共:`echo ${IPOLDLIST}|wc -l`条记录"
     
     
    #此段为需要屏蔽然IP 地址列表
    printlog 0 "准备获取需要屏蔽那些IP地址..."
    ################################################
    #下面可以添加多个需要获取的IP,比如在其它的日志文件中也需要进行屏蔽掉也是可以的
    #最终截取IP进行重定向到>>$NEWIPFILELIST 这个文件中就可以了
    IPNEWLIST=`cat /usr/local/*/app/log/rulefilter.log|egrep '@qq.com.*aa@aa.com'|awk '{print $6}'|sed 's/,//g'|sort|uniq>$NEWIPFILELIST`
    IPNEWLISTA=`cat /usr/local/*/app/log/rulefilter.log|egrep '@163.*aa@aa.com'|awk '{print $6}'|sed 's/,//g'|sort|uniq>>$NEWIPFILELIST`
    ################################################
    printlog 0 "获取需要屏蔽的IP地址成功!!!共:`cat ${NEWIPFILELIST}|wc -l`条记录"
     
    printlog 0 "计算对比需要添加的ip..."
    #防止上面有重复的,再次进行排序,然后重写到ipnewlist2的文件中
    cat ${NEWIPFILELIST}|sort|uniq>/tmp/ipnewlist2
    #检查与当前已经屏蔽的IP差,然后进行屏蔽新的IP地址
    IPLIST=`diff ${OLDIPFILELIST} /tmp/ipnewlist2|egrep '> '|sed 's/> //g'`
    IPLISTNUM=`diff ${OLDIPFILELIST} /tmp/ipnewlist2|egrep '> '|sed 's/> //g'|wc -l`
     
    #echo $IPLISTNUM
    #exit 0
     
    #lengthiplis=`echo $IPLIST|wc -l`
    #echo $lengthiplis
    if [ ${IPLISTNUM} -eq 0 ]; then
        #echo "kong"
        echo "没有需要添加的IP"
        LOG_CONTENT="$NOWTIME 好吧,经过深刻的使用diff进行对比,确定没有新的IP在不停的发邮件过来了。"
        echo "$LOG_CONTENT">>$LOGBANK
        #printlog 0 ">>>>>>>>>>>>>>>>>>>>>>>>>END IPADD<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
    else
        printlog 0 "准备将单个IP添加至iptables屏蔽列表中..."
        for ipone in $IPLIST:
        do
            ipa=`echo $ipone|sed 's/://g'`
            LOG_CONTENT="$NOWTIME $ipa 屏蔽了此IP"
            echo "$LOG_CONTENT">>$LOGBANK
            iptables -I INPUT -s $ipa -j DROP
            #echo $ipa
        done
        printlog 0 "单个IP添加完毕。"
    fi
     
    if [ "$1"  == "" ]; then
        printlog 0 "不判断IP段"
    else
        printlog 0 "准备开始分析IP段..."
        #进行IP段分析,判断是否有需要添加的IP段
        #IPSEG=`cat /tmp/ipnewlist|awk -F "." '{print $1"."$2"."$3}'|sort|uniq -c|sort -n|egrep -v '1 |2 |3 '|awk '{print $2}'`
        cat $NEWIPFILELIST|awk -F "." '{print $1"."$2"."$3}'|sort|uniq -c|sort -n|egrep -v '1 |2 |3 '|awk '{print $2".0"}'|sort|uniq>/tmp/ipbankseg
        iptables -L -n|grep 'DROP'|grep -w '0/24'|awk '{print $4}'|sed 's//24//g'|sort|uniq>/tmp/ipiptablesseg
        IPSEGLIST=`diff /tmp/ipbankseg /tmp/ipiptablesseg|grep '< '|sed 's/< //g'`
        IPSEGLISTNUM=`diff /tmp/ipbankseg /tmp/ipiptablesseg|grep '< '|sed 's/< //g'|wc -l`
     
        #echo $IPSEGLISTNUM
        if [ ${IPSEGLISTNUM} -eq 0 ]; then
            echo "没有需要添加的IP段"
            LOG_CONTENT="$NOWTIME 好吧,经过深刻的使用diff进行对比,确定没有新的IP段需要添加。"
            echo "$LOG_CONTENT">>$LOGBANK
        else
            #echo $IPSEGLIST
            printlog 0 "准备添加IP段至iptables屏蔽列表中...."
            for ione in ${IPSEGLIST}:
            do
                isega=`echo $ione|sed 's/://g'`
                LOG_CONTENT="$NOWTIME $isega 屏蔽了此IP段"
                echo "$LOG_CONTENT">>$LOGBANK
                echo $isega
                iptables -I INPUT -s $isega/24 -j DROP
            done
            printlog 0 "IP段添加完毕!!!"
        fi
    fi
    printlog 0 ">>>>>>>>>>>>>>>>>>>>>>>>>END IPADD<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
  • 相关阅读:
    读书笔记 effective c++ Item 32 确保public继承建立“is-a”模型
    读书笔记 effective c++ Item 31 把文件之间的编译依赖降到最低
    读书笔记 effective c++ Item 30 理解内联的里里外外 (大师入场啦)
    程序猿开发语言投票
    读书笔记 effective c++ Item 29 为异常安全的代码而努力
    读书笔记 effective c++ Item 28 不要返回指向对象内部数据(internals)的句柄(handles)
    C++ 11和C++98相比有哪些新特性
    读书笔记 effective c++ Item 27 尽量少使用转型(casting)
    如何一步一步用DDD设计一个电商网站(七)—— 实现售价上下文
    如何一步一步用DDD设计一个电商网站(六)—— 给购物车加点料,集成售价上下文
  • 原文地址:https://www.cnblogs.com/drgcaosheng/p/8808275.html
Copyright © 2011-2022 走看看