使用办法:可以将下面的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 函数说明 #两个参数,一,是否打印日志,二,日志内容 #一可选,0,1,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<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"