Ubuntu 16.04 安裝 fail2ban

從小蛙開始碰 VPS 之後,才知道原來一台串上網路的主機,身處那麼多的危險,只要網路是對外公開的,無時無刻都在面臨著一大堆奇奇怪怪的惡意測試或是攻擊。這篇記錄怎麼在 Ubuntu 16.04 上安裝 fail2ban 這套防護套件。

緣由

如果有人嘗試登入主機失敗,系統就會記錄一次登記失敗的 log,所以在一般的情況下如果有人惡意要去 try 你的服務,他可以一直一直一直 try,這時候如果你的密碼很簡單,尤其是使用了很單純的單字、數字組成,沒過多久很快就會被 try 破了,把密碼弄得複雜一點長一點可以增加被 try 破的難度,但是如果讓惡意連線一直嘗試,一樣會有被 try 破的一天。

fail2ban 是一套 Linux 安全防護套件,運作的原理是讓使用者設定需要監控的服務,例如:sshmysql,這些服務如果有使用者登入失敗,會如同上面提到的,寫一條登入失敗的資訊到 log,fail2ban 會根據使用者設定去掃描有沒有像下面這種嘗試登入並且登入失敗的記錄

Nov 26 21:37:35 noter sshd[]: Invalid user dbuser from 118.24.117.187
Nov 26 21:37:35 noter sshd[]: input_userauth_request: invalid user dbuser [preauth]
Nov 26 21:37:35 noter sshd[]: pam_unix(sshd:auth): check pass; user unknown
Nov 26 21:37:35 noter sshd[]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=118.24.117.187
Nov 26 21:37:37 noter sshd[]: Failed password for invalid user dbuser from 118.24.117.187 port 47634 ssh2

使用者可以設定在一段時間內,嘗試登入但發生錯誤幾次,就先把這個 IP 進行封鎖一段時間,這樣應該不難理解,這些設定必須要根據自己的使用情況來設定。

安裝 fail2ban

sudo apt-get update 
sudo apt-get install fail2ban 
# 重新啟動 
service fail2ban stop 
service fail2ban start

直接安裝完就會以預設值來啟動,這樣就有基本的防護功能,但是基本設定並不能滿足小蛙的需求,因此下面依自己需求修改。

修改設定檔

# 先備份一份原始設定,避免改壞
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
 
# 編輯設定
vim /etc/fail2ban/jail.conf
 
# 說明
bantime = 改成自己要的秒數,如果被 ban 要多久才能
findtime = 改成自己要的秒數,掃描區間
maxretry = 3 改成自己可以允許被 try 幾次
destemail = 改成自己要收到信的 email
 
# ssh 服務設定區塊
[sshd]
enabled = true
port    = ssh
logpath = %(sshd_log)s
 
# 重新啟動
service fail2ban stop
service fail2ban start

每個服務都會有自己的區塊,ssh 服務可以在設定檔中找到,如果區塊內沒有上述四個參數,就會套用預設值,有的話則會使用區塊內的設定蓋過預設值,logpath 保留預設就可以了,想開啟其他服務的話,只要找到該區塊直接 enabled 設定成 true 即可。談談小蛙的思考

  • 不太可能連續輸入錯密碼 3 次,因此 maxretry 小蛙設定成 3
  • 第一點可能性很低,因此 findtime 可以設定大一點,設了 7200 秒
  • 因會發生 1, 2 點的都不會是小蛙自己,因此 bantime 設定成 -1,永久封鎖

意思就是說上面 118.24.117.187 如果在 7200 秒內(findtime),登入錯誤超過 3 次(maxretry),那麼這個 IP 就會被小蛙的主機永久設定為拒絕往來戶。雖然 fail2ban 不能夠完完全全阻擋外來的攻擊,但是至少可以避免讓一些惡意嘗試登入可以無限制地一直測試,其實也是個方便又不錯的工具喔!

2019-12-04

今天裝一台新的發現在 jail.conf 裡的 [DEFAULT] 設定預設並沒有生效 … 因此如果也有遇到這狀況的人,可以改成在 /etc/fail2ban/jail.d/ 下面設定,例如小蛙一裝完,這個資料夾下原本就有一個 defaults-debian.conf,裡面原本就有 [sshd] enabled = true,預設就把 sshd 打開了,把自己要的 bantime, findtime, maxretry 打在這邊再重啟 fail2ban 就可以了。

fail2ban 系列:

增加安全性系列:

網站架設系列文章:

    2 個回應

    1. Ninten表示:

      您好,請問編輯設定這裡是不是要修改 jail.conf 檔案?

      # 編輯設定
      vim /etc/fail2ban/jail.local

      • 黃小蛙表示:

        Ninten 您好
        對喔對喔!這邊小蛙寫錯了,
        是要 vim /etc/fail2ban/jail.conf 才對,
        感恩!

    發佈留言

    發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

    這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料