9.5. HTTP サーバーのセキュリティー保護
9.5.1. httpd.conf のセキュリティー強化
/etc/httpd/conf/httpd.conf
ファイルでセキュリティーオプションを設定して、Apache HTTP のセキュリティーを強化できます。
システムで実行されているすべてのスクリプトが正しく機能することを常に確認してから、本番環境に移行してください。
root
ユーザーのみが、スクリプトまたは Common Gateway Interface (CGI) を含むディレクトリーへの書き込み権限を持っていることを確認してください。ディレクトリーの所有権を、書き込み権限を持つ root
に変更するには、次のコマンドを入力します。
# chown root <directory_name> # chmod 755 <directory_name>
/etc/httpd/conf/httpd.conf
ファイルでは、次のオプションを設定できます。
FollowSymLinks
- このディレクティブはデフォルトで有効になっており、ディレクトリー内のシンボリックリンクをたどります。
Indexes
- このディレクティブはデフォルトで有効になっています。訪問者がサーバー上のファイルを閲覧できないようにするには、このディレクティブを削除してください。
UserDir
-
このディレクティブは、システム上にユーザーアカウントが存在することを確認できるため、デフォルトでは無効になっています。
/root/
以外のすべてのユーザーディレクトリーのユーザーディレクトリーブラウジングをアクティブにするには、UserDir enabled
とUserDir disabled
の root ディレクティブを使用します。無効化されたアカウントのリストにユーザーを追加するには、UserDir disabled
行にスペースで区切られたユーザーのリストを追加します。 ServerTokens
このディレクティブは、クライアントに送り返されるサーバー応答ヘッダーフィールドを制御します。以下のパラメーターを使用するとログの出力をカスタマイズできます。
ServerTokens Full
以下のように、Web サーバーのバージョン番号、サーバーのオペレーティングシステムの詳細、インストールされている Apache モジュールなど、利用可能なすべての情報を指定します。
Apache/2.4.37 (Red Hat Enterprise Linux) MyMod/1.2
ServerTokens Full-Release
以下のように、利用可能なすべての情報をリリースバージョンとともに指定します。
Apache/2.4.37 (Red Hat Enterprise Linux) (Release 41.module+el8.5.0+11772+c8e0c271)
ServerTokens Prod / ServerTokens ProductOnly
以下のように、Web サーバー名を指定します。
Apache
ServerTokens Major
以下のように、Web サーバーのメジャーリリースバージョンを指定します。
Apache/2
ServerTokens Minor
以下のように、Web サーバーのマイナーリリースバージョンを指定します。
Apache/2.4
ServerTokens Min
/ServerTokens Minimal
以下のように、Web サーバーの最小リリースバージョンを指定します。
Apache/2.4.37
ServerTokens OS
以下のように、Web サーバーのリリースバージョンとオペレーティングシステムを指定します。
Apache/2.4.37 (Red Hat Enterprise Linux)
ServerTokens Prod
オプションを使用して、攻撃者がシステムに関する貴重な情報を入手するリスクを軽減します。
IncludesNoExec
ディレクティブを削除しないでください。デフォルトでは、Server-Side Includes (SSI) モジュールは、コマンドを実行できません。これを変更すると、攻撃者がシステムにコマンドを入力できるようになる可能性があります。
httpd モジュールの削除
httpd
モジュールを削除して、HTTP サーバーの機能を制限できます。これを行うには、/etc/httpd/conf.modules.d/
または /etc/httpd/conf.d/
ディレクトリーの設定ファイルを編集します。たとえば、プロキシーモジュールを削除するためには、以下のコマンドを実行します。
echo '# All proxy modules disabled' > /etc/httpd/conf.modules.d/00-proxy.conf
9.5.2. Nginx サーバー設定のセキュリティー保護
Nginx は、高性能の HTTP およびプロキシーサーバーです。次の設定オプションを使用して、Nginx 設定を強化できます。
手順
バージョン文字列を無効にするには、
server_tokens
設定オプションを変更します。server_tokens off;
このオプションは、サーバーのバージョン番号などの追加の情報表示を停止します。以下のようにこの設定では、Nginx によって処理されるすべての要求のサーバー名のみが表示されます。
$ curl -sI http://localhost | grep Server Server: nginx
特定の
/etc/nginx/
conf ファイルに、特定の既知の Web アプリケーションの脆弱性を軽減するセキュリティーヘッダーを追加します。たとえば、
X-Frame-Options
ヘッダーオプションは、Nginx が提供するコンテンツのフレーム化がされないように、ドメイン外のページを拒否して、クリックジャッキング攻撃を軽減します。add_header X-Frame-Options "SAMEORIGIN";
たとえば、
x-content-type
ヘッダーは、特定の古いブラウザーでの MIME タイプのスニッフィングを防ぎます。add_header X-Content-Type-Options nosniff;
また、
X-XSS-Protection
ヘッダーは、クロスサイトスクリプティング (XSS) フィルタリングを有効にし、Nginx での応答に含まれる可能性がある、悪意のあるコンテンツをブラウザーがレンダリングしないようにします。add_header X-XSS-Protection "1; mode=block";
たとえば、一般に公開されるサービスを制限し、訪問者からのサービスと受け入れを制限できます。
limit_except GET { allow 192.168.1.0/32; deny all; }
スニペットは、
GET
とHEAD
を除くすべてのメソッドへのアクセスを制限します。以下のように、HTTP メソッドを無効にできます。
# Allow GET, PUT, POST; return "405 Method Not Allowed" for all others. if ( $request_method !~ ^(GET|PUT|POST)$ ) { return 405; }
- Nginx Web サーバーによって提供されるデータを保護するように SSL を設定できます。これは、HTTPS 経由でのみ提供することを検討してください。さらに、Mozilla SSL Configuration Generator を使用して、Nginx サーバーで SSL を有効にするための安全な設定プロファイルを生成できます。生成された設定により、既知の脆弱なプロトコル (SSLv2 や SSLv3 など)、暗号、ハッシュアルゴリズム (3DES や MD5 など) が確実に無効化されます。また、SSL サーバーテストを使用して、設定した内容が最新のセキュリティー要件を満たしていることを確認できます。