分析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

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值