「OpenLiteSpeed上のWordPressのセキュリティを高めたい」
「.htaccessを使ったホスト名によるアクセス制御が機能しない・・・」
このような場合には、この記事の内容が参考となります。
この記事では、OpenLiteSpeedのセキュリティを上げる方法を解説しています。
本記事の内容
- .htaccessを使ったホスト名によるアクセス制御
- OpenLiteSpeedにおけるhtaccessを使ったホスト名によるアクセス制御
- OpenLiteSpeedにおけるホスト名によるアクセス制御の方法
- OpenLiteSpeed上のWordPressにおけるアクセス制御
それでは、上記に沿って解説していきます。
.htaccessを使ったホスト名によるアクセス制御
.htaccessを使ったホスト名によるアクセス制御について説明します。
その実現方法には、以下の2つの方法があります。
- mod_rewrite形式
- mod_access_compat(mod_authz_host)形式
それぞれを下記で説明します。
mod_rewrite形式
RewriteEngine On RewriteCond %{REMOTE_HOST} !"^.*\.eaxample\.com" [NC] RewriteRule ^.*$ - [F,L]
REMOTE_HOSTは、REMOTE_ADDRで取得したIPアドレスをDNSで逆引きしたホスト名です。
したがって、REMOTE_HOSTを取得するためにDNSへ問い合わせが生じます。
これは、Apacheの負荷増加の一因となります。
そのため、デフォルトでは無効となっています。
有効・無効の設定は、ApacheのHostnameLookupsという項目で行います。
ただ、HostnameLookupsをonにすることはほとんどないでしょう。
Apacheの負荷を無駄に増やすだけですからね。
よって、mod_rewrite形式はほぼ利用されません。
ただし、IPアドレス(REMOTE_ADDR)によるアクセス制御ではよく利用されます。
mod_access_compat(mod_authz_host)形式
mod_access_compatモジュールを利用した方法です。
Order、Allow、Denyディレクティブを用います。
order deny,allow deny from all allow from eaxample.com
このアクセス制御については、次の記事で解説しています。
なお、mod_access_compatモジュールを使う方法は古い形のようです。
Apache 2.4以降では、非推奨になっています。
ただし、mod_access_compatがインストール済みなら利用は可能です。
Apache 2.4以降では、mod_authz_hostモジュールを使うことが推奨されています。
以上、.htaccessを使ったホスト名によるアクセス制御について説明しました。
次は、OpenLiteSpeedにおけるhtaccessを使ったホスト名によるアクセス制御を説明します。
OpenLiteSpeedにおけるhtaccessを使ったホスト名によるアクセス制御
バージョン1.4.38以降、OpenLiteSpeedでも.htaccessが利用できます。
ただし、mod_rewrite形式のみをサポートしています。
このことは、次の公式ページに記載してあります。
https://openlitespeed.org/kb/access-control/
あとは、Web管理ツールから設定が可能です。
この場合は、IPアドレス・サブネットワークによる指定となります。
mod_rewrite形式であれば、次のように記述します。
RewriteEngine On RewriteCond %{REMOTE_HOST} !"^.*\.eaxample\.com" [NC] RewriteRule ^.*$ - [F,L]
しかし、OpenLiteSpeedではこれが動きません。
機能はしますが、望むようには動かないのです。
正確には、%{REMOTE_HOST} の値が取得できません。
そのため、ホスト名よるアクセス制御が無効となります。
OpenLiteSpeed上において、HostnameLookupsに該当する設定がないのか調べました。
でも、それらしきモノを見つけることはできませんでした。
そもそも、Apacheにおいても負荷がかかるということでHostnameLookupsがoffでした。
そんな負荷のかかる値(REMOTE_HOST)が、OpenLiteSpeedのデフォルトで取得できるとは思えません。
デフォルトだけではなく、そもそもサーバーの機能として備わっていないのかもしれません。
完全に調べたわけではないので、これは100%と言い切れませんけどね。
仮にあったところで、その値を設定することはないでしょう。
そもそも、高速化を求めてOpenLiteSpeedを利用しているわけですから。
ここまでを整理しましょう。
OpenLiteSpeedでは、mod_rewrite形式のみ.htaccessで記述可能です。
しかし、REMOTE_HOSTを取得することできません。
よって、OpenLiteSpeedでは.htaccessを用いたホスト名によるアクセス制御ができません。
以上、OpenLiteSpeedにおけるhtaccessを使ったホスト名によるアクセス制御の説明でした。
次は、OpenLiteSpeedにおけるホスト名によるアクセス制御の方法を確認します。
OpenLiteSpeedにおけるホスト名によるアクセス制御の方法
.htaccessで無理なら、自分で書くしかありません。
OpenLiteSpeedは、基本的にはPHPがメインで動くことが想定されています。
そのため、PHPで以下をコーディングしました。
// 許可リストにホスト名を登録(複数可) $allow_host = array('docomo.ne.jp', 'au.com'); // アクセス元IPアドレスからホスト名を取得 $access_host = gethostbyaddr($_SERVER['REMOTE_ADDR']); $match = false; foreach ($allow_host as $host) { $pattern = '/' . preg_quote($host, '/') . '$/'; if ( preg_match($pattern, $access_host) ){ $match = true; } } // 許可リストにない場合の処理 if (!$match) { header('Location: https://example.com/'); exit; }
PHPの関数であれば、gethostbyaddrが動きます。
gethostbyaddrを使って、ホスト名をIPアドレスからDNSに問い合わせています。
使い方は、アクセス制御したい箇所にこのコードを入れるだけです。
許可リストは、設定ファイルに記述するなどしてもよいでしょう。
以上、OpenLiteSpeedにおけるホスト名によるアクセス制御の方法を説明しました。
次は、OpenLiteSpeed上のWordPressにおけるアクセス制御を説明します。
OpenLiteSpeed上のWordPressにおけるアクセス制御
「OpenLiteSpeedはWordPressのために存在する」
このように言っても過言ではありません。
ワンクリックでサイトを構築できるスクリプトまで提供されています。
ただ、WordPressは常に攻撃対象になりやすいです。
ソースが公開されていて、利用者も世界中にいますからね。
そのため、管理画面のセキュリティは意識しておかないといけません。
LiteSpeedの有料版だと、DoS攻撃などの対応はしっかりとなされています。
しかし、無償のOpenLiteSpeedでは自衛するしかありません。
ということで、管理画面へのアクセスをホスト名で制御しましょう。
上記のコードを対象となるプログラムに埋め込みます。
その際、対象となるのは以下の2つです。
- /wordpress/wp-login.php
- /wordpress/wp-admin/admin.php
今回は、wp-login.phpにアクセス制御用のコードを追加します。
wp-login.phpは、WordPressのログイン画面です。
そして、アクセス制御用のコードを次のコードの前に埋め込みます。
/** Make sure that the WordPress bootstrap has run before continuing. */ require __DIR__ . '/wp-load.php';
そうしておけば、WordPressのプログラムが動く前に不正アクセスを排除できます。
仮に辞書攻撃を受けても、負荷を軽減できるはずです。
admin.phpの方は、ログインされた後のアクセス制御になります。
そもそも、ログインされた時点で負けです。
でも、念には念をというのがセキュリティでもあります。
admin.phpに記述する場合も、先頭に埋め込みましょう。
以上、OpenLiteSpeed上のWordPressにおけるアクセス制御について説明しました。