什麼是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