Ubuntu18 に Apache2 が乗ってる環境の場合です。


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を組み合わせるとリクエストヘッダを抜けるらしい。が、現在ではブラウザ側で対策されてる模様。

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

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 を付与する設定。ググって出てきた記事タイトルだけでも、付与するべき的な空気が出ている。

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

Header set X-Frame-Options: "sameorigin"

2つ目、レスポンスヘッダに X-Frame-Options: sameorigin を付与する設定。調べたら、個人的に好きなヌーラボさんの技術ブログの記事が出てきたので読んでみた。

クリックジャッキングとかいうコスいものがあるとのこと。sameorigin を設定しておけば、iframe で同じドメイン内のページしか表示できないように制限でき、それを防げるらしい。

が、このブログはGoogleアドセンス (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