使用 Fail2ban 防止SSH被暴破

662 词

文章使用的是 Debian 11系统,防火墙是 UFW

本人为新手,如有错误或不足之处,欢迎指正。

安装Fail2banUFW

1
apt install fail2ban ufw

配置Fail2ban和新建jail配置文件

复制配置文件, fail2ban 会默认使用 jail.local

1
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

打开 jail.local 将以下两行修改为 ufw,以便fail2ban使用ufw防火墙来拦截 ip。

1
vim /etc/fail2ban/jail.local
jail.local
1
2
3
4
5
6
7
# 修改前
banaction = iptables-multiport
banaction_allports = iptables-allports

# 修改后
banaction = ufw # 使用 ufw 来封禁 IP 地址
banaction_allports = ufw # 使用 ufw 来封禁所有端口

新建jail配置文件并添加规则。

1
vim /etc/fail2ban/jail.d/defaults.conf
defaults.conf
1
2
3
4
5
6
7
8
9
10
11
12
[sshd]
enabled = true
port = 22
logpath = %(sshd_log)s
backend = %(sshd_backend)s
filter = sshd
protocol = tcp
mode = normal
ignoreip = 127.0.0.1/8 ::1 10.10.0.0/16 172.16.0.0/16
bantime = 5d
findtime = 5m
maxretry = 3

这个规则的意思是监听端口 22,使用默认日志文件和后端,5 分钟内 3 次失败登录封禁 5 天,忽略本地环回和部分私有网络地址。

defaults.conf参数的说明如下:

  • [sshd]:服务名。
  • enabled:是否启用该监控规则。
  • port:监视服务的端口号。
  • logpath:监听日志文件的路径,可以使用 %()s 来引用变量,例如 %(sshd_log)s 表示使用 sshd 日志文件。
  • backend:指定用于封禁 IP 地址的后端系统或工具,例如 systemd。
  • filter:使用的过滤器规则,这里指定为 sshd,对应的过滤器文件是 /etc/fail2ban/filter.d/sshd.conf
  • protocol:协议类型,这里指定为 TCP。
  • mode:模式,通常设置为 normal,表示普通模式。
  • ignoreip:不会被封锁的 IP 地址,这里列出了一些范围,例如 127.0.0.1/8 表示本地 IP 地址。
  • bantime:封禁时间,这里设置为 5d 表示封禁 5 天。
  • findtime:在此时间段内发生多少次失败登录尝试触发封禁,这里是 5 分钟。
  • maxretry:最大失败登录次数。

添加端口SSH端口并启动UFW

添加 ssh 端口
1
ufw allow 22/tcp
启动 ufw
1
ufw enable
查看端口和重载防火墙
1
2
ufw status
ufw reload

确保添加了ssh端口并启用了ufw

重启Fail2ban和查看状态

1
2
3
systemctl restart fail2ban.service # 重启 fail2ban
fail2ban-client status # 查看被监视的服务的当前状态
fail2ban-client status sshd # 显示指定服务的当前状态

其它命令

1
2
3
4
5
6
7
fail2ban-client reload # 重载配置文件
fail2ban-client set [服务名] enabled true # 启用规则
fail2ban-client set [服务名] enabled false # 禁用规则
fail2ban-client set [服务名] banip [IP] # 封禁ip
fail2ban-client set [服务名] unbanip [IP] # 解除被封禁的ip
fail2ban-client set [服务名] addignoreip [IP] # 添加白名单ip
fail2ban-client set [服务名] delignoreip [IP] # 删除白名单ip
留言