どのような役割の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サーバ全般)は完了です。