學習如何有效地保護你的伺服器,是每個網站架設者和伺服器管理員都必須具備的重要技能。而 UFW (Uncomplicated Firewall) 和 Fail2Ban 這兩個強大的工具,能幫助你輕鬆建立起一道堅固的防線,抵禦各種網路攻擊。這堂課將深入探討 UFW 和 Fail2Ban 的進階技巧,讓你更有效率地管理伺服器安全,並提升你的網站防護能力。 例如,透過進階的 UFW 配置,我們可以限制每分鐘的 SSH 連線次數,有效防止暴力破解攻擊,即使面對 DDoS (分散式阻斷服務) 攻擊,也能減輕其影響。 UFW 進階規則 UFW 是一個簡單易用的防火牆,但它也提供許多進階功能,讓你更精細地控制伺服器網路流量。
- 限制連線速率: 你可以限制特定服務的連線速率,例如限制每分鐘 SSH 連線數量,避免暴力破解攻擊。 設定方法通常需要用到
ufw rate-limit
選項。例如,限制每分鐘 SSH 連線不超過 5 次的指令如下:sudo ufw rate-limit logprefix="LIMIT SSH" ssh
這條指令會記錄超過限制的嘗試,並將其封鎖一段時間。 - 允許特定 IP 範圍: 你可以設定 UFW 允許特定 IP 地址或 IP 範圍存取你的伺服器,提高安全性並防止來自不受信任來源的訪問。 你可以使用 IP 網段表示法(例如 192.168.1.0/24)指定 IP 範圍。
- 拒絕特定埠號: 除了允許特定連線,你也可以主動拒絕特定埠號的連線,以提升安全性。 例如,如果你不需要使用 22 埠以外的 SSH 連線,就可以設定 UFW 拒絕其他埠號的 SSH 連線。 Fail2Ban 客製化監獄 Fail2Ban 能自動封鎖惡意 IP 地址。 透過客製化監獄檔案 (jail),我們可以針對特定服務設定不同的封鎖規則。
- 創建自訂 jail 檔案: 你可以針對 WordPress 的 wp-login.php 檔案建立一個客製化的監獄,監控錯誤登入嘗試。 這需要編輯 Fail2Ban 的 jail 配置檔案,例如
/etc/fail2ban/jail.local
,新增一個監獄,指定要監控的日誌檔案、過濾器和封鎖時間。 - 監控 Nginx 日誌: 你可以設定 Fail2Ban 監控 Nginx 的錯誤日誌,偵測異常的請求並封鎖來源 IP。這需要在 jail 配置檔案中指定正確的日誌檔案路徑和過濾器。 一個簡單的例子:
[nginx-bruteforce]
enabled = true
port = http,https
filter = nginx-badbots
logpath = /var/log/nginx/error.log
日誌分析與監控 定期檢查日誌能幫助你及時發現問題。 - UFW 日誌:
/var/log/ufw.log
檔案記錄了 UFW 的所有活動,包含被封鎖的連線。 學習閱讀 UFW 日誌能幫助你瞭解你的伺服器面臨的網路攻擊類型。 - Fail2Ban 日誌:
/var/log/fail2ban.log
檔案記錄了 Fail2Ban 的活動,包含被封鎖的 IP 地址和原因。 你可以使用fail2ban-client status
指令查看 Fail2Ban 的狀態和被封鎖的 IP。 故障排除技巧 即使設定再仔細,也可能遇到問題。 - UFW 規則衝突: 如果 UFW 規則衝突,可能會導致某些連線無法正常運作。 仔細檢查你的 UFW 規則,並使用
sudo ufw status
檢查現有規則,找出衝突的地方。 - Fail2Ban 誤封合法用戶: 如果 Fail2Ban 誤封了你的合法 IP,你可以使用
fail2ban-client unban <IP>
解除封鎖。 也可以調整 Fail2Ban 的設定,例如調整maxretry
參數來降低誤判率。 課堂練習 為了讓各位更熟悉 UFW 和 Fail2Ban 的操作,我們將進行以下練習:- 為 WordPress 配置一個 Fail2Ban 自訂監獄,監控 wp-login.php 的錯誤登入嘗試。
- 使用 UFW 設定限制每分鐘 SSH 連線不超過 3 次的速率限制。
- 檢查 UFW 和 Fail2Ban 日誌,確認規則是否生效。 結語 學習 UFW 和 Fail2Ban 的進階技巧,能有效提升你的伺服器安全性。 希望透過今天的課程,你們能對伺服器安全有更深入的了解。 未來,可以進一步探索更進階的安全工具,例如 SELinux (Security-Enhanced Linux) 或入侵檢測系統 (IDS),持續提升你的伺服器安全防護能力。 記住,伺服器安全是一個持續學習和改進的過程,唯有持續關注和精進,才能確保你的伺服器長期安全穩定地運作。