如何在WordPress網站上設置fail2ban?

什麼是Fail2ban

Fail2ban是一個工具,你可以用它來減少攻擊對你的伺服器的影響。 通常情況下,您將其配置為監控日誌檔中的可疑活動。 一旦該活動超過一個閾值,你可以讓它採取某種行動,如在防火牆中阻止源IP位址。 這是一個早期阻止攻擊的好方法,但並不能完全防止它們。

為什麼用它來保護WordPress

由於WordPress非常流行,WordPress經常成為自動攻擊的目標。 我們經常看到針對xmlrpc.php或wp-login.php的暴力攻擊,這些攻擊依賴於大量的請求,希望最終能有一個成功。 使用強大的密碼,特別是有管理許可權的帳戶,對減少攻擊的風險非常重要。 Fail2ban可以用來減緩攻擊者的速度。 這有兩個原因:它使他們不太可能成功; 它減少了處理這些請求給伺服器帶來的負載。

其他選擇

  • 使用外部Web應用防火牆(WAF),如Sucuri或Cloudflare。
  • 使用網站伺服器配置選項來限制請求,如Nginx的limit_req。
  • WordPress安全外掛程式,如Wordfence。

盡可能在上游阻止攻擊總是有利於節省資源,所以我們通常傾向於使用網路應用程式防火牆或網路伺服器配置,而不是使用fail2ban或WordPress外掛程式,但每個網站、伺服器和客戶都是不同的,所以這將取決於所使用和需要的確切配置。

安裝和配置fail2ban(適用於Ubuntu)

sudo apt-get install fail2ban

Fail2ban的工作原理是有一個引用日誌檔的監獄檔,一個篩檢程式和一個動作。 默認情況下,fail2ban會保護sshd。 如果你以其他方式限制SSH訪問,那麼你可能想把它關掉。 你可以通過在/etc/fail2ban/jail.local中創建以下內容來做到這一點

[sshd] enabled = false

Fail2ban並沒有為WordPress提供一個篩檢程式。 我想感謝這兩篇文章提供了一個好的起點。 我們經常看到對『Xmlrpc.php』(注意雙斜杠)的請求,所以對下面的內容進行了調整,以標記它們。 由於這是在檢測任何對wp-login/xmlrpc的請求,當合法的管理員用戶登錄時,它將會被標記出來。 我們將在監獄的配置中考慮到這一點。

你可以在/etc/fail2ban/filter.d/wordpress.conf中創建這個篩檢程式。

[Definition]
failregex = ^<HOST> .* "(GET|POST) /+wp-login.php HTTP.* 200
                     ^<HOST> .* "(GET|POST) /+xmlrpc.php HTTP.* 200

jail檔有大部分的配置選項。

  • logpath,在這裡是指Apache訪問日誌的路徑
  • action,如果你使用的是不同的防火牆,或者想用電子郵件代替,可以在/etc/fail2ban/action.d/中查看可用的選項,調整這個。
  • maxretry,在findtime秒內禁止的請求的數量。
  • bantime,禁止的秒數,在這個動作中,它們在iptables中被阻止的時間。
  • 如前所述,該過濾器將同時捕獲惡意和合法使用者。 我們將maxrety配置得相當高,bantime配置得相對較低,以盡量減少合法使用者被封的概率和影響。 雖然這允許攻擊者每10秒發出一個請求,但這隻是他們在沒有fail2ban的情況下發出請求的一小部分。

你可以以/etc/fail2ban/jail.d/wordpress.conf的形式創建jail檔。

[wordpress]
enabled = true
port = http,https
filter = wordpress
action = iptables-multiport[name=wordpress, port="http,https", protocol=tcp]
logpath = /var/log/apache2/all-sites-access.log
maxretry = 12
findtime = 120
bantime = 120

重新啟動fail2ban以載入你的新配置

sudo systemctl restart fail2ban

檢查你的fail2ban設置

查看jails

sudo fail2ban-client status

顯示關於WordPress jails的資訊

sudo fail2ban-client status wordpress

列出F2B-wordpress的iptables鏈(這將在fail2ban第一次阻止一個IP時創建,並包含被阻止的IP)。

sudo iptables -v -n -L f2b-wordpress
sudo ip6tables -v -n -L f2b-wordpress

查看日誌,以查看任何被禁止或標記的IP

sudo less /var/log/fail2ban.log
分享你的喜愛

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *