WordPressのログイン画面に、Basic認証を導入しよう!

By | Date : 2016/05/18 ( Last Update : 2016/05/24 ) | 1,184 views

ニアです。

サーバーを移行してから、とある国からWordPressのログイン画面へのブルートフォースアタックで狙われています。(汗)

一応、ログイン試行回数を制限するプラグイン「Login Limit Attempts」を入れているのですが、その対策なのか1日おきに攻撃が来るので厄介です。

そこで今回は、WordPressのログインページにBasic認証を導入することにしました。

 

1. WordPressのログインページにBasic認証を導入しよう

ここではKUSANAGIのWordPressマシンにBasic認証を導入し、ログインページをパスワード保護していきます。

Webサーバーはnginx 1.10.0を使用しています。

 

1.1. .htpasswdの作成

まず、Basic認証に使用するID・パスワードを格納するファイル「.htpasswd」を作成します。

htpasswdコマンドを実行し、Basic認証で使用するパスワードを2回入力します。

「-c」オプションを付けるとパスワードファイルの新規作成(存在する場合は上書き)し、「-s」オプションを付けるとパスワードをSHAでハッシュ化して保存します。

ちなみに、ファイルに保存する時のパスワードのハッシュ化オプションには以下4種類があります。

オプション 意味
-d パスワードをCRYPTでハッシュ化します(デフォルト)
-m パスワードをMD5でハッシュ化します
-s パスワードをSHA(SHA1)でハッシュ化します
-p パスワードを平文のままで保存します。

平文のままで保存するのはセキュリティの観点からおすすめしません。またCRYPTの場合、有効なパスワードは8文字以内という制約があります。

 

1.2. .htpasswdの配置とパーミッションの設定

.htpasswdファイルを作成したら、/home/kusanagiに配置します。

※カレントディレクトリを/home/kusanagiに移動してから、.htpasswdファイルを作成するのも手です。

 

また、.htpasswdファイルの所有者を「kusanagi」、グループを「www」に設定し、パーミッションは644に設定します(外部からは読み取りのみを許可します)。

 

1.3. 設定ファイルの編集

.htpasswdファイルを配置したら、今度はnginxの設定ファイルを編集します。

/etc/nginx/conf.dにある「[プロファイル名]_http.conf」を開きます。

wp-login.php」があるlocationブロック内の「allow 0.0.0.0/0;」をコメントアウトします。

※「0.0.0.0/0」はすべてのIPアドレスとマッチします。

設定ファイルを保存します。サイトがSSLに対応している場合、[プロファイル名]_ssl.confも同様に編集します。

nginxを再起動します。

 

WordPressのログインページにアクセスしようとすると、Basic認証のダイアログが現れます。

basic-auth

Microsoft Edgeでの認証画面

Basic認証で登録したユーザー名とパスワードを入力すると、ログインページにアクセスすることができます。

正しいユーザー名とパスワードを入力しなかった場合、HTTPのステータスコードは200(OK)ではなく、401(Authorization Required )となります。

 

1.3. 特定のIPからアクセスする時に、Basic認証をスキップさせてみよう

1.2.の設定ファイルの内容では、ログイン画面だけでなく、管理画面にアクセスする時にもBasic認証を求められます。ブラウザを起動するたびにユーザー名とパスワードを入力するのは面倒なので、自分のPCのネットワークのIPアドレスからアクセスする時はBasic認証をスキップさせるようにしてみましょう。

 

「[プロファイル名]_http.conf」を編集します。(サイトがSSLに対応している場合、[プロファイル名]_ssl.confも編集します。)

deny all;」の前に、「allow 自分のPCのネットワークのIPアドレス」を入れます。

satisfy any」とは、「IPアドレスの制御」と「パスワード認証」のいずれか一方を満たせばアクセスを許可するという意味です。

 

こうすることで、自分のPCのネットワークのIPアドレスからログインページや管理画面に、Basic認証をスキップしてアクセスすることができます。

 

2. phpMyAdminにもBasic認証を導入しよう

KUSANAGI+nginxでphpMyAdminを使いたいです!」で導入した、phpMyAdminへのアクセスにもBasic認証を導入して、自分のPCのネットワークのIPアドレス以外からはBasic認証を要求するようにしてみましょう。

 

3. おわりに

今回は、WordPressのログインページとphpMyAdminにBasic認証を導入しました。

Basic認証はあくまで玄関の補助鍵のような役割なので、WordPress側のパスワードは強固なものに設定して置くことが大切ですね。

 

それでは、See you next!

 

【追記】ブルートフォースアタックによるターゲットはwp-login.phpだけだと思った?

という時期が私にもありました。⇒ ブルートフォースアタックで狙われていたのは、実は○○○○○○.phpだった件

 

この記事をシェアする
Chronoir.netのRSSフィードを購読する

About : ニア(Nia)

紅茶とコーヒーが好きな湘南生まれのプログラマー/ITエンジニアです。主にC#/C++/PHPを使ってプログラミングをしています。趣味は写真撮影と音ゲーです。時々イラストを描いています。プログラミングを勉強している方々と仲良くなりたいです! 興味を持っている分野:UWP/Xamarin/Android Wear/WPF/Windows/Visual Studio/WordPress/KUSANAGI/nginx

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*