MIS 腳印 logo

MIS 腳印

記錄 IT 學習的軌跡

WordPress 透過 WP Fail2Ban Redux 阻擋封鎖重覆登入失敗 IP for CentOS 8

在 CentOS 透過 Fail2ban 搭配 WordPress 的 WP Fail2Ban Redux 外掛,即可將重覆登入失敗 WordPress 達到指定次數的 IP,立即透過系統的 firewall (防火牆) 直接阻擋封鎖該 IP。

WordPress.ORG

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-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:

vim /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

參考

發表迴響