提供WordPress、SEO技術與各項 IT 資訊
Fail2Ban 是保護 Linux 伺服器免受自動攻擊的最佳軟體。它提供許多可自定義的規則來禁止試圖暴力破壞或測試密碼。Fail2Ban 能與防火牆共同工作,因此我們將 Fail2Ban 作為單獨的安全層進行安裝和啟用。
在本文章中,我們將說明什麼是 Fail2Ban 並且如何使用與如何安裝和配置 Fail2Ban。
Fail2Ban 是一個入侵檢測系統框架,它可以保護基於 Linux 的網頁伺服器免受許多安全威脅,例如:DoS、DDoS 和暴力攻擊。它通過監視系統日誌中的任何惡意活動並掃描文件以查找與已識別模式匹配的任何條目來工作。以 Python 程式設計語言編寫,並能夠在類 Unix 系統上執行,這些系統具有本地安裝的封包控制系統或防火牆的介面,例如 Iptables 或 TCP Wrapper。
如果 Fail2Ban 檢測到登錄嘗試失敗的高峰,它會自動將新的防火牆規則添加到您的 iptables 並在指定時間或無限期阻止來源地址。
安裝 Fail2Ban 可幫助伺服器所有者自動減少任何非法活動。每當發生攻擊時,它還會通過電子郵件向他們發出警報。
要安裝 Fail2Ban 服務,請使用 Terminal(macOS 和 Linux)或 PuTTY(Windows)等 SSH 客戶端以 root 訪問權限連接到您的伺服器。
以下是在Ubuntu上安裝 Fail2Ban 的方法:
1.在安裝新軟體包之前,我們建議更新系統存儲庫和軟體。執行以下命令:
apt-get update && apt-get upgrade
2.通過執行以下指令安裝 Fail2Ban:
apt-get install fail2ban
3.如果要為 Fail2Ban 服務添加電子郵件支援,請輸入以下指令:
apt-get install sendmail
4.使用以下指令驗證 Fail2Ban 狀態:
sudo systemctl status fail2ban
按照以下步驟在 CentOS 上安裝 Fail2Ban :
1.CentOS7 的 Fail2Ban 包含在 Extra Packages for Enterprise Linux (EPEL) 存儲庫中。通過執行以下指令下載:
yum install epel-release
2.完成後,通過輸入以下指令安裝 Fail2Ban :
yum install fail2ban
3.通過執行以下指令啟用和啟動服務:
systemctl enable fail2ban
systemctl start fail2ban
以下是在 Debian 上安裝 Fail2Ban 的方法:
1.通過以下指令來更新和升級您的系統存儲庫:
apt-get update && apt-get upgrade -y
2.使用以下指令繼續安裝 Fail2Ban :
apt-get install fail2ban
3.如果要添加電子郵件支援,請執行以下指令安裝 Sendmail:
apt-get install sendmail-bin sendmail
4.以下是檢查 Fail2Ban 狀態的方法:
systemctl status fail2ban
按照以下說明在 Fedora 上安裝 Fail2Ban:
1.透過下面的指令來更新您的系統存儲庫:
dnf update
2.使用以下指令安裝 Fail2Ban:
dnf install fail2ban
3.如果要安裝 Sendmail,請輸入以下指令:
dnf install sendmail
4.透過執行以下指令啟動並啟用 Fail2Ban 服務:
systemctl start fail2ban
systemctl enable fail2ban
5.如果您加了 Sendmail,請執行以下指令來啟動並啟用:
systemctl start sendmail
systemctl enable sendmail
安裝 Fail2Ban 後,接下就是配置。在本節中,我們討論如何使用 fail2ban.local 和 jail.local 文件來實現。
fail2ban.conf 文件包含 Fail2Ban 的基本配置。它包含不應修改設定。
如果您想進行任何更改,我們建議您建一個 Local 文件。複製 fail2ban.conf 並重新命名為 fail2ban.local 以覆蓋默認配置文件。
以下是如何更改副本的名稱並在 fail2ban.local 文件上設定配置:
1.透過執行以下指令將文件重命名為fail2ban.local 。
cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local
2.輸入以下指令並打開文件:
nano /etc/fail2ban/fail2ban.local
3.現在您可以編輯文件中的配置。
讓我們了解一下它們可以採用的選項和設定值。
loglevel = INFO
日誌輸出級別定義為:
# Fail2Ban main configuration file
#
# Comments: use '#' for comment lines and ';' (following a space) for inline comments
#
# Changes: in most of the cases you should not modify this
# file, but provide customizations in fail2ban.local file, e.g.:
#
# [DEFAULT]
# loglevel = DEBUG
#
[DEFAULT]
# Option: loglevel
# Notes.: Set the log level output.
# CRITICAL
# ERROR
# WARNING
# NOTICE
# INFO
# DEBUG
# Values: [ LEVEL ] Default: INFO
#
loglevel = INFO
logtarget = STDERR
在特定目標中記錄 log,可以這麼做:
syslogsocket = auto
將 syslog socket 文件設置為 auto 或 file(如果您已將 logtarget 設置為 SYSLOG)。
# Option: syslogsocket
# Notes: Set the syslog socket file. Only used when logtarget is SYSLOG
# auto uses platform.system() to determine predefined paths
# Values: [ auto | FILE ] Default: auto
syslogsocket = auto
socket = /var/run/fail2ban/fail2ban.sock
設定 socket 文件與守護程式連結溝通。默認位置是 /var/run/fail2ban/fail2ban.sock
# Option: socket
# Notes.: Set the socket file. This is used to communicate with the daemon. Do
# not remove this file when Fail2ban runs. It will not be possible to
# communicate with the server afterwards.
# Values: [ FILE ] Default: /var/run/fail2ban/fail2ban.sock
#
socket = /var/run/fail2ban/fail2ban.sock
pidfile = /var/run/fail2ban/fail2ban.pid
設定 PID 文件來存儲 Fail2Ban 伺服器的進程 ID。默認位置是 /var/run/fail2ban/fail2ban.pid。
# Option: pidfile
# Notes.: Set the PID file. This is used to store the process ID of the
# fail2ban server.
# Values: [ FILE ] Default: /var/run/fail2ban/fail2ban.pid
#
pidfile = /var/run/fail2ban/fail2ban.pid
在 jail.conf 中的設定分為多個區塊,[INCLUDES] 區塊指定要事先引入的其他設定檔路徑,[DEFAULT] 區塊中的參數屬於全域性的預設設定值,在個別系統服務的 jail 設定區塊中(例如 [sshd])也可以覆蓋掉這些設定。
相反,製作原始文件的副本並將其命名為jail.local。使用它,您將能夠自定義和設置過濾器和操作,例如ignoreip、bantime、findtime、maxretry和backend。
首先將 jail.conf 複製為 jail.local:
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
然後編輯 jail.local 設定檔,調整自己所需要的設定值。以下是一些常用的參數設定與範例。
若要設定 IP 位址的白名單,可以修改 ignoreip 參數,ignoreip 的值可以是多個 IP 位址、CIDR 網段、DNS 主機名稱,各 IP 之間以空白分隔,例如:
ignoreip = 127.0.0.1/8 0.0.0.0
bantime 參數可設定每一次阻擋攻擊來源的持續時間,預設是 10 分鐘或是600秒,以下是一些設定範例:
bantime = 600
以下是所有可用的時間單位:
單位 | 說明 |
---|---|
s | 秒 |
m | 分鐘 |
h | 小時 |
d | 天 |
w | 週 |
mo | 月 |
y | 年 |
findtime 與 maxretry 參數是用來設定判定為惡意攻擊的門檻,findtime 是一段觀察時間,而 maxretry 則是錯誤次數(例如登入失敗次數),當發現在 findtime 所設定的時間區間內出現的錯誤次數達到 maxretry 的設定值,則判定為惡意攻擊,並進行阻擋。以下是一個設定範例:
findtime = 10m
maxretry = 5
findtime 參數所採用的時間格式跟 bantime 相同。
filter 參數可以指定要採用的識別規則(filter)設定檔以及選用的模式(mode),預設會使用服務的名稱搭配預設的 normal 模式,這部分的設定在大部分的情況下不需要更動:
# 指定 filter 的模式
mode = normal
# 以服務區塊名稱作為識別規則(filter)設定檔名稱
filter = %(__name__)s[mode=%(mode)s]
這裡的識別規則(filter)設定檔名稱就對應到 /etc/fail2ban/filter.d/ 目錄之下的設定檔(不包含 .conf)。以 sshd 這個例子來說,預設就會採用 /etc/fail2ban/filter.d/sshd.conf 這個設定檔中 normal 模式的識別規則。
Fail2ban 的 action 就是指當判定為惡意攻擊時,所要採取的動作,預設的 action 設定只會對攻擊來源 IP 進行阻擋,若要採取其他的動作,就可以修改這個參數。
若希望 Fail2ban 在阻擋攻擊來源的時候,可以一併發出含有 whois 報表的 email 通知,可以將 action 參數設定為 action_mw:
action = %(action_mw)s
若將 action 設定為 action_mwl,則可自動發出含有 whois 報表以及相關記錄的 email 通知信:
action = %(action_mwl)s
這些 action 相關設定的原始定義都在 jail.conf 設定檔中,若要設定 email 通知信的寄送信箱,可以參考原始定義並修改 destemail 參數。預設的 destemail 設定會讓 email 通知信寄送至本機的 root 管理者信箱:
destemail = root@localhost
若要指定 email 通知信的寄件者,可以修改 sender 參數:
sender = xxxxx@gmail.com
除了以上兩種 action 組合之外,在 jail.conf 中還有其他許多種 action 組合可以選擇。
此功能允許您指定文件修改的後端設置。默認值為 auto,但如果你使用 CentOS 或 Fedora,則需要 systemd。
以下是您可以選擇的可用值:
Fail2ban 的 jail 設定是用來指定要針對哪一些系統上的服務進行監控,並指定各服務所採用的篩選條件(filter)與動作(action),在預設的 jail.conf 設定檔中已經提供了各種常見服務的設定樣板,例如 sshd、apache-auth、nginx-http-auth、openwebmail、drupal-auth 等,而在預設的狀態下只有啟用 sshd 服務的監控。
在個別的服務區塊中,可以透過 enabled 參數來指定是否啟用,另外也可以指定個別服務專用的設定值,這裡的設定會覆蓋掉前面全域的設定值,以下是一個 sshd 的設定範例:
[sshd]
enabled = true
maxretry = 3
findtime = 1d
bantime = 4w
ignoreip = 127.0.0.1/8 xxx.xxx.xxx.xxx
調整完 Fail2ban 的設定之後,要重新啟動 fail2ban 服務才會讓新設定生效。
systemctl restart fail2ban
Fail2ban 的記錄檔預設放在 /var/log/fail2ban.log,我們可以在這個記錄檔中查看有哪些 IP 位址被偵測、判定為異常攻擊,以及阻擋 IP 位址與解除阻擋的記錄。
Fail2ban 附帶了一個 fail2ban-client 工具,可以用來設定與操控 Fail2ban 系統服務,以下是常用的幾個操作指令。
fail2ban-client status 可以查看指定服務的 Fail2ban 狀態,包含採用的 filters 與 actions:
fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 7
| |- Total failed: 8888
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 2
|- Total banned: 1688
`- Banned IP list: xxx.xxx.xxx.xxx yyy.yyy.yyy.yyy
在 Filter 中可以看到其採用的系統記錄檔,而 Actions 中則會列出目前被阻擋(列入黑名單)的 IP 位址清單。
若只是查詢被 Fail2ban 阻擋的 IP 位址清單,可以使用以下指令:
fail2ban-client get sshd banip
被 Fail2ban 阻擋的 IP 位址會在 bantime 所設定的時間之後自動解除,若要提前開放特定的 IP 位址,可以使用以下指令:
fail2ban-client set sshd unbanip xxx.xxx.xxx.xxx
若要解除所有被 Fail2ban 阻擋的 IP 位址,可以加上 –all 參數:
fail2ban-client set sshd unbanip --all
IP 位址白名單也可以透過 fail2ban-client 指令手動調整:
# 在 sshd 服務中加入白名單 IP 位址
fail2ban-client set sshd addignoreip xxx.xxx.xxx.xxx
# 在 sshd 服務中移除白名單 IP 位址
fail2ban-client set sshd delignoreip xxx.xxx.xxx.xxx
除了這幾個常用功能之外,fail2ban-client 還有非常多的功能,詳細的說明可以參考 fail2ban-client 指令的線上手冊或參數說明:
# 查詢 fail2ban-client 線上手冊
man fail2ban-client
# 顯示 fail2ban-client 參數說明
fail2ban-client -h
Fail2Ban 是日誌解析軟體,有助於保護 Linux 的網頁伺服器免受網路攻擊。
本文章示範如何在流行的操作系統上安裝 Fail2Ban,例如 Ubuntu、CentOS、Debian 和 Fedora。我們還說明如何編輯軟件的配置文件 fail2ban.local 和 jail.local 。
我們希望本文章能幫助您在 Linux 伺服器上設定 Fail2Ban。如果您有任何問題或建議,請將其留在下面的評論部分。
是的,它是伺服器安全的重要組成部分。Fail2Ban 將幫助保護您的機器免受試圖登錄您的主機網路攻擊。
UFW 是一個額外的安全層,可保護您的伺服器免受 port 掃描攻擊。雖然 Fail2Ban 使用 iptables 作為默認防火牆系統,但您可以自性設定軟體並啟用 UFW。
DDoS 是一種惡意嘗試攻擊,通過向目標伺服器或服務發送虛假請求來中斷其運行。使用 Fail2Ban 的 jail 配置文件,您可以創建自定義規則來檢測過多的請求並阻止其來源。