跳轉到內容

Fail2ban 防暴力破解配置教程

如果你使用的是默認端口(22)和傳統的密碼登錄方式來連接你的 VPS,過不了幾天你去查看系統日誌,一定會發現大量的“失敗登錄嘗試”。這是因為互聯網上隨時有無數的掃描腳本和殭屍網絡在無差別地嘗試爆破所有服務器的 SSH 密碼。

這不僅佔用系統資源,萬一密碼設得比較簡單,服務器直接就淪陷成了“肉雞”。

為了解決這個問題,除了 改用 SSH 密鑰登錄 之外,安裝一款能自動識別“多次密碼輸入錯誤”並將其 IP 封禁的防火牆工具是非常有必要的。Fail2ban 就是其中的黃金標準。

什麼是 Fail2ban?

Fail2ban 是一款強大的防禦軟件。它的工作原理很簡單: 後臺默默掃描系統日誌(如 /var/log/auth.log),如果它發現某個 IP 地址在短時間內連續多次嘗試密碼失敗,它就會自動去修改防火牆(iptables/ufw/firewalld 等)規則,把這個來源 IP 給拉黑(封禁)一段時間。

一次配置,終身免疫。


步驟一:安裝 Fail2ban

Fail2ban 在包括 Debian 和 Ubuntu 在內的絕大部分 Linux 發行版的官方軟件源裡都能直接找到。

  1. 首先更新一下軟件包列表:
    bash
    apt update
  2. 執行安裝命令:
    bash
    apt install fail2ban -y

安裝完成後,Fail2ban 這個服務會自動啟動並在後臺默默運行。


步驟二:新建 Fail2ban 自定義配置(核心動作)

Fail2ban 所有的默認“封禁規則”和“監獄(Jail)”配置都存放在 /etc/fail2ban/jail.conf 這個文件裡。 但是,官方強烈建議:不要去修改原始的 jail.conf 文件! 因為一旦未來軟件升級,你的修改就有丟失的可能。

正確的做法是:新建一個 jail.local 文件,把屬於我們自己的改動寫在裡面。 它的優先級比原始文件高。

  1. 使用你最愛的編輯器打開(新建)這個文件:

    bash
    nano /etc/fail2ban/jail.local
  2. 將以下最基礎、最實用的防護規則配置項 複製並粘貼 進去:

    ini
    [DEFAULT]
    # 這是默認設置
    # 忽略你自己的本地 IP 不受封禁(相當於白名單),如果你有固定 IP,也可以加在這裡,用空格隔開。
    ignoreip = 127.0.0.1/8 ::1
    
    # 封禁時間:被拉黑後,多長秒數放出來。這裡填 86400 (秒) 相當於封禁一天。
    bantime  = 86400
    
    # 找茬時間窗口:在這個時間跨度內計算失敗次數。這裡設為 600 秒(十分鐘)。
    findtime = 600
    
    # 最大容忍次數:10 分鐘內,一旦失敗次數大於等於 3 次,立刻封禁。
    maxretry = 3
    
    
    [sshd]
    # 開啟針對 SSH 的監控監獄
    enabled = true
    
    # 如果你改過 SSH 服務用的端口,請在這裡寫上你的新端口,如果是默認的 22,可以不寫。
    port    = ssh
  3. 粘貼完了以後,按下快捷鍵 Ctrl + X,再按一下字母 Y,然後敲擊鍵盤迴車鍵保存退出。


步驟三:重啟服務生效與日常查看

  1. 修改完了屬於咱們自己的安全配置文件之後,我們需要告訴 Fail2ban 這位門衛大爺重新看一遍工作手冊:

    bash
    systemctl restart fail2ban
  2. 為了保證無論重啟服務器多少次它都在默默工作,隨手允許它開機自啟動:

    bash
    systemctl enable fail2ban

怎麼查看它有沒有在工作?抓到了幾個壞人?

咱們可以通過它的客戶端命令去查看目前有哪些因為爆破 SSH 被關進“小黑屋”的倒黴蛋。

bash
fail2ban-client status sshd

終端將會友好地輸出一份短小的報告:

text
Status for the jail: sshd
|- Filter
|  |- Currently failed:	0         # 當前正在數錯密碼的次數(因為還沒超過3次)
|  |- Total failed:	21            # 從服務開始到現在,這幫人一共輸錯了多少次密碼
`- Actions
   |- Currently banned:	3         # 此刻正待在小黑屋裡被封號的倒黴 IP 數量(被 ban 了!)
   |- Total banned:	5             # 歷史總共拉黑過的倒黴蛋
   `- Banned IP list:	192.168.1.100 203.0.113.45 198.51.100.22  # 這裡會列出被你封禁的詳細 IP 地址

額外建議與安全提醒

  • 儘管 Fail2ban 能夠非常有效地攔截密碼爆破,但在絕對的安全面前,修改 SSH 默認的 22 端口,並且關閉密碼認證改用本機的密鑰(Key)登錄 才是最徹底的安全防護牆。
  • 假如你不小心手抖把自己的 IP 輸錯密碼被鎖了(這簡直是家常便飯)。不用怕,只要能從面板端登錄 VNC 終端執行以下“大赦天下”解封名冊裡屬於自己的那條 IP 即可:
    bash
    fail2ban-client set sshd unbanip 【你的本地IP地址】

有了 Fail2ban 坐鎮你的服務器,你可以在面對日誌裡亂飛的牛鬼蛇神時,喝杯茶會心一笑了。


免责声明

本文仅供技术交流和学习参考,请遵守当地法律法规,合理合法使用网络服务。

最後更新於: