在 RunCloud 管理的伺服器上使用 fail2ban 禁止暴力破解 WordPress 的 wp-login.php
的 IP 地址。
增加一個 WordPress 過濾規則在 fail2ban 目錄裡
建立一個 wordpress.conf
文件,放入 /etc/fail2ban/filter.d/
目錄下:
[Definition]
failregex = ^<HOST> .* "POST .*wp-login.php
^<HOST> .* "POST .*xmlrpc.php
ignoreregex =
如果只想要 wp-login.php
,可以將 xmlrpc.php
這一行刪除
增加一個 WordPress 過濾規則在 fail2ban Jail 設定
建立一個 wordpress.conf
文件,放入 /etc/fail2ban/jail.d/
目錄下:
[wordpress]
enabled = true
usedns = no
port = http,https
filter = wordpress
banaction = firewallcmd-new
logpath = /home/*/logs/nginx/*_access.log
maxretry = 4
findtime = 1200
bantime = 86400
修改限制請修改這 3 個參數:
- maxretry
- bantime
- findtime
此設定是 20 分鐘內容允登入 4 次,超出此範圍,IP 會被禁止,最好將自己的 IP 加入白名單。
logpath 是使用 RunCloud 日誌路徑和 firewallcmd-new 掛鉤的 banaction 值,所以,你可以在 RunCloud 控制台中看到被 failed2ban 禁止的 IP。
重新啟動 fail2ban
service fail2ban restart
檢查 fail2ban 日誌
檢查 fail2ban日誌內容,確認載入是否有錯誤
tail -f /var/log/fail2ban.log
檢查 wordpress Jail 狀態
可以檢查 WordPress jail 狀態
fail2ban-client status wordpress
這裡可以看到日誌文件列表和任何被禁止的 IP 地址。
手動禁止 IP 地址
fail2ban-client set wordpress banip 1.2.3.4
手動取消禁止 IP 地址
fail2ban-client set wordpress unbanip 1.2.3.4
在 fail2ban 中將 IP 地址永久列入白名單
永久允許你的 IP 地址,請將加入到 /etc/fail2ban/jail.local
中作為 ignoreip 中的值。
對於多個地址,用空格分隔它們,還要添加主機 IP 地址。
[DEFAULT]
ignoreip = 127.0.0.1/8 1.2.3.4
bantime = 86400
findtime = 43200
maxretry = 6
...
然後重新啟動 fail2ban
service fail2ban restart
