ゾンビ狩りクラブ

Linux, Server, Network, Security 関連などをゆるーくテキトーに載せてます

[Apache] インストール後に行うべきセキュリティ設定

Index

1. はじめに

本稿では、Apacheをインストルした後のセキュリティに関する設定を紹介する。
また、今回実施した Apache のバージョンは、2.4.6 である。

2. 情報隠ぺい

2.1 テストページの非表示

index.htmlが無い場合にデフォルトでは、以下のようなテストページが表示される。

f:id:Garfields:20171022172907p:plain

これを無効にするには、/etc/httpd/conf.d 配下にある welcome.conf を空にする。

% mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.bk
% echo > /etc/httpd/conf.d/welcome.conf

また、デフォルトで参照できる icons ディレクトリ(/usr/share/httpd/icons)は、デフォルトコンテンツが利用するアイコンなどが配置されている。
ここには readme なども存在し、参照することができる。

f:id:Garfields:20171022172930p:plain

f:id:Garfields:20171022172934p:plain

このiconsフォルダが不要な場合(通常は不要)は、/etc/httpd/conf.d/autoindex.conf に記述されている以下をコメントアウトする。

#Alias /icons/ "/usr/share/httpd/icons/"

#<Directory "/usr/share/httpd/icons">
#    Options Indexes MultiViews FollowSymlinks
#    AllowOverride None
#    Require all granted
#</Directory>

もしくは、インデックス表示の設定を行わないのならば、autoindex.conf を空(削除するとアップデート時に再作成されるらしい)にする。

% mv /etc/httpd/conf.d/autoindex.conf /etc/httpd/conf.d/autoindex.conf.bk
% echo > /etc/httpd/conf.d/autoindex.conf

autoindex.confが有効な場合の表示
f:id:Garfields:20171022173001p:plain

autoindex.confが無効な場合の表示
f:id:Garfields:20171022173014p:plain

2.2 インデックス表示の無効化

インデックス表示を無効にする場合は、httpd.conf を以下のように編集する。

[-] Options Indexes FollowSymLinks
[+] Options FollowSymLinks

こうすることで、以下のページが表示され、インデックス表示はされなくなる。

f:id:Garfields:20171022173025p:plain

2.3 Apacheバージョン情報隠蔽

デフォルトの状態だと、以下のようにヘッダにバージョン情報が表示される。

% curl 127.0.0.1 -I
HTTP/1.1 200 OK
Date: Thu, 09 Feb 2017 06:09:24 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Thu, 09 Feb 2017 06:08:37 GMT
ETag: "0-54812cfdba52b"
Accept-Ranges: bytes
Content-Type: text/html; charset=UTF-8

これを表示させないようにするには、httpd.conf に以下の一行を追加する。

ServerTokens Prod

設定を反映させた結果、以下のようにバージョン情報が表示されなくなる。

% curl 127.0.0.1 -I
HTTP/1.1 200 OK
Date: Thu, 09 Feb 2017 06:08:52 GMT
Server: Apache
Last-Modified: Thu, 09 Feb 2017 06:08:37 GMT
ETag: "0-54812cfdba52b"
Accept-Ranges: bytes
Content-Type: text/html; charset=UTF-8

2.4 PHPバージョン番号隠蔽

phpを使用している場合、デフォルトではヘッダにphpのバージョン情報が表示される。

% curl localhost/test.php -I
HTTP/1.1 200 OK
Date: Thu, 09 Feb 2017 07:23:34 GMT
Server: Apache
X-Powered-By: PHP/5.4.16
Content-Type: text/html; charset=UTF-8

これを非表示にするには、httpd.conf に以下のを加える。

Header unset X-Powered-By

または、php.iniに以下を加える。

expose_php = off

3. 攻撃対策

3.1. Cross Site Tracing(XST)対策

HTTPメソッドには、HTTP Trace メソッドというものがあり、Cross Site Tracing (XST) という攻撃で利用されるため、このメソッドを無効にすることでよりセキュアにすることができる。
尚、現在ではこの脅威はほとんどないとされている (実はそんなに怖くないTRACEメソッドを参照) ので、一応の措置程度と考えられる。
HTTP TRACE メソッドが有効かどうかの確認は、curlを使用することでできる。
以下は HTTP TRACE が有効な場合の出力結果である。

% curl -v -X TRACE 127.0.0.1
* About to connect() to 127.0.0.1 port 80 (#0)
*   Trying 127.0.0.1...
* Connected to 127.0.0.1 (127.0.0.1) port 80 (#0)
> TRACE / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 127.0.0.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Thu, 09 Feb 2017 06:10:03 GMT
< Server: Apache
< Transfer-Encoding: chunked
< Content-Type: message/http
<
TRACE / HTTP/1.1
User-Agent: curl/7.29.0
Host: 127.0.0.1
Accept: */*

* Connection #0 to host 127.0.0.1 left intact

HTTP TRACE を無効にするには、httpd.conf に以下の一行を追加する。

TraceEnable off

上記の設定を反映させることで、以下の出力が得られ、HTTP TRACE が無効になっていることが確認できる。

% curl -v -X TRACE 127.0.0.1
* About to connect() to 127.0.0.1 port 80 (#0)
*   Trying 127.0.0.1...
* Connected to 127.0.0.1 (127.0.0.1) port 80 (#0)
> TRACE / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 127.0.0.1
> Accept: */*
>
< HTTP/1.1 405 Method Not Allowed
< Date: Thu, 09 Feb 2017 06:10:26 GMT
< Server: Apache
< Allow:
< Content-Length: 223
< Content-Type: text/html; charset=iso-8859-1
<
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>405 Method Not Allowed</title>
</head><body>
<h1>Method Not Allowed</h1>
<p>The requested method TRACE is not allowed for the URL /.</p>
</body></html>
* Connection #0 to host 127.0.0.1 left intact

3.2 クリックジャッキング対策

iframe による表示を許可しないことで、クリックジャッキングを防ぐことができる。 これは、X-Frame-Options レスポンスヘッダーの値を設定することで実現できる。 これには以下の値を設定できる。

説明
DENY ページをフレーム内に表示することはできない
SAMEORIGIN 自身と生成元が同じフレーム内に限り、ページを表示することができる
ALLOW-FROM url 指定された生成元に限り、ページをフレーム内に表示できる

SAMEORIGIN に設定する場合は httpd.conf に以下を加える。

Header always append X-Frame-Options SAMEORIGIN

3.3. XSS対策

X-XSS-Protection レスポンスヘッダーの値を設定することで XSS のフィルタリングを行うことができる。 以下の値を指定できる。

説明
0 無効
1 有効(部分的書き換え)
1; mode=block 有効(表示の完全停止)

設定方法は、以下を httpd.conf に加えることでできる。

Header always set X-XSS-Protection “1; mode=block”

3.4 content-type宣言回避対策(IE)

X-Content-Type-Option レスポンスヘッダーの値を nosniff にすることで、IEでの content-type 宣言の回避を防止することができる。

Header always set X-Content-Type-Option nosniff

3.5 Dos対策

LimitRequestBody ディレクティブでリクエストボディのバイト数を制限することができる。
デフォルトは、0で無制限、上限は 2147483647 (2G) まで。

上限バイト数を10Mに設定するには以下のようにする。

LimitRequestBody 10485760

参考文献

書籍

サーバ構築の実際がわかる Apache[実践]運用/管理 (Software Design plus)

サーバ構築の実際がわかる Apache[実践]運用/管理 (Software Design plus)

初めてのWebサーバ「Apache」CentOS 7編 (NextPublishing)

初めてのWebサーバ「Apache」CentOS 7編 (NextPublishing)