举杯邀月

一次站点检查Nginx访问日志发现站点被刷,倒腾了一天进行堵截的记录

摘要:站点运行了有好几个月了,最近在查看站点的nginx访问日志是,发现站点被各种恶意扫描访问还特别频繁,对于这个根本不能忍,倒腾了多半天,通过nginx的配置对访问进行了限制。

站点运行了有好几个月了,最近在查看站点的nginx访问日志是,发现站点被各种恶意扫描访问还特别频繁,

举杯邀月-技术博客
着只是其中的一小部分,还有很多 User-Agent 伪装成了百度蜘蛛进行扫描,对于这个根本不能忍,倒腾了多半天,通过nginx的配置对访问进行了限制。

通过 User-Agent 屏蔽

对于 User-Agent 我用 PHP 与 Python 做了请求访问。

PHP 使用 file_get_content 方法默认是没有 User-Agent,通过设置默认的信息是 ‘PHP’。

Python 我是用的是 reuqests 进行的访问请求,如果不设置默认的信息是 ‘python-requests/2.22.0’,后边的数字是 requests 模块的版本号。

当然,不管是 PHP 也好 Python 也罢,都能够添加头信息,模拟成浏览器或者百度爬虫进行访问,抛开模拟的不谈,先把默认的给他屏蔽掉。

if ($http_user_agent ~* (python|php|ApacheBench|hubspot|leiki|webmeup|Bytespider)) {
    return 403;
}
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3

判断请求的 User-Agent 头包含这些信息的直接返回403状态码。

通过限制访问频率进行限制

http{
    //……
    limit_req_zone $binary_remote_addr zone=request_len:10m rate=8r/s;
    //……
    server{
        //……
        limit_req zone=request_len burst=8 nodelay;
        //……
    }
}
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10

限制了 IP 每秒最多8个访问(正常访问页面不会这么快),直接贴出来代码,这个我也是百度出来的,然后各种试,这是最终的调试结果(我现在也还没有完全搞懂这个是什么原理、具体配置,等过两天研究差不多了再分享。)

通过以上两个拦截,虽然不能百分百的拦截所有扫描,但是也能拦截一部分,过两天关注访问日志看结果。

作者:举杯邀月

出处: http://www.hug-code.cn/archives/5fd9ba55caa6c.html

2020-10-12 标签: nginx