分析nginx日志屏蔽攻击者ip

最近,我分析了一下日志,发现有同一个ip不断地请求我的短信接口,然后就写一个脚本来自动分析日志对这些IP进行屏蔽,本文介绍如何利用nginx屏蔽ip来实现防止攻击,当然也可以通过iptable来实现。

首先,在nginx的安装目录下面,新建屏蔽ip文件,命名为blockip.conf,以后新增加屏蔽ip只需编辑这个文件即可,格式如下:

deny 165.91.122.67;

再在nginx的配置文件nginx.conf中加入include website/blockip.conf;

下面是我的脚本check_log.sh

#! /bin/bash

log_nginx="/var/log/nginx"
blockfile="/usr/local/nginx/conf/website"

#取出日志中符合条件的ip写入ip.txt,并过滤掉重复的
grep "app/user/getCode" $log_nginx/access.log | awk '{print $1}' | sort -rn |uniq -c |awk '{print $2}' > /home/shell/ip.txt

for ip in `cat /home/shell/ip.txt`
do
    result=$(grep $ip $blockfile/blockip.conf)

#判断ip是否已经被屏蔽
    if [ -z "$result" ]; then

#分析ip请求的次数
    count=$(grep $ip $log_nginx/access.log|grep "app/user/getCode"|wc -l)

#请求次数大于等于20次就进行屏蔽
        if [ $count -ge 20 ]; then
        echo "deny $ip;" >> $blockfile/blockip.conf
        fi
    fi
done

#重启nginx
/usr/local/nginx/sbin/nginx -s reload

因为做了日志分割,我这里access.log都是当天的日志,不然分析一次整个日志,较消耗系统资源的(日志较大的情况下),不是很建议。

为了实现分析屏蔽自动化,在这里写个计划任务

*/15 * * * *     /home/shell/check_log.sh                     每15分钟分析一次

0 0 */3 * *     cat /dev/null > /usr/local/nginx/conf/website/blockip.conf      每三天放行所有屏蔽的IP

你可能感兴趣的:(分析nginx日志屏蔽攻击者ip)