频道栏目
首页 > 系统 > Linux > 正文

通过分析nginx日志来屏蔽攻击者ip

2018-08-14 15:55:28           
收藏   我要投稿

最近,我分析了一下日志,发现有同一个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

上一篇:权限管理的概念及相关操作
下一篇:pringboot-restful实战演练
相关文章
图文推荐
文章
推荐
热门新闻

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站