ServerTokensの設定によるApacheセキュリティ対策

ServerTokensの設定によるApacheセキュリティ対策 サーバー

「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の変更について説明しました。

タイトルとURLをコピーしました