使用fail2ban配置暴力破解攻击防护
使用fail2ban配置暴力破解攻击防护
Fail2ban
通过扫描系统日志文件, 并从中找出多次尝试登录失败的IP地址, 并将该IP地址加入防火墙的拒绝访问列表中。
在/var/log/auth.log
查阅到非常多的SSH爆破日志, 需要配置Fail2ban
拉黑这些攻击者的IP
fail2ban的安装
apt install fail2ban
配置fail2ban的SSH爆破防护
fail2ban 的默认配置文件是/etc/fail2ban/jail.conf
, 但不建议直接修改这个文件, 推荐创建一个本地配置文件/etc/fail2ban/jail.local
来覆盖默认设置
1 | cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local |
- enabled: 启用此监控
- port: 监控的端口, ssh 是默认端口, 也可以指定具体的端口号
- filter: 指定使用的过滤器规则
- logpath: 指定要监控的日志文件
- maxretry: 指定在 findtime 时间内允许的最大失败尝试次数
- bantime: 禁止 IP 的时间(秒)
- findtime: 在此时间窗口内如果失败次数超过 maxretry 则会被禁止
使用systemd来管理fail2ban, 检查服务状态
启动并启用 fail2ban 服务并设置为开机自启:
1 | systemctl start fail2ban |
检查 Fail2ban 状态
fail2ban-client status
查看特定 jail 的状态, 例如 SSH:
fail2ban-client status sshd
检查 fail2ban 日志文件, 可以查看 /var/log/fail2ban.log
来获取更多关于哪些 IP 被禁止的信息:
tail -f /var/log/fail2ban.log
添加例外规则
ignoreip
配置选项用于指定一组 IP 地址, 这些地址将被排除在禁止策略之外
在 [DEFAULT]
部分中找到或添加 ignoreip
行, 格式如下:
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 10.0.0.0/8
根据需求修改 ignoreip
行, 你可以添加以下类型的项目:
1 | 单个 IP 地址: 例如 192.168.1.100 |
多个项目之间用空格分隔, 一些常见的配置示例:
1 | 忽略本地回环地址和整个本地网络 |
重启 fail2ban 服务以使更改生效:
systemctl restart fail2ban
验证配置:
fail2ban-client get <JAIL_NAME> ignoreip
替换 <JAIL_NAME>
为检查的具体 jail 名称
使用failban配置nginx http登录爆破保护
启用 Nginx 的日志配置
1
2
3
4
5
6
7
8
9
10# 在http块中定义日志格式
log_format auth_log '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
# 在server块中启用日志
server {
# ...其他配置...
access_log /var/log/nginx/auth.log auth_log;
}创建 fail2ban 过滤规则, 创建文件
vim /etc/fail2ban/filter.d/nginx-http-auth.conf
1
2
3
4[Definition]
failregex = ^<HOST> .* "GET .* HTTP/.*" 401 .*$
^<HOST> .* "POST .* HTTP/.*" 401 .*$
ignoreregex =配置 fail2ban 防护策略, 编辑
vim /etc/fail2ban/jail.local
1
2
3
4
5
6
7[nginx-http-auth]
enabled = true
filter = nginx-http-auth
logpath = /var/log/nginx/auth.log
findtime = 600
maxretry = 3
bantime = 86400 # 秒验证配置
1
2
3
4
5
6检查Fail2ban状态
fail2ban-client status
检查具体规则状态
fail2ban-client status nginx-http-auth
查看日志
tail -f /var/log/fail2ban.log