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

分析nginx日志屏蔽攻击者ip

2019-03-13 11:37:27           
收藏   我要投稿

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

上一篇:RHCSA-Linux目录层级,文件管理命令,shell使用技巧,获取帮助文档进程的前后台切换
下一篇:RHCSA-密码管理
相关文章
图文推荐

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

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