作用:限制 ssh 远程登录,防止被人爆破服务器,封禁登录 ip
使用 lastb 命令可查看到登录失败的用户及 ip,无时无刻的不在爆破服务器
fail2ban 底层使用系统防火墙来实现屏蔽恶意 IP 地址的功能
fail2ban 默认使用 iptables 作为底层防火墙工具,如果系统防火墙工具是 nftables,则需在配置 fail2ban 时需指明 action,具体看配置文件。
常用命令:
# 查看登录失败记录
# centos 7.6
tail -100f /var/log/secure | grep "Failed"
# debian 11、12
tail -100f /var/log/auth.log | grep "Failed"
# 查看 fail2ban 日志
tail -f /var/log/fail2ban.log
# 查看 fail2ban 黑名单
fail2ban-client status sshd
# -n 2: 这个参数指定每 2 秒刷新一次输出。您可以根据需要调整这个时间间隔
# 'lastb -n 10': 单引号内是您希望执行的命令
watch -n 2 'lastb -n 10'
1.安装 fail2ban
apt install -y fail2ban
2.配置 fail2ban 封禁 ip 的规则
(1)进入目录并创建 sshd.local 文件
cd /etc/fail2ban/jail.d
vi sshd.local
(2)在 sshd.local 里写入以下内容
[sshd]
enable = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
findtime = 1h
bantime = 3h
ignoreip = 192.168.31.1
# fail2ban 默认底层使用iptables,如果系统防火墙是nftables,需要放开下面一行
# action = nftables-multiport[name=SSH, port="%(port)s", protocol=tcp]
参数含义:
- enable = true: 启用对 sshd 服务的保护,即当满足触发条件时会对 IP 地址进行封禁。
- port = 22: 监控的 SSH 服务端口为 22。
- filter = sshd: 表示使用 sshd 过滤器来分析日志。
- logpath = /var/log/auth.log: 表示分析的日志文件为 /var/log/auth.log。
- maxretry = 3: 允许尝试登录的最大次数,超过这个次数会触发封禁机制。
- findtime = 1h: 触发封禁的时间窗口,即在这个时间段内累积超过 maxretry 次登录失败会被封禁。
- bantime = 3h: 封禁的时间,即被封禁 IP 地址被阻止访问服务的时间长度。
- ignoreip = 192.168.31.1: 指定不需要被 fail2ban 封禁的 IP 地址,即对该 IP 地址的登录失败次数不会计入封禁机制。
3.运行 fail2ban
(1)启动服务
systemctl start fail2ban
(2)设置开机自启动
systemctl enable fail2ban
(3)查看状态
fail2ban-client status
(4)查看当前状态报告
fail2ban-client status sshd
- Total failed: 表示当前登录失败的数量
- Total banned: 表示当前封禁的 ip 数量
- Banned IP list: 表示具体封禁的 ip 有哪些
(5)手动解封 ip
fail2ban-client set sshd unbanip 222.10.31.33
表示从已封禁的 ip 中解封 222.10.31.33
(6)手动封禁 ip
fail2ban-client set sshd banip 88.99.184.62
4. linux 可以统一使用以下命令查看系统防火墙黑名单
# 如果底层使用的是 iptables 防火墙
iptables -L -n
# 如果底层使用的是 nftables 防火墙
nft list ruleset
nft list set inet f2b-table addr-set-SSH
评论 (0)