「403エラー時にApacheのバージョンやOSを表示したくない」
「Apacheのセキュリティ対策を実施したい」
「ServerTokensについて理解したい」
このような場合には、この記事の内容が参考になります。
この記事では、ServerTokensの設定によるApacheのセキュリティ対策について解説しています。
本記事の内容
- ServerTokensとは?
- ServerTokensのコンテキスト(設定ファイル)
- ServerTokensの構文(設定値)
- ServerTokensの変更
それでは、上記に沿って解説していきます。
ServerTokensとは?
ServerTokensについては、次の画像をご覧ください。
下線を引いた箇所に表示する内容をServerTokensで制御しています。
ただし、下線を引いた箇所の表示自体の制御はServerSignatureで行っています。
ServerSignatureについては、次の記事で解説しています。
ServerSignatureに「Off」を設定すると、次のように何も表示されません。
ServerSignatureに「Off」にしていれば、ServerTokensは不要だと思いませんか?
そもそも、表示しなければその内容は関係ないと思いませんか?
実は、ServerTokensで制御する内容が表示されるのはここだけではありません。
レスポンスヘッダーでも確認できます。
むしろ、レスポンスヘッダーの方がメインの表示場所とも言えます。
正確には、表示と言うより設定と言った方がよいかもしれません。
以上、ServerTokensについて説明しました。
次は、ServerTokensのコンテキスト(設定ファイル)を説明します。
ServerTokensのコンテキスト(設定ファイル)
Apacheの公式ドキュメントでは、次のように説明されています。
コンテキストに注目です。
コンテキストは、サーバ設定ファイルのみとなります。
コンテキストとは、そのディレクティブの適用範囲です。
ディレクティブの適用範囲は、どの設定ファイルのどこに記述するのかに関係もあります。
そして、ServerTokensはそれがサーバ設定ファイルのみとなります。
UbuntuにaptでApacheをインストールした場合は、以下の2ファイルです。
- /etc/apache2/apache2.conf
- /etc/apache2/conf-available/security.conf
ただし、デフォルトでは「security.conf」の方にServerTokensは設定されています。
セキュリティ関連のことは、「security.conf」に集約されているのです。
なお、「apache2.conf」は「security.conf」を読み込む形となります。
Apacheの設定ファイルについては、次の記事で説明しています。
以上、ServerTokensのコンテキスト(設定ファイル)を説明しました。
次は、ServerTokensの構文(設定値)を説明します。
ServerTokensの構文(設定値)
ServerTokensに設定できる値は、以下となります。
- Major
- Minor
- Min[imal]
- Prod[uctOnly]
- OS
- Full
それぞれについて、以下で説明します。
ServerTokens Major
Majorと設定した場合は、次のように表示されます。
Apacheのメジャーバージョンだけを表示しています。
だから、「Major」ということです。
ServerTokens Minor
Minorと設定した場合は、次のように表示されます。
Apacheのマイナーバージョンまでを表示しています。
だから、「Minor」ということです。
ServerTokens Min[imal]
以下のどちらを設定しても同じです。
- ServerTokens Min
- ServerTokens Minimal
上記のどちらかを設定した場合は、次のように表示されます。
「Minimal」は、日本語で「最小限」という意味です。
そのため、Apacheのバージョンをすべて表示しています。
ServerTokens Prod[uctOnly]
以下のどちらを設定しても同じです。
- ServerTokens Prod
- ServerTokens ProductOnly
上記のどちらかを設定した場合は、次のように表示されます。
「ProductOnly」とは、日本語で「製品のみ」という意味です。
そのため、「Apache」だけが表示されます。
ServerTokens OS
OSと設定した場合は、次のように表示されます。
意味的には、OSまでも表示するということなのでしょう。
ServerTokens Full
Fullと設定した場合は、次のように表示されます。
OSに加えてコンパイル済みモジュールも表示します。
要は、PHPのバージョンまで表示するということです。
そして、Fullがデフォルトの設定になります。
ここで言うデフォルトとは、ServerTokensの項目自体を記述していない場合のことです。
なお、Fullと設定してもPHPのバージョンが表示されない場合があります。
OSの設定と同じ結果になる場合があるということです。
PHPのバージョンの表示については、php.iniの「expose_php」で制御しています。
expose_phpがOnなら表示、Offなら非表示になります。
expose_phpのデフォルト値は、「Off」です。
まとめ
基本的には、すんなり理解できるでしょう。
そんなにややこしいところは、ありません。
しかし、「Full」の場合には少し注意が必要となります。
なぜなら、php.ini上のexpose_phpも関係しているからです。
以上、ServerTokensの構文(設定値)を説明しました。
最後に、ServerTokensの変更について説明します。
ServerTokensの変更
ServerTokensの現状を確認します。
Apache自体の初期設定(デフォルト)の確認とも言えます。
$ find /etc/apache2 -type f -name "*.conf" | xargs grep "ServerTokens" /etc/apache2/conf-available/security.conf:# ServerTokens /etc/apache2/conf-available/security.conf:#ServerTokens Minimal /etc/apache2/conf-available/security.conf:ServerTokens OS /etc/apache2/conf-available/security.conf:#ServerTokens Full
「OS」が、Apacheにおける初期設定です。
検証マシンのApacheは以下のバージョンとなります。
$ apache2ctl -v Server version: Apache/2.4.46 (Ubuntu) Server built: 2021-06-17T17:45:11
このときのレスポンスヘッダーを確認します。
確かに、OSまで表示しています。
では、これを「Prod」に変更します。
「Prod」がApacheのセキュリティ的には最も良いとされています。
それなら、デフォルトを「Prod」にすればいいのにと思いますが・・・
では、以下のように変更します。
/etc/apache2/conf-available/security.conf
反映するするために、Apacheを再起動。
$ sudo systemctl restart apache2
レスポンスヘッダーは、次のように変わりました。
以上、ServerTokensの変更について説明しました。