fail2ban,保护服务器安全

简介

fail2ban 是一个开源的入侵防御软件,主要用于保护 Linux 服务器和其他 Unix 系统免受暴力破解和其他恶意攻击。它通过监视日志文件来检测可疑活动,并自动采取措施(通常是禁止 IP 地址)来防止进一步的攻击。

主要功能

  1. 自动禁止 IP 地址: 当检测到特定服务(如 SSH、FTP、HTTP 等)中的多次失败登录尝试时,fail2ban 会自动使用防火墙(如 iptables)禁止这些 IP 地址。
  2. 日志监控: fail2ban 监控系统日志(如 /var/log/auth.log/var/log/secure),并根据预定义的规则(过滤器)分析日志内容。
  3. 可配置性: 用户可以根据需求自定义配置文件,设置不同的监控规则、禁止时间、允许的失败尝试次数等。
  4. 多种服务支持: fail2ban 支持多种服务的保护,包括 SSH、HTTP、FTP、SMTP 等。
  5. 邮件通知: 可以配置邮件通知功能,当 IP 被禁止时,系统会自动发送通知邮件给管理员。
  6. 可扩展性: 用户可以创建自定义过滤器和动作,以适应特定的需求。

工作原理

  1. 配置: 用户设置 fail2ban 的配置文件,定义需要监控的服务、日志文件路径、过滤规则等。
  2. 监控: fail2ban 定期扫描指定的日志文件,查找符合过滤器条件的日志条目。
  3. 触发: 如果在设定的时间窗口内,某个 IP 地址的失败尝试次数超过了允许的最大值,fail2ban 会执行相应的动作(如禁止该 IP)。
  4. 解除禁止: 被禁止的 IP 地址在设定的时间后会自动解除禁止,或者管理员可以手动解除。

部署

Debian / Ubuntu

1
2
sudo apt update
sudo apt install fail2ban

配置

准备工作

配置文件所在的位置:

1
/etc/fail2ban

新建 jail.local

1
sudo vim jail.local

简单配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
#DEFAULT-START
[DEFAULT]
bantime = 600
findtime = 300
maxretry = 5
banaction = iptables-allports
action = %(action_mwl)s
backend = systemd
#DEFAULT-END

[sshd]
ignoreip = 127.0.0.1/8
enabled = true
filter = sshd
port = 22
maxretry = 5
findtime = 300
bantime = 600
banaction = iptables-allports
action = %(action_mwl)s
logpath = /var/log/auth.log

配置参考了:

多种策略

此 Fail2Ban 配置通过多个 jail 实现更精细的 SSH 保护,根据登录失败尝试的频率和时间段,应用不同的禁止时长:

  • DEFAULT: 设置全局默认值,使用 systemd 日志后端,iptables-allports 禁止所有端口,并发送邮件告警。
  • sshd-short: 5 分钟内 5 次失败尝试 -> 禁止 10 分钟
  • sshd-medium: 30 分钟内 10 次失败尝试 -> 禁止 1 小时
  • sshd-long: 24 小时内 30 次失败尝试 -> 禁止 100 天
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# /etc/fail2ban/jail.local (或者 /etc/fail2ban/jail.d/custom.conf)
# ; 表示单行注释

[DEFAULT]
bantime = 600 ; 封禁时间
findtime = 300 ; 指定时间内
maxretry = 5 ; 最大尝试次数
backend = systemd       ; 使用 systemd 日志后端
banaction = iptables-allports  ; 使用 iptables 阻止所有端口
action = %(action_mwl)s    ; 邮件告警 + 日志记录

[sshd-short]
enabled  = true
filter   = sshd        ; 使用 sshd 过滤器
logpath  = /var/log/auth.log  ; SSH 日志文件
port     = ssh
findtime = 300       ; 5 分钟
maxretry = 5
bantime  = 600       ; 10 分钟 (5分钟内超过5次)

[sshd-medium]
enabled  = true
filter   = sshd
logpath  = /var/log/auth.log
port     = ssh
findtime = 1800      ; 30 分钟
maxretry = 10
bantime  = 3600      ; 1 小时 (30分钟内超过10次)

[sshd-long]
enabled  = true
filter   = sshd
logpath  = /var/log/auth.log
port     = ssh
findtime = 86400     ; 24 小时
maxretry = 30
bantime  = 8640000    ; 100(24小时超过30次)

服务

启动服务

1
sudo systemctl start fail2ban

常见命令

查看 Fail2Ban 中被禁止的 IP 地址

1
fail2ban-client status <jail_name>

查看名为 sshd 的监狱的被禁止 IP

1
fail2ban-client status sshd

如果自己忘记了密码,被 fail2ban 阻止了,解除命令

1
sudo fail2ban-client set <jail_name> unbanip <ip_address>

例如

1
sudo fail2ban-client set ssh unbanip 192.168.1.100
页面浏览量Loading
网站总访客数:Loading
网站总访问量:Loading
使用 Hugo 构建
主题 StackJimmy 设计
-->