こうこく
作 ▸
改 ▸

UbuntuのApache2のバージョン情報を隠す

[2024-01-28追記] このブログがLaravel 5.6でできてた頃の話です。

Ubuntu 18Apache 2.4

UbuntuのApacheはCentOSのと違って、設定ファイルが細かく分けられてる。どこかで見たけど、Debianの作法?らしい。

探してみると、それっぽいものがまとめて書かれた /etc/apache2/conf-available/security.conf ファイル発見。このファイルからコメントを省くと、デフォルト設定は以下の通り。

security.conf
ServerTokens OS
ServerSignature On
TraceEnable Off

このままだと…

  • ServerTokens がOSだから、HTTPのレスポンスヘッダにApacheのバージョンとOS名が表示される。
  • ServerSignature がOnだから、エラーページ下部にApacheのバージョンとOS名とバーチャルホスト名とポート番号が表示される。
  • TraceEnable がOffだから、HTTPのリクエストメソッドの TRACE は使えない。

TraceEnable ってなんだろう? と思って調べたら、どうもHTTPのリクエストメソッドに TRACE というのがあり、これとXSSを組み合わせるとリクエストヘッダを抜けるらしい。が、現在ではブラウザ側で対策されてる模様。

Apache2.4セキュリティ「HTTP TRACEメソッドを無効化しCross-SiteTracing(XST = クロスサイトトレーシング)対策を行う」

実はそんなに怖くないTRACEメソッド

とりあえずバージョン情報などが表示されないように、以下の通りに変更。

security.conf
ServerTokens Prod
ServerSignature Off
TraceEnable Off

ところで security.conf には、他にも丸ごとコメントアウトされてる設定がいくつかあった。SVNが使ってるディレクトリにアクセスできないようになんてのもあったけど、以下2つは気になったので調べてみた。

security.conf
#Header set X-Content-Type-Options: "nosniff"
#Header set X-Frame-Options: "sameorigin"

Header set X-Content-Type-Options: "nosniff"

1つ目、レスポンスヘッダに [X-Content-Type-Options: nosniff](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options) を付与する設定。

X-Content-Type-Options: nosniff つかわないやつは死ねばいいのに! - 葉っぱ日記

X-Content-Type-Options: nosniff はIE以外にも必要 - yohgaki's blog

これを付与しないと、IE8が Content-Type だけでなく内容からファイルタイプを推論するせいで、XSSが起きるかもしれないらしい。

Header set X-Frame-Options: "sameorigin"

2つ目、レスポンスヘッダに X-Frame-Options: sameorigin を付与する設定。

Webエンジニアだったら当然知っておきたい「 クリックジャッキング対策 」とは? | ヌーラボ

クリックジャッキングというものがあるとのこと。他のページから <iframe> でこっそり自分のサイトを表示されることで、それをやられる危険がある。

そこで X-Frame-Options ヘッダに sameorigin を設定しておけば、同じドメイン内のページからしか <iframe> で表示できないように制限でき、それを防げるらしい。

[2019-12-25追記] 自サイト内で <iframe> 使えなくなるのだとずっと誤解していたので、ここの文章修正した。


最終的な security.conf は以下のようになった。

security.conf
ServerTokens Prod
ServerSignature Off
TraceEnable Off
Header set X-Content-Type-Options: "nosniff"

最後にApacheの設定をリロードして終わり。graceful ならサービス止めずにリロードできる。

sudo service apache2 graceful

……と思ったらエラー!

Invalid command 'Header', perhaps misspelled or defined by a module not included in the server configuration

mod_headers を有効にしてなかった。

sudo a2enmod headers
sudo service apache2 graceful
この記事に何かあればこちらまで (非公開)