文章使用的是 Debian 11
系统,防火墙是 UFW
。
本人为新手,如有错误或不足之处,欢迎指正。
安装Fail2ban
和UFW
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.local1 2 3 4 5 6 7
| banaction = iptables-multiport banaction_allports = iptables-allports
banaction = ufw banaction_allports = ufw
|
新建jail
配置文件并添加规则。
1
| vim /etc/fail2ban/jail.d/defaults.conf
|
defaults.conf1 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 端口
启动 ufw
查看端口和重载防火墙
确保添加了ssh
端口并启用了ufw
。
重启Fail2ban
和查看状态
1 2 3
| systemctl restart fail2ban.service 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] fail2ban-client set [服务名] unbanip [IP] fail2ban-client set [服务名] addignoreip [IP] fail2ban-client set [服务名] delignoreip [IP]
|