運維必備技能:配置 Fail2Ban 防 SSH 暴力破解
今天分享一下如何通過Fail2Ban防止SSH暴力破解。
隨著服務器暴露在公網,SSH 暴力破解攻擊越來越常見。攻擊者通過不斷嘗試用戶名和密碼試圖登錄你的服務器,這不僅威脅安全,還可能拖慢系統性能。
1. 什么是 Fail2Ban?
Fail2Ban 是一款開源入侵防御工具,它可以實時監控日志文件,一旦檢測到暴力破解行為(如多次登錄失敗),就會自動使用防火墻(如 firewalld)將攻擊者 IP 臨時或永久封禁。
2. 安裝 Fail2Ban
環境信息:
- 系統版本:Rocky Linux 8 / 9
- SSH 登錄端口:默認 22(如你自定義端口,請注意替換)
- 默認 SSH 日志路徑:/var/log/secure
Rocky Linux 默認沒有內置 Fail2Ban,需要啟用 EPEL 倉庫:
# 啟用 EPEL 倉庫
dnf install epel-release -y
# 安裝 Fail2Ban
dnf install fail2ban -y
安裝完成后,Fail2Ban 的核心文件路徑為:
配置目錄:/etc/fail2ban
服務名:fail2ban
3. 配置 Fail2Ban 保護 SSH
Fail2Ban 的默認配置文件為 /etc/fail2ban/jail.conf,請不要直接修改,我們應該創建一個新的配置文件:
vim /etc/fail2ban/jail.local
推薦配置如下:
[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 # 忽略本地 IP
bantime = 1h # 封禁時間(1 小時)
findtime = 10m # 查找時間窗(10 分鐘)
maxretry = 5 # 最大失敗次數(超出則封禁)
backend = systemd # 使用 systemd 讀取日志
banaction = firewallcmd-ipset # 使用 firewalld 封禁 IP
[sshd]
enabled = true # 啟用 SSH 防護
port = ssh # 監控的端口(或自定義端口號)
logpath = %(sshd_log)s # 自動識別 /var/log/secure
filter = sshd # 使用默認 sshd 篩選規則
參數說明:
- ignoreip:允許的 IP 地址(比如你家/公司白名單 IP)
- bantime:封禁時長,可設置為 -1 實現永久封禁
- findtime + maxretry:在 findtime 時間內失敗超過 maxretry 次,就封禁
- banaction:配合 firewalld 封 IP
- backend = systemd:Rocky 使用 systemd 管理日志,比傳統文件讀取更穩定
4. 啟動并啟用 Fail2Ban
啟動并設置開機自啟:
systemctl enable --now fail2ban
設置開機自動啟動:
systemctl enable fail2ban
啟用防火墻 firewalld:
systemctl enable --now firewalld
查看運行狀態:
systemctl status fail2ban
查看 Fail2Ban 狀態:
fail2ban-client status
查看 sshd Jail 的詳細狀態:
fail2ban-client status sshd
剛安裝還沒有被封禁的IP,接下來手動進行封禁。
5. 手動封禁與解封 IP
封禁某 IP:
fail2ban-client set sshd banip 10.0.0.111
現在可以查看到10.0.0.111被封禁了。
通過10.0.0.111是無法登錄10.0.0.110的,因為已經被封禁。
解封某 IP:
fail2ban-client set sshd unbanip 10.0.0.111
解封后順利登錄10.0.0.110
【溫馨提示】我是設置firewalld進行封禁IP的,必須保證firewalld是運行中的,不然無法進行禁用。
6. 附加建議
除了使用 Fail2Ban,還有一些硬核建議:
修改 SSH 默認端口: 編輯 /etc/ssh/sshd_config,例如:
Port 2222
然后重啟 SSH 服務。
禁止 root 登錄:
PermitRootLogin no
僅允許特定 IP 登錄 SSH: 利用 firewalld:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="你的IP" port protocol="tcp" port="22" accept'
firewall-cmd --reload
根據安全要求,Fail2Ban 幾乎是必裝工具。如果你還沒配置,趕快動手試試吧!