網路攻擊猖獗,隨時都有駭客想要破解你的 WordPress,該怎麼防範才能保護自己的網站呢?這裡分享幾個我覺得還不錯的方法供大家參考!
目錄
基本方法
基本方法雖然不能阻擋駭客攻擊,但能夠減少攻擊容易度或損失,同時也是大部分使用者都能簡單做到的方法。
勤做備份
最基本的是備份,雖然網站被攻擊或是挾持,但只要有備份就能快速還原,減少損失。
如果是託管架站的方式,需要確認是否提供每天備份的服務。如果是自行架設,簡單寫個 script 跑 daily cronjob,dump MySQL 資料,並且壓縮整個 wp 資料夾即可。亦可將備份檔上傳到雲端或異地,增加備份安全性。
以下是一個簡單的備份 script 範例,dump db 並與 wordpress 檔案(包含 wordpress source code 以及 wp-content 等資料夾)一起壓縮後,用 rclone 上傳到雲端的流程。
#!/bin/bash
echo "========================================================="
echo "Dump db"
echo "========================================================="
docker exec wordpress_db bash -c "mysqldump -h localhost -u root -p<YOUR_PASSWORD> wordpress > /tmp/db_dump/wordpress_db_dump.sql"
echo "========================================================="
echo "Start tar wordpress files"
echo "========================================================="
sudo tar zcvPf /home/ubuntu/wordpress_$(date '+%Y%m%d').tar.gz /home/ubuntu/wordpress
echo "========================================================="
echo "Upload backup file: wordpress_$(date '+%Y%m%d').tar.gz"
echo "========================================================="
rclone copy /home/ubuntu/wordpress_$(date '+%Y%m%d').tar.gz backup:/ -P
echo "========================================================="
echo "Clean backup files"
echo "========================================================="
sudo rm /home/ubuntu/wordpress_$(date '+%Y%m%d').tar.gz
sudo rm /home/ubuntu/wordpress/db_dump/wordpress_db_dump.sql
echo "========================================================="
echo "Backup finish"
echo "========================================================="
用長密碼
根據自身觀察,駭客最喜歡做的是暴力破解 WordPress 帳號密碼,常常會看到 /wp-login.php
的訪問來自世界各地。因此使用長密碼的方式做最基本的保護,即能阻擋大部分的攻擊。
隱藏 WordPress 版本號
WordPress 預設會在 html 中寫入目前版本號,這無疑是給駭客最好的禮物,讓他可以針對版本特定的漏洞下去攻擊。
檢驗方式很簡單,在網頁按右鍵,選擇 檢視網頁原始碼
,搜尋 generator
或 wordpress
,在最初幾行就會看到
<meta name=generator content="WordPress x.x.x">
到後台 Appearance > Theme Editor
頁面,在右邊點選 functions.php
,於文字編輯器最後一行的 ?>
前加入
remove_action('wp_head', 'wp_generator');
再次檢驗,版本號就會消失在網頁原始碼中
進階方法
以下進階方法需要一點基本網路概念,但操作起來也不難,就讓我們一起試試!
使用 CloudFlare
用 CloudFlare 擋在你的網站前面,避免駭客直接攻擊網站伺服器。透過 CloudFlare 可以簡單做防火牆規則,也能快速緩減 DDoS 攻擊(只需要一個開關),而且這些功能都是免費!何不使用看看呢?
以下皆以 CloudFlare 來實現各種限制。
限制後台訪問 IP
駭客最想要破解你的帳號密碼登入後台,因此我們直接阻斷破解帳密的管道,讓後台的登入和管理頁面只有特定 IP 能夠訪問。
在 CloudFlare Dashboard 中,進入 網路安全 > WAF
頁面,第一頁即是 防火牆規則
,免費版可以設定 5 個,相當夠用!我們立刻新增一個阻擋後台登入的規則:
(
http.request.uri.path contains "wp-login.php" or
http.request.uri.path contains "/admin" or
http.request.uri.path contains "wp-admin"
) and not ip.src in {XXX.XXX.XXX.XXX}
其中 xxx.xxx.xxx.xxx
為特定 IP。
並在下方選擇 封鎖
整個規則意思為:當網頁路徑包含 wp-login.php
、/admin
、wp-admin
,且 IP 不是我們指定的值時,就封鎖
他。
阻擋 xmlrpc.php
僅阻擋 login 和 admin 頁面可能不夠,WordPress 還提供 RPC API,讓使用者可以用 Mobile APP 登入
WordPress,因此駭客也能使用 RPC API 做暴力破解!如果平常不會使用的話,乾脆直接阻擋掉即可。
同時亦可在 nginx 阻擋 xmlrpc.php
的訪問,多一層保障!
server {
...
location /xmlrpc.php {
return 404;
}
...
}
限制 wp-json 訪問 IP
駭客也會透過 WordPress 提供的 REST API 來探測使用者的資訊輔助暴力破解。但正常使用後台時仍需要 REST API ,不能完全阻擋,因此我們可以把路徑 wp-json
加在先前限制訪問 IP 的規則中
(
http.request.uri.path contains "wp-login.php" or
http.request.uri.path contains "/admin" or
http.request.uri.path contains "wp-admin" or
http.request.uri.path contains "wp-json"
) and not ip.src in {XXX.XXX.XXX.XXX}
自動化監控
如果是自己的機器,可以使用 Datadog 等雲端監控服務,設定 Monitors 觀察系統參數,如果有不正常的 CPU 負載或是網路流量,可能正遭受暴力攻擊或是 DDoS 攻擊。
此時到 CloudFlare 開啟 Under Attack 模式
先無條件過濾
再查看 request log 確定問題所在
以上是我覺得保護 WordPress 網站的 8 個方法,大家可以一起試試看!
延伸閱讀:
WordPress 部落格被攻擊全記錄
0元用 Raspberry pi 架設自己的 WordPress 網站 #3 速度優化