fairyin
#!/bin/sh
#获取当前时间格式:yyyy-mm-dd
dd=`date +%F`
#日志文件路径
path=\'/logs/\'${dd}\'.log\'
#nginx 黑名单路径文件
nginx_path=/nginx/ips.conf

#获取ip出现次数按照降序排列并输出到文件
`grep \'[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\' $path -o | sort -k1,1nr | uniq -c | sort -k1,1nr > /ip/${dd}.text`
#ip列表文件
ip_path=/ip/$dd.text
#索引
ii=1
#ip出现次数


index=0
#ip写入次数
yx_line=0
for line in `cat $ip_path`
do
    yu=$(( $ii % 2 ))
    ii=`expr $ii + 1`
    if [ $yu -eq 1 ] ; then
       index=$(( $line + 0 ))
    else
        if [ $index -gt 50 ] ; then
            ip=$line
            ip_count=$(( `cat $nginx_path | grep -c $ip` ))
            if [ $ip_count -eq 1 ] ; then
                index=0
                continue;
            else
                yx_line=`expr $yx_line + 1`
                `echo \'deny \'$ip\';\' >> $nginx_path`
            fi
            index=0
        fi
        index=0
    fi
done

# 如果有数据写入则重新加载 nginx
if [ $yx_line -gt 0 ] ; then
    /etc/init.d/nginx reload
fi

分类:

技术点:

相关文章: