在 CentOS 中使用 Fail2ban 阻止暴力攻擊 WordPress

WordPress 目前已經是世界上最多人使用的 CMS 系統,隨之而來的就是對於他的攻擊也越來越多,不過根據個人經驗,如果有在定期更新核心、外掛、主題,其實比較常見的問題反而是,使用者的密碼太弱被猜測到導致網站被入侵。

除了確保自己的密碼難易度夠之外,比較常看到的做法會是加上像是 Google reCAPTCHA,或是其他驗證的方式,不過你有想過嗎?駭客是不需要對你的 wp-login.php 做嘗試,很多驗證用的外掛也僅能保護從 wp-login.php 的登入,如果走的是 wp-json 甚至是單純對 xmlrpc.php 不斷的發出請求,持續消耗資源導致網站不堪負荷而停止服務,透過外掛也難防這些討厭的攻擊。

聰明的你一定想過,使用外掛來選擇停用 xmlrpc.php 或是其他功能,不過就以最常見的外掛 Jetpack 來說,你知道他需要使用 xmlrpc.php 來跟你的網站溝通嗎?停用後 Jetpack 部分的功能就會不正常運作,因此比較好的方法不是去停用它,而是阻止攻擊。

以下使用 CentOS 7 與 iptables 作為防火牆。

首先輸入以下指令進行安裝 fail2ban:
yum install fail2ban

安裝完成後可以透過常用的編輯器編輯一個空的檔案
/etc/fail2ban/jail.local

可以參考以下的內容:
[DEFAULT]
ignoreip = 118.163.92.212
banaction = iptables-multiport

[wordpress-rule]
enabled = true
port = http,https
filter = wordpress-rule
logpath = /var/log/nginx/site.log
maxretry = 30
findtime = 60
bantime = -1

上面的設定是指在 60 秒內符合規則 30 次就永久封鎖 ip,對於其他設定值有興趣,可以再透過 Google 搜尋一下這些設定值對於 fail2ban 的意義,本次不多作介紹。

接著則是比對規則的設定,透過常用的編輯器編輯
/etc/fail2ban/filter.d/wordpress-rule.conf

可以參考以下內容:

上面的設定就是比對出對於 wp-json、wp-login.php、xmlrpc.php 發出 GETPOST 的請求,不過要注意的是,如果 log 的格式跟我的不同,那就需要進行修改,以下是我的 log 格式。

可以透過 fail2ban-regex 來測試規則是否可以比對到,使用方法如下
fail2ban-regex <log-檔案> <fail2ban-規則>,例如:
fail2ban-regex /var/log/nginx/access.log /etc/fail2ban/filter.d/wordpress-rule.conf

都設定完成後,輸入
systemctl enable fail2ban
開機時啟用
systemctl start fail2ban
現在啟動 fail2ban

現在可以輸入 iptables -L,看一下是不是有一個新的區域叫做 f2b-wordpress-rule,透過 fail2ban-client status 也能看到是不是你的規則出現在列表中。

相關推薦:


CVE-2018-6389 Fail2ban Rule
Fedora 安裝 Fail2ban 防止暴力破解 ssh

cras4202tw
cras4202tw
我是 cras4202tw,有多年使用 WordPress 與伺服器維運經驗,目前在鴻海科技集團富盈數據擔任工程師,負責的網站總流量每個月超過千萬次瀏覽。更多關於我...點我