如何防止WordPress暴力式登入攻擊

WordPress很容易遭受暴力式攻擊來試探密碼,其實也不只WordPress,所有的服務都怕,倒不是因為密碼強度不夠,而是怕這種無由來的暴力式攻擊會拖垮系統效能。像是 SSH 我取消了密碼登入,採用金鑰,而且一分鐘內登入不得超過三次,很快地暴力式攻擊就大幅減少了。

對於這種暴力式攻擊,如果第一時間發現,管理者可以採用 iptables 立刻把它給禁止連線,語法:

iptables -I INPUT -s 11.22.33.44 -j DROP
iptables -I OUTPUT -d 11.22.33.44 -j DROP

這鐵定立竿見影!但是如果你剛好不在身邊呢?我想到一個方法,就是根據上一篇文章提到的 如何幫Apache某個目錄加上帳號密碼保護,這次我們幫 wp-login.php 檔案加上密碼,這樣登入動作就會有兩次不同密碼防護,我相信暴力連線也可以大幅減少。

先到 wordpress 的目錄底下編輯 .htaccess 檔案,

# nano /var/www/wordpress/.htaccess

然後在這個檔案後面添上保護片段如下,

<Files wp-login.php>
AuthUserFile /etc/apache2/apache2.passwd
AuthName "Private access"
AuthType Basic
require user linaro
</Files>

這麼一來,想要登入執行 wp-login.php 時又得多一道密碼,我相信很多現成破解的程式就不管用了,而且兩道不同密碼,應該很夠用吧!

還有一種攻擊是專門試探 admin 密碼,即便 WordPress 已經取消管理者帳號非得 admin 了,但還是有很多機器人會來試探 admin 密碼,我們可以在你的佈景主題下的 functions.php 底下加入下面程式以避免:

add_filter( 'wp_authenticate', 'wpjam_no_admin_user' );
function wpjam_no_admin_user($user){
  if($user == 'admin'){
  exit;
  }
}

add_filter('sanitize_user', 'wpjam_sanitize_user_no_admin',10,3);
function wpjam_sanitize_user_no_admin($username, $raw_username, $strict){
  if($raw_username == 'admin' || $username == 'admin'){
  exit;
  }
  return $username;
}

這樣如果想要用 admin 登入 WordPress,登入畫面會變成空白頁。

發佈留言

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