どのような役割のWebサーバでも共通するApacheのセキュリティ対策設定 (Webサーバ全般)を説明します。

前提条件

  • 作業は、root権限を持つユーザで実施します。
  • OSおよびApacheは、以下のバージョンで検証しています。
# cat /etc/redhat-release 
CentOS Linux release 8.0.1905 (Core) 
# uname -r
4.18.0-80.el8.x86_64
# httpd -v
Server version: Apache/2.4.37 (centos)
Server built:   Oct  7 2019 21:42:02

設定ファイルのバックアップ

以下のコマンドを実行し、初期設定ファイルをバックアップします。

# cp /etc/httpd/conf/httpd.conf{,.`date +"%Y%m%d"`}

設定手順 (httpd.conf)

viなどのテキストエディタで、Apacheの設定ファイルを開きます。

# vi /etc/httpd/conf/httpd.conf

ファイル一覧表示の無効化

デフォルト設定では、インデックスファイルが存在しないディレクトリをURLのパスで指定すると、ディレクトリ内のファイル一覧がリストとして表示されます。この機能によって、意図しないファイルが第三者に公開される恐れがあります。対策として、OptionsディレクティブからIndexesを削除します。

<Directory "/var/www/html">
(略)
    Options Indexes FollowSymLinks

↓

<Directory "/var/www/html">
(略)
    Options FollowSymLinks

余談ですが、Googleの検索欄に「Index of Parent Directory」とキーワードを入れると、本対策がなされていないWebサイトのファイル一覧ページが大量にヒットします。まさに、本対策を怠った場合の悪しき事例と言えます。

レスポンスヘッダのサーバ情報非表示

デフォルト設定では、HTTP通信のレスポンスヘッダに、サーバ情報としてApacheのバージョンとプロダクト名(OS)が表示されます。レスポンスヘッダの情報を元に、脆弱性を突いた攻撃が行われる恐れがあります。バージョンとプロダクト名を非表示にするために、ファイル末尾に以下の2行を追記します。

ServerTokens ProductOnly
ServerSignature Off

TRACEメソッドの応答無効化

デフォルト設定では、TRACEメソッドのHTTPリクエストに対するレスポンスが有効になっています。TRACEメソッドを利用したXST(Cross-Site Tracing)攻撃を受ける恐れがあります。TRACEメソッドに対する応答を無効化するために、ファイル末尾に以下の1行を追記します。

TraceEnable Off

不要な外部設定ファイルの読み込み無効化

インストール直後のApacheは、/etc/httpd/conf.d/配下の.conf拡張子の外部設定ファイルを全てインクルードします。デフォルトでは以下の設定ファイルがインクルードされます。

  • ウェルカムページ(welcome.conf)
  • インデックスページ(autoindex.conf)
  • ユーザディレクトリページ(userdir.conf)

基本的にはどれも不要なので、インクルードが必要なファイルのみ明示するようにします。

IncludeOptional conf.d/*.conf

↓

# IncludeOptional conf.d/*.conf
または
IncludeOptional conf.d/<ファイル1>.conf
IncludeOptional conf.d/<ファイル2>.conf
IncludeOptional conf.d/<ファイル3>.conf

設定内容の確認

以下のコマンドを実行し、事前にバックアップを取得しておいた初期設定ファイルと、現行の設定ファイルの差分を比較します。各行>に続けて設定した内容が差分として表示されていることを確認します。

# diff /etc/httpd/conf/httpd.conf{.`date +"%Y%m%d"`,}

以下のコマンドを実行し、設定ファイルの文法に問題がないか確認します。
文法が正しければ、Syntax OKが表示されます。

# apachectl configtest
Syntax OK

設定の反映

以下のコマンドを実行し、httpdサービスを再起動して設定を反映します。

# systemctl restart httpd.service

以下のコマンドを実行し、httpdサービスが起動状態であることを確認します。
Active:の列にactive (running)が表示されていれば、サービスは起動中です。

# systemctl status --no-pager httpd.service
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2019-11-26 13:35:13 JST; 20s ago
(略)

以上で、Apacheのセキュリティ対策設定 (Webサーバ全般)は完了です。