
Apacheは世界で最も広く利用されているウェブサーバーの1つであり、その人気に伴い、セキュリティの確保が求められています。Apacheが最も多くホストされているプラットフォーム(Linux)は、他の多くのプラットフォームにはないレベルのセキュリティを誇っていますが、だからといってオープンソースのウェブサーバーをインストールして放置してよいというわけではありません。セキュリティの必要性がかつてないほど高まっていることを考えると、Apache 2をインストールした環境を安全に運用するために、できる限りの対策を講じるべきです。
ここでは、Apache インストールのセキュリティを強化するために実装できる 4 つのヒント (簡単に実行できるヒントが 3 つ、少し調べる必要があるヒントが 1 つ) を紹介します。
1: 必要なモジュールのみを実行する
Apache 2では、初期状態では不要なモジュールがいくつか有効になっています(サーバー上でどのモジュールを実行するかは、ユーザー自身で決定できます)。しかし、どのモジュールが実行されているかはどうやって確認すればよいのでしょうか?また、モジュールを1つか2つ無効にしたい場合、不要なモジュールの実行を防ぐにはどうすればよいでしょうか?
まず、システムで有効になっているモジュールを確認する必要があります。Ubuntu Server 16.04 上の Apache 2 インストールから確認する方法を説明します。
ターミナル ウィンドウを開き、コマンドsudo ls /etc/apache2/mods-enabled/を実行すると、図 Aのような出力が表示されます。
図A

Apache 2には、モジュールを無効化するための便利なツールが用意されています。例えば、autoindexモジュールを無効化したいとします。autoindexモジュールの読み込みを阻止するには、次のコマンドを実行します。
sudo a2dismod autoindex
コマンドを実行すると、「はい、私の言うとおりにしてください!」と入力してモジュールを無効化してもよいか確認するメッセージが表示されます。注:この警告は、サーバーの動作に悪影響を与える可能性のあるモジュールに対してのみ表示されます。例えば、ステータスモジュールを無効化したい場合は、コマンドsudo a2dismod statusを実行すると、モジュールが無効化されます。
必要なモジュールを無効にした後、次のコマンドで Apache を再起動します。
sudo service apache2 restart
2: ModSecurityを有効にする
ModSecurityは、Apacheで動作する無料のWebアプリケーションファイアウォールです。柔軟なルールエンジンを使用して、SQLインジェクション、クロスサイトスクリプティング、トロイの木馬、不正なユーザーエージェント、セッションハイジャックなどの攻撃を防御するための、シンプルな操作から複雑な操作までを実行します。
ModSecurityは非常に複雑であり、サイトのページ提供能力に影響を与える可能性があることをご理解ください。この機能を有効にする前に、ModSecurityについて十分に理解しておくことをお勧めします。詳細については、ModSecurityの公式ドキュメントをご覧ください。
参照: ネットワーク セキュリティ ポリシー (Tech Pro Research)
ModSecurityはデフォルトではインストールされていません。インストール手順は非常に簡単ですが、設定は複雑になる場合があります。ModSecurityをインストールするには、以下の手順に従ってください。
- Apache サーバーでターミナル ウィンドウを開きます。
- sudo apt-get install libapache2-modsecurityコマンドを実行します。
- コマンドsudo mv /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf を使用して、サンプル設定ファイルの名前を変更します。
- 新しく作成されたファイルを、コマンドsudo nano /etc/modsecurity/modsecurity.conf で編集用に開きます。
- ルール エンジン初期化セクションにSecRuleEngine On の行を追加します。
- sudo service apache2 restartコマンドで Apache を再起動します。
次に、ModSecurity 設定ファイルを編集する必要があります。sudo nano /etc/apache2/mods-enabled/security2.confコマンドでファイルを開き、以下の行を追加します。
IncludeOptional "/usr/share/modsecurity-crs/*.conf"
âIncludeOptional "/usr/share/modsecurity-crs/base_rules/*.conf
ファイルを保存して閉じ、 sudo service apache2 restartコマンドで Apache を再起動します。
サイトでエラーが発生した場合は、 /var/log/ apache2/error.log を詳しく調べて、 [id “960017”] (Forbidden 403 エラー)のようなエントリを含むエラーを探してください。このエラーを見つけたら、Apache ディレクティブのSecRuleRemoveByIdオプションを使用して、該当するルール(ID で指定)を無効化できます。
3: 大きなリクエストを制限する
Apacheはデフォルトで、受け入れるHTTPリクエストのサイズに制限を設けていません。そのため、攻撃者が大量のデータを送信してサーバーをダウンさせる可能性があります。これはディレクトリごとに設定できます。
例えば、/var/www/clients フォルダを提供するためのディレクティブを作成したとします。そのディレクティブは次のようになります。
Alias /clients "/var/www/clients"
â Options +FollowSymlinks
âAllowOverride All
âDav off
â
SetEnv HOME /var/www/clients
âSetEnv HTTP_HOME /var/www/clients
たとえば、そのディレクトリを 100K 以下のリクエストにロックダウンしたい場合は、AllowOverride Allの下に次の行を追加します。
LimitRequestBody 102400
ファイルを保存して閉じます。次のコマンドでApacheをリロードします(完全に再起動する必要はありません)。
sudo service apache2 reload
4: 特定のディレクトリへの参照を制限する
ユーザーが特定のディレクトリの外部を参照できないようにしたい場合。
ApacheサーバーからNextcloudサイトを提供しており、そのサイトだけをアクセス可能にしたいとします。その場合、ドキュメントルートへのアクセスを拒否し、Nextcloudディレクトリへのアクセスを許可する必要があります。この例では、ドキュメントルートを/var/www/、Nextcloudディレクトリを/var/www/nextcloudとします。
まず、 /etc/ apache2/apache2.conf を開きます。ドキュメントルートディレクティブ( <Directory />で始まります)を探し、以下の内容に変更します。
âOrder Deny,Allow
â Deny from all
â Options None
â AllowOverride None
â
ファイルを保存して閉じます。/etc/apache2/sites-enabled 内の Nextcloud の設定ファイルを開き、 <Directory /var/www/nextcloud/>に以下の行を追加します。
Order Allow,Deny
âAllow from all
sudo service apache2 reloadコマンドでApacheをリロードします。ドキュメントルートを表示しようとするとForbidden警告が表示され、Nextcloudサイトは期待どおりに動作するはずです。
研究を続ける
Apacheサーバーを保護する方法はたくさんあります。まずはこれらの4つのヒント(ModSecurityについてさらに詳しく調べることを忘れないでください)を参考に、攻撃や悪意のあるユーザーからWebサーバーを保護するためのさらなる方法を見つけてください。