WordPress 透過 WP Fail2Ban Redux 阻擋封鎖重覆登入失敗 IP for CentOS 8
在 CentOS 透過 Fail2ban 搭配 WordPress 的 WP Fail2Ban Redux 外掛,即可將重覆登入失敗 WordPress 達到指定次數的 IP,立即透過系統的 firewall (防火牆) 直接阻擋封鎖該 IP。
Fail2ban
安裝
安裝 Fail2ban (CentOS 8 以下版本可參考 CentOS 7 Fail2ban 抵檔重複登入失敗的 IP):
dnf install fail2ban
開機自動啟用且立即啟用 fail2ban:
systemctl enable --now fail2ban
Created symlink /etc/systemd/system/multi-user.target.wants/fail2ban.service → /usr/lib/systemd/system/fail2ban.service.
設定檔說明
/etc/fail2ban/ # Fail2ban 軟體目錄 ... ├── filter.d/*.conf # 指定如何檢測身份驗證失敗的過濾條件 ├── action.d/*.conf # 用來定義動作 (action) 內容,目錄下已定義多種既有的動作內容,如 sendmail 寄信通知、iptables 阻擋來源位址等 ├── jail.d/*.conf # 監獄時機,定義 filter 和 action 的對應關係 (阻擋封鎖 IP 的時機配置) ...
WP Fail2Ban Redux
安裝
安裝 WP Fail2Ban Redux 外掛並啟用。
設定
參考 WP Fail2Ban Redux 安裝進行設定
將 wp-content/plugins/wp-fail2ban-redux/config/filters/ 內的兩個檔案複製到 Fail2Ban 的過濾目錄 /etc/fail2ban/filter.d/:
- wordpress-hard.conf:登入的使用者名稱或電子郵件不存在。
- wordpress-soft.conf:登入的使用者名稱或電子郵件存在,但密碼錯誤。
cp /www-root/wp-content/plugins/wp-fail2ban-redux/config/filters/wordpress-hard.conf /etc/fail2ban/filter.d/
cp /www-root/wp-content/plugins/wp-fail2ban-redux/config/filters/wordpress-soft.conf /etc/fail2ban/filter.d/
將 wp-content/plugins/wp-fail2ban-redux/config/jail/ 內的一個檔案複製到 Fail2Ban 的阻擋封鎖 IP 配置目錄 /etc/fail2ban/jail.d/:
cp /www-root/wp-content/plugins/wp-fail2ban-redux/config/jail/wordpress.conf /etc/fail2ban/jail.d/
使用的作業系統為 CentOS,WordPress 預設會將登入失敗的訊息寫入 /var/log/messages,因此必須將 logpath (日誌路徑) 調整成 CentOS 的預設路徑,並依需求自行調整或新增下列設定:
- filter:使用的過濾器。
- logpath:欲分析的日誌路徑。
- maxtetry:IP 被封鎖前的最大嘗試失敗次數。
- port:要監聽的 port。
- ignoreip:永遠不封鎖的 IP 或主機列表。
- bantime:IP 封鎖時間 (秒)。
vim /etc/fail2ban/jail.d/wordpress.conf
[wordpress-hard] enabled = true filter = wordpress-hard logpath = /var/log/messages maxretry = 2 port = http,https [wordpress-soft] enabled = true filter = wordpress-soft logpath = /var/log/messages maxretry = 5 port = http,https
測試
故意使用不存在的帳號 aaa 登入 WordPress:
登入失敗資訊 (WordPress 網址、登入帳號和 IP) 的確寫入日誌了:
vim /var/log/messages
85473 Sep 26 20:50:32 footmark wp(www.footmark.info)[16828]: Authentication attempt for unknown user aaa from 61.xxx.xxx.132
查看 fail2ban 日誌的確已記錄登入失敗的 IP:
當登入失敗次數達到
maxretry
的設定值,則系統會立即阻擋封鎖該 IPvim /var/log/fail2ban.log
2020-09-26 20:55:50,543 fail2ban.filter [20701]: INFO [wordpress-hard] Found 61.xxx.xxx.132 - 2020-09-26 20:50:32
參考
本著作係採用創用 CC 姓名標示-相同方式分享 3.0 台灣 授權條款授權.
这个网站是wp建设的吗?
對,是 WordPress 建的網站。