Limit Login Attempts Reloaded
WordPress 的後台管理登入沒有登入錯誤的次數限制,也就是說駭客可以使用暴力破解法一直嘗試登入,很容易就被入侵。
如果 WordPress 安裝在 Windows 下,安裝外掛 Limit Login Attempts Reloaded 是比較快速的方法。可以限制錯誤的次數,達到指定次數後,就會封鎖 ip,這就可以有效的杜絕駭客的暴力破解。但如果是安裝在 Linux 之下,則建議採用下面的 fail2ban 方式。

安裝完後,在左邊就會出現 Limit Login Attempts 選單,第一次按下後,選擇不要顯示進階功能,然後輸入 email 即可開始使用。

fail2ban 防暴力破解
如果 WordPress 架設在 Linux 下則建議採用本方法,利用 fail2ban 從系統級杜絕駭客暴力入侵,登入錯誤只要超過設定的次數就封鎖 ip,沒有 Limit Login Attempts 煩人的付費機制,效能更是 Limit Login Attempts 無法比擬的。
安裝 fail2ban,請參照本人撰寫的 ubuntu 設定。
fail2ban 預設只開啟 sshd,要啟動 wordpress 防護,需設定如下。
WordPress 外掛
WordPress 在登入登出時並不會產生 log 檔,所以需自行撰寫外掛程式。請在 wp-content/plugins 之下新增 login-log 目錄,然後在 login-log 目錄下新增 login-log.php,內容如下。
<?php
/*
Plugin Name: Login Logger
Description: 記錄登入登出訊息,方便 fail2ban 進行封鎖
Version: 1.0
Author: Thomas Wu
*/
function log_failed_login($username) {
$ip = $_SERVER['REMOTE_ADDR'];
$time = current_time('Y-m-d H:i:s T');
file_put_contents(
ABSPATH . 'log/login.log',
"FAILED LOGIN: $username from $ip at $time\n",
FILE_APPEND
);
}
add_action('wp_login_failed', 'log_failed_login');
function log_successful_login($user_login) {
$ip = $_SERVER['REMOTE_ADDR'];
$time = current_time('Y-m-d H:i:s T');
file_put_contents(
ABSPATH . 'log/login.log',
"SUCCESS LOGIN: $user_login from $ip at $time\n",
FILE_APPEND
);
}
add_action('wp_login', 'log_successful_login');
使用如下指令更改 owner
cd /server/wordpress sudo mkdir log sudo touch log/login.log sudo chown www-data:www-data -R log sudo chown www-data:www-data -R wp-content/plugins/login-log
最後進入 WordPress 後台外掛,啟動 Login Logger 外掛程式
新增過濾器
在 /etc/fail2ban/filter.d/ 下新增二個過濾器,分別為 wp-login.conf 及 wp-hacker.conf,內容如下。
wp-login.conf
[Definition] failregex = ^FAILED LOGIN: .* from <HOST> at .*$ ignoreregex =
wp-hacker.conf
[Definition] failregex = ^FAILED LOGIN: (Thomas|thomas|wu-thomas|MR) from at .*$ ignoreregex =
jail.conf
然後編輯 /etc/fail2ban/jail.conf,在最後面增如下設定
[wp-login] backend = polling enabled = true port = http,https filter = wp-login logpath = /server/wordpress/log/login.log maxretry = 3 findtime = 3600 bantime = 7200 bantime.increment = true bantime.factor = 2 bantime.max = 48h [wp-hacker] backend = polling enabled = true port = http,https filter = wp-hacker logpath = /server/wordpress/log/login.log maxretry = 1 #findtime = 600 #bantime = 3600 findtime = 12h bantime = 24h bantime.increment = true bantime.factor = 2 bantime.max = 168h
重啟 fail2ban
使用如下指令重新啟動 fail2ban
sudo systemctl restart fail2ban
查看
使用如下指令查看被封鎖的狀況
sudo watch -n 1 fail2ban-client status wp-login
持續物件快取
WordPress 每次都要查資料庫(MySQL),也就是 WordPress → MySQL → 回傳資料。有了持續快取物件,就會變成 WordPress → 快取(記憶體)→ 回傳,幾乎不用查詢資料庫,速度可快 2~10倍。請注意,此外掛僅適用於 Linux 之下,因為 Windows 下沒有 redis server。
安裝套件
請在 Linux 下使用如下指令安裝 redis server。
sudo apt install redis-server
設定 redis 最大 Ram 容量
開啟 redis.conf
sudo /etc/redis/redis.conf
在最後新增如下設定
maxmemory 2gb maxmemory-policy allkeys-lru
重啟 redis
使用如下指令重啟 redis
sudo systemctl restart redis
安裝裝外掛
進入 WordPress 後台,安裝 Redis Object Cache 外掛,然後啟用即可。
Advanced Editor Tools
編輯文章時,本人比較偏愛 “進階編輯器”,此編輯器可以切換到傳統段落(如下圖紅色圈起來的地方),也可由檢視切換到 html 畫面。

Fix TinyMCE Arrow Key Jump
Advanced Editor Tools 在編輯文章時按「上、下、左、右」四個方向鍵時畫面會跳動,非常不方便,這是因為方向鍵會觸發滾輪事件。為了解決這種煩人的問題,需自已寫一個外掛。請在 wp-content/plugins 建立一個資料夾
sudo mkidr fix-tinymce-arrow-keys
然後新增 fix-tinymce-arraw-keys.php
sudo vim fix-tinymce-arrow-keys.php
然後在 .php 輸如下代碼
<?php
/*
Plugin Name: Fix TinyMCE Arrow Key Jump
Description: 修正 Advanced Editor Tools(TinyMCE)編輯器在按上下左右方向鍵時畫面跳動的問題
Version: 1.0
Author: Thomas Wu
*/
add_action('admin_enqueue_scripts', function($hook) {
// 只在文章/頁面編輯器載入
if (in_array($hook, ['post.php', 'post-new.php'])) {
wp_add_inline_script('jquery-core', "
document.addEventListener('keydown', e => {
if ((e.key === 'ArrowLeft' || e.key === 'ArrowRight' ||
e.key === 'ArrowUp' || e.key === 'ArrowDown') &&
document.activeElement.classList.contains('mce-content-body')) {
e.stopPropagation();
}
}, true);
");
}
});
請注意上面代碼最後面不可以有 “?>”。
存檔後更改 fix-tinymce-arrow-keys 目錄的 owner
cd .. sudo chown www-data:www-data -R fix-tinymce-arrow-keys
然後到後台/外掛/已安裝的外掛,啟用「Fix TinyMCE Arrow Key Jump」。這樣編輯文章時,按四個方向鍵就不會亂跳了。
Google 行事曆
要在側邊顯示 Google 行事曆,可以在小工具裏新增 html 區塊,建入如下 html。
<p>
<iframe style="border: 0;" src="https://calendar.google.com/calendar/embed?src="Google 的行事曆網址" width="1280" height="600" frameborder="0" scrolling="no">
</iframe>
</p>
Google 行事曆網址請到 Google 行事曆/行程表/設定和共用,然後複制整個「內崁程式碼」 。
Conditional Menus
當選單過多時,可以考慮用這個分成子表單。每個子表單都是頁面,主選單的頁面要點一下,才會出現子表單。
Hide Page And Post Title
使用 Conditional Menus 時,主選單的選單文字為頁面的標題。若要將頁面的標題取消顯示,就要安裝這個套件。
WP-UserOnline
顯示目前的線上人數,安裝後在小工具加入此套件。若加入後無法顯示,需先安裝 Classic Widgets 。然後重新設定
MathJax-LaTeX
MathJax-LaTeX 在撰寫數學符號時妖壽好用。請安裝外掛後,切換到 “外觀/佈景主題檔案編輯器”,於右邊選單中選擇 “佈景主題頁首(header.php)”,然後在 </head> 之前新增如下 Javascript
<script type='text/javascript'
src='https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/MathJax.js?config=TeX-MML-AM_CHTML'></script>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
tex2jax: {inlineMath: [['$(',')$'], ['\\(','\\)']]}
});
</script>
編寫文章時,只要把公式放在 $( ……. )$ 之間即可,比如
$(Loss=\frac{1}{n}\sum_{i=1}^{n}(\tilde{y_{i}}-y_{i})^{2})$
上面的語法,就會顯示如下結果
$(Loss=\frac{1}{n}\sum_{i=1}^{n}(\tilde{y_{i}}-y_{i})^{2})$
有關數學符號的寫法,可以參照 https://latex.codecogs.com/eqneditor/editor.php
Akismet Anti-spam
Akismet 使用 AI 防止垃報留言,蠻好用的。
WPtouch Mobile Plugin
此為手機版套件
WP-Optimize
資料庫最佳化套件
SaFly Curl Patch
目前在 uBuntu 無法安裝 curl 套件,但 php 需要調用 curl,SaFly 可以解決這個問題。
WP Table Builde
方便製作表格
Nextend Social Login
使用 Google、Facebook 等帳號登入網頁。
Classic Widgets
傳統小工具,需先安裝這個,才能安裝 WP-UserOnline
Breeze
Breeze 是一款具有詳盡設定,可為網站進行加速的 WordPress 外掛,同時也提供與 Cloudways 主機服務相容的 Varnish 快取設定。
The Events Calendar
此外掛可排定每天的行事曆,但這個東西最好不要安裝,因為行事曆內容會放在 wp-posts 資料表,造成張貼文章大亂,而且 bug 一大堆。建議使用 Google 的行事曆。

安裝好,於外觀/自訂/小工具/Main SiderBar 加入一段落,選 自訂html,然後加入如下 html
<a href="http://localhost/events">行程表</a>
