網路攻擊猖獗,隨時都有駭客想要破解你的 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 被攻擊的 8 個方法

隱藏 WordPress 版本號

WordPress 預設會在 html 中寫入目前版本號,這無疑是給駭客最好的禮物,讓他可以針對版本特定的漏洞下去攻擊。

檢驗方式很簡單,在網頁按右鍵,選擇 檢視網頁原始碼,搜尋 generatorwordpress,在最初幾行就會看到

<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。

並在下方選擇 封鎖

防範 WordPress 被攻擊的 8 個方法

整個規則意思為:當網頁路徑包含 wp-login.php/adminwp-admin ,且 IP 不是我們指定的值時,就封鎖他。

阻擋 xmlrpc.php

僅阻擋 login 和 admin 頁面可能不夠,WordPress 還提供 RPC API,讓使用者可以用 Mobile APP 登入 WordPress,因此駭客也能使用 RPC API 做暴力破解!如果平常不會使用的話,乾脆直接阻擋掉即可。

防範 WordPress 被攻擊的 8 個方法

同時亦可在 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 攻擊。

防範 WordPress 被攻擊的 8 個方法
不正常的持續 CPU loading 和流量,封鎖後隨即下降

此時到 CloudFlare 開啟 Under Attack 模式先無條件過濾

防範 WordPress 被攻擊的 8 個方法

再查看 request log 確定問題所在

防範 WordPress 被攻擊的 8 個方法
駭客用 script 透過 xmlrpc.php 暴力破解密碼

以上是我覺得保護 WordPress 網站的 8 個方法,大家可以一起試試看!

延伸閱讀:
WordPress 部落格被攻擊全記錄
0元用 Raspberry pi 架設自己的 WordPress 網站 #3 速度優化

Written by J
雖然大學唸的是生物,但持著興趣與熱情自學,畢業後轉戰硬體工程師,與宅宅工程師們一起過著沒日沒夜的生活,做著台灣最薄的 intel 筆電,要與 macbook air 比拼。 離開後,憑著一股傻勁與朋友創業,再度轉戰軟體工程師,一手扛起前後端、雙平台 app 開發,過程中雖跌跌撞撞,卻也累計不少經驗。 可惜不是那 1% 的成功人士,於是加入其他成功人士的新創公司,專職開發後端。沒想到卻在採前人坑的過程中,拓寬了眼界,得到了深層的領悟。