fail2ban 保护nginx站点扫描

使用fail2ban阻挡爬虫扫描

使用fail2ban阻挡爬虫扫描。

自己的站点,也没防护,对专业的安全知识也没有多了解,一个自留地的静态的站点,也没太担心被黑。不过,一直以来,一直能看到nginx日志中记录的公网爬虫扫描错误,看多了,即便不知道怎么做,也会觉得很烦。所以,有了之前fail2ban ssh暴力破解的做法,一样,尝试使用fail2ban来ban恶意的站点扫描。

给一个恶意扫描的日志示例:

2024/04/17 10:10:51 [error] 1038#1038: *949 open() “/usr/share/nginx/html/ywmy210/robots.txt” failed (2: No such file or directory), client: 66.249.68.32, server: www.ywmy.xyz, request: “GET /robots.txt HTTP/1.1”, host: “www.ywmy.xyz
2024/04/17 11:09:19 [error] 1038#1038: *994 open() “/usr/share/nginx/html/boaform/admin/formLogin” failed (2: No such file or directory), client: 112.239.22.224, server: localhost, request: “GET /boaform/admin/formLogin?username=admin&psd=admin HTTP/1.0”

安装fail2ban

安装非常简单,直接通过源使用yum安装。

1
2
3
4
# 安装
yum install epel-release fail2ban
# 启动服务
systemctl start fail2ban

配置jail

fail2ban的配置目录,主要action,filer,jail,fail2ban几个配置目录,对应相应的过滤,动作,监禁,禁止等配置。简单的目的,达成通过匹配nginx的错误扫描日志,禁止源IP访问nginx站点。可以直接在filter.d目录下找到针对nginx botsearch的过滤条件。所以,这里,我们只需要启用预配置的过滤条件即可。

配置jail,启用预设置的nginx botsearch过滤条件。在jail.d中创建配置文件。

1
2
3
4
5
6
7
8
9
vim nginx-botsearch.local

[nginx-botsearch]
failter = nginx-botsearch # 过滤条件
enabled = true # 启用
port = http, https
logpath = %(nginx_error_log)s # nginx日志路径
logencoding = utf-8
maxtetry = 2

启用fail2ban服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 重启fail2ban服务
systemctl restart fail2ban
# 查看fail2ban状态
[root@ywmy fail2ban]# fail2ban-client status
Status
|- Number of jail: 2
`- Jail list: nginx-botsearch, sshd
# 查看fail2ban nginx防护结果
[root@ywmy fail2ban]# fail2ban-client status nginx-botsearch
Status for the jail: nginx-botsearch
|- Filter
| |- Currently failed: 0
| |- Total failed: 8
| `- File list: /var/log/nginx/error.log
`- Actions
|- Currently banned: 4
|- Total banned: 4
`- Banned IP list: 101.132.104.190 139.224.37.35 47.100.171.251 47.101.178.250

好了。已经可以看到ban了4个源IP的扫描访问。


fail2ban 保护nginx站点扫描
https://ywmy.xyz/2024/04/17/fail2ban-保护nginx站点扫描/
作者
ian
发布于
2024年4月17日
许可协议