Apacheのレスポンスヘッダで出てくるServerヘッダを隠すにはどうしたら良い?
と聞かれた際のメモ。
環境
OS : CentOS 7.5
Apache : 2.4.34
デフォルトのレスポンス
curlコマンドでレスポンスを見てみると以下のようになります。
$ curl -I -s localhost
HTTP/1.1 200 OK
Date: Wed, 19 Jun 2019 09:27:07 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Wed, 19 Jun 2019 06:00:40 GMT
ETag: "41-58ba6f2f16016"
Accept-Ranges: bytes
Content-Length: 65
Content-Type: text/html; charset=UTF-8
Serverヘッダがみえてバージョン情報やOSの情報が見えてるのをセキュリティ的に非表示にしたいですようね。
バージョン情報とOSの情報を隠す
httpd.conf のファイルの中身をいじって非表示にしていきます。
$ sudo vi /etc/httpd/conf/httpd.conf
ServerSignature Off
ServerTokens ProductOnly
$ systemctl restart httpd
内容を書き込んでcurlコマンドでレスポンスをかくにんすると以下のようになります.
$ curl -I -s localhost
HTTP/1.1 200 OK
Date: Wed, 19 Jun 2019 09:28:28 GMT
Server: Apache
Last-Modified: Wed, 19 Jun 2019 06:00:40 GMT
ETag: "41-58ba6f2f16016"
Accept-Ranges: bytes
Content-Length: 65
Content-Type: text/html; charset=UTF-8
バージョン情報とOSの情報が隠れていることが確認できました。
セキュリティ的にはここまで隠せていれば十分だと思います。
Serverヘッダを隠す
本記事の本題になります。Apacheのバージョンが2.2より前のものであれば、mod_headersをインストールして(デフォルトで入っていることが多い)設定ファイルに以下のように書き込めば隠せていたようです。
Header unset Server
Apache のバージョンが 2.2 ~ 2.4 のものに関しては上記設定で Server ヘッダが隠せなくなってしまっているので、Apache WAF である mod_security を使用することで隠すことができるようになります。
mod_security のインストール
以下のコマンドでインストールを行います。
yum -y install mod_security mod_security_crs
設定ファイルの書き込み
Server ヘッダの内容を隠すにあたってhttpd.confとmod_security.confの内容を変更していきます。
$ sudo vi /etc/httpd/conf/httpd.conf
ServerTokens Full
$ sudo vi /etc/httpd/conf.d/mod_security.conf
SecServerSignature " "
$ systemctl restart httpd
mod_securtyを使用してServerヘッダを隠す際にはServerTokenの設定をFullにしないと設定が有効にならないみたいです。
ここまで設定をしたらcurlコマンドでレスポンスを見てみましょう。
$ curl -I -s localhost
HTTP/1.1 200 OK
Date: Wed, 19 Jun 2019 09:30:59 GMT
Server:
Last-Modified: Wed, 19 Jun 2019 06:00:40 GMT
ETag: "41-58ba6f2f16016"
Accept-Ranges: bytes
Content-Length: 65
Content-Type: text/html; charset=UTF-8
無事に内容が隠れていることが確認できると思います。
余談ですが、ServerSignature の中身に違うサーバの名前等を書くとサーバの詐称もできます。