🔄 完整重置 Fail2ban(快速清空封鎖與規則)

當出現大量誤封、測試結束、或規則混亂時,
可以將 Fail2ban 重置回乾淨狀態。

以下是最直接的完整重置方法。


⚠️ 注意

此操作會:

  • 清空所有被封鎖 IP
  • 刪除封鎖歷史資料
  • 清空所有 f2b-* 防火牆規則
  • 重新建立 jail 規則

請確保你仍有伺服器存取權限。


✅ 重置步驟

1️⃣ 停止 Fail2ban

systemctl stop fail2ban

2️⃣ 刪除封鎖資料庫(關鍵)

rm -f /var/lib/fail2ban/fail2ban.sqlite3

這一步會清除所有封鎖歷史與 recidive 記錄。


3️⃣ 清空防火牆規則

iptables -F
iptables -X

清除所有自訂 chain(包括 f2b-*)。


4️⃣ 重新啟動 Fail2ban

systemctl start fail2ban

系統會:

  • 自動建立新的資料庫
  • 重新載入 jail
  • 重建 f2b-* chain

✅ 可選:清空 fail2ban log(僅為閱讀乾淨)

truncate -s 0 /var/log/fail2ban.log

注意:
這不影響封鎖狀態,只是清空顯示紀錄。


✅ 完整指令總結

systemctl stop fail2ban
rm -f /var/lib/fail2ban/fail2ban.sqlite3
iptables -F
iptables -X
systemctl start fail2ban

✅ 結語

當規則混亂或測試過程造成大量封鎖時,
回到乾淨狀態,往往比逐條排錯更有效率。

清楚、可控、可驗證,
才是穩定運行的基礎。

🔐 如何檢查及解除 Fail2ban 封鎖的 IP(實戰步驟)

在管理伺服器時,偶爾會遇到某個 IP 被 Fail2ban 封鎖的情況。
這篇文章介紹如何:

  • ✅ 查出是否被封
  • ✅ 找出是哪個 jail 封鎖
  • ✅ 正確解除封鎖
  • ✅ 驗證是否完全清除

以下示例 IP 使用:

X.X.X.X

請替換為實際需要查詢的 IP。


✅ 第一步:查看 Fail2ban log

先從日誌確認是否曾被封鎖:

grep X.X.X.X /var/log/fail2ban.log

如果看到類似:

[sshd] Ban X.X.X.X

代表該 IP 曾被某個 jail 封鎖。


✅ 第二步:確認目前是否仍被封鎖

使用 fail2ban 內建查詢指令:

fail2ban-client banned X.X.X.X

如果該 IP 仍在封鎖名單中,會顯示對應 jail 名稱。

如果沒有任何輸出,代表目前沒有被 Fail2ban 封鎖。


✅ 第三步:解除封鎖(Unban)

若確認需要解除封鎖:

fail2ban-client unban X.X.X.X

這條指令會:

  • 從所有 jail 中移除該 IP
  • 同時更新防火牆規則

✅ 第四步:確認 firewall 是否已清除

Fail2ban 會透過 iptables 或 nftables 進行封鎖。

如果系統使用 iptables,可檢查:

iptables -L -n | grep X.X.X.X

若沒有任何輸出,表示防火牆規則已移除。


✅ 建議完整排查流程

grep X.X.X.X /var/log/fail2ban.log
fail2ban-client banned X.X.X.X
fail2ban-client unban X.X.X.X
fail2ban-client banned X.X.X.X
iptables -L -n | grep X.X.X.X

✅ 補充說明

  • Fail2ban 只負責管理封鎖名單
  • 真正丟棄封包的是防火牆規則
  • 若 unban 後仍無法連線,應檢查是否有其他防火牆或 CDN 層封鎖

✅ 結語

正確的排查順序應為:

  1. 查 log
  2. 查 jail 狀態
  3. 執行 unban
  4. 驗證防火牆

避免直接重啟服務或修改設定,
精準排錯才是穩定運行的關鍵。

WordPress 檔案權限標準設定整理

以下是 WordPress 建議的標準檔案權限設定方式,適合大多數主機環境使用。


一、整個網站權限

# 設定資料夾
find /你的wordpress路徑/ -type d -exec chmod 755 {} \;

# 設定檔案
find /你的wordpress路徑/ -type f -exec chmod 644 {} \;

二、uploads 資料夾

find wp-content/uploads -type d -exec chmod 755 {} \;
find wp-content/uploads -type f -exec chmod 644 {} \;

三、wp-config.php

chmod 600 wp-config.php

或:

chmod 640 wp-config.php

四、檔案擁有者

確認網站檔案擁有者正確,例如:

chown -R www-data:www-data /你的wordpress路徑/

(依主機環境調整使用者名稱)


五、建議安全設定

wp-content/uploads 新增 .htaccess

<Files *.php>
deny from all
</Files>

以上為 WordPress 常見且建議的標準權限設定方式。

使用 Cloudflare WAF 保護 WordPress:阻止 wp-login 攻擊與封鎖 XMLRPC(完整教學)

當你的 WordPress 網站開啟 Cloudflare 橙色雲(Proxy)後,其實 HTTP 攻擊應該在 Cloudflare Edge 層解決,而不是在伺服器層解決

很多人仍然使用 Fail2ban 嘗試封鎖 wp-login 攻擊,但在橙雲模式下:

  • 真正連線來源是 Cloudflare IP
  • iptables 無法阻擋真實攻擊者
  • 即使封鎖 IP 仍然會有流量進來

✅ 正確做法是使用 Cloudflare WAF Custom Rules。

本教學會示範兩條最重要的規則:

  1. 保護 wp-login.php
  2. 封鎖 xmlrpc.php

✅ 第一條規則:保護 wp-login.php

為什麼需要?

WordPress 的登入頁面:

/wp-login.php

是全球機器人暴力破解的主要目標。

即使你沒有公開登入頁,掃描機器仍然會嘗試。


🔧 建立規則步驟

Step 1:進入 Cloudflare

  1. 登入 Cloudflare
  2. 選擇你的網站
  3. 點擊:
Security → WAF → Custom Rules
  1. 點擊:
Create rule

Step 2:設定 Rule Name

請填寫:

WP-Login Protection

Step 3:點擊「Edit expression」

不要使用上方 Select 下拉選單。

請點擊右側:

Edit expression

Step 4:貼上以下 Expression

(http.request.uri.path contains "/wp-login.php")

如果你希望自己的固定 IP 不被影響,可以使用:

(http.request.uri.path contains "/wp-login.php")
and not ip.src in {你的IP地址}

例如:

(http.request.uri.path contains "/wp-login.php")
and not ip.src in {1.2.3.4}

Step 5:選擇 Action

在「Then take action」中選擇:

Managed Challenge

不要使用 Block,除非你 100% 不需要外部登入。


Step 6:點擊 Deploy

完成 ✅


✅ 效果說明

設定後:

  • 大部分 bot 會被 Challenge 阻擋
  • 真人用戶幾乎無感
  • 攻擊流量不再直接打到伺服器
  • CPU 使用率會下降

✅ 第二條規則:封鎖 XMLRPC


為什麼需要?

WordPress 的:

/xmlrpc.php

經常被利用作:

  • 暴力破解
  • Pingback 攻擊
  • DDoS 放大攻擊

如果你沒有使用:

  • Jetpack
  • WordPress App
  • 遠端發佈功能

✅ 建議直接封鎖。


🔧 建立規則步驟

Step 1:Create rule

同樣進入:

Security → WAF → Custom Rules

點擊:

Create rule

Step 2:Rule Name

填寫:

Block XMLRPC

Step 3:Edit expression

貼上:

(http.request.uri.path contains "/xmlrpc.php")

Step 4:Action

選擇:

Block


Step 5:Deploy

完成 ✅


✅ 建議規則順序

在 Custom Rules 頁面,請確保順序如下:

  1. Block XMLRPC
  2. WP-Login Protection

Cloudflare 會由上而下執行規則。


✅ 設定完成後的架構

啟用後流量流程變成:

攻擊者 → Cloudflare WAF → 被挑戰/封鎖 → 無法到達伺服器

而不是:

攻擊者 → 伺服器 → Fail2ban 分析 → 再封鎖

✅ 安全性更高
✅ 伺服器負載更低
✅ 不再需要 Fail2ban API 同步


✅ 常見問題

Q1:會不會影響 Google?

不會。

Cloudflare 會識別合法 bot,Managed Challenge 不會影響正常搜尋引擎。


Q2:是否還需要 Fail2ban?

建議:

  • 保留 Fail2ban 用於 SSH
  • 保護未使用 Cloudflare 的網站
  • 保護 API 服務

但對 HTTP WordPress 攻擊,可以完全交給 Cloudflare。


✅ 總結

只需兩條規則,你就可以:

  • 阻止 90% WordPress 掃描攻擊
  • 減少伺服器負載
  • 不再依賴 API 封鎖
  • 架構更清晰

Cloudflare WAF 應該成為橙雲網站的第一層防線,而不是伺服器。