[Apache] バージョン情報を出力しない

本番用のWebサーバでは利用しているソフトウェアのバージョン情報を表示しません。 例えば何らかの事情で最新版を利用していないことがわかると簡単に脆弱性を突かれてしまいます。また直接的に攻撃をされなくともクラックのきっかけになりますので不要な情報を第三者に公開すべてきではないというのがセオリーです。

そこで今回はApacheとPHPのバージョン情報を出力しない設定を施したいと思います。

Apache

ServerTokens

HTTPヘッダに出力される情報を抑制します。

ServerTokens Prod

デフォルトだとApacheのバージョンやサーバのOS、PHPを入れている場合はその情報も出力されます。

ServerTokensをProdにするとApacheであることはわかる物の、それ以外の情報が出力されなくなります。

指定 出力内容
Prod Apache
Major Apache/2
Minor Apache/2.0
Min Apache/2.0.41
OS Apache/2.0.41 (Unix)
Full Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2

デフォルトはFullです。

ServerSignature

NotFoundなどApacheが出力するページのフッター部分に情報が出力されるのを防ぎます。 2.4ではデフォルトでOffですので通常は設定する必要はありません。

ServerSignature Off

ServerSignatureをOnにすると以下のようにApacheのバージョンはPHPを入れている場合はその情報も出力されます。

Offにすると表示されなくなります。

PHP

Header unset

PHPのバージョン情報も消しておきます。

Header always unset X-Powered-By

デフォルトでは以下のようにX-Powered-ByヘッダにPHPのバージョンが出力されています。

Header unsetすることによりレスポンスヘッダから削除することができます。

実行にはmod_headersモジュールをロードする必要があります。

$ grep 'mod_headers' httpd.conf
LoadModule headers_module libexec/apache2/mod_headers.so

 設定でalwaysが抜けていたので追記しました

php.ini

Apache側だけだと何かの拍子に(設定ミスなどで)出力されてしまう懸念もあります。そこでPHP側の設定でもOFFにしておきます。php.iniexpose_phpの値をOffに書き換えます。

expose_php = Off

Apache側の設定(Header unset)をコメントアウトしてもHTTPヘッダにPHPのバージョンが一切表示されなくなるのが確認できます。php.iniの編集後はApacheの再起動をお忘れなく。

参考ページ