HTTP/1.1以外のリクエストが来たらステータスコード403を返すように設定してみる。

By | 2017年5月25日 , Last update: 2019年2月16日

はじめに

HTTP/1.1以外のリクエストが来たらステータスコード403を返すように設定してみましたので、本記事では設定をすることにした動機と具体的な設定の内容を記述します。

スポンサーリンク

Motivation

本サイトの運用を開始する際に常時HTTPS化を行うように設定してみましたが、その設定を行うためにいろいろな情報を調べてみました。すると、本来知りたかったおすすめ設定の他に、

「もうTLSv1.2以外は使わないような設定にした方がいいよー(意訳)」

とか、

「TLSv1.3が使えるようになったら、TLSv1.2もできるだけ使わせないようにした方がいいらしいよー(超意訳)」

という文章が目に飛び込んできました。

そんなわけで、そういえばHTTPにも1.0とか0.9とかっていう古いプロトコルがあったなぁ、と思いつつhttpdのアクセスログをよーく眺めてみると、今時HTTP/1.1以外のバージョンを指定してリクエストしてくるクライアントからの接続は受け付けないようにしてしまった方がよさそうな感じがしたので、設定を行うこととしました。

設定の方法

本サイトの設定の都合上、80番ポートに来たリクエストに対しては443番ポートにリダイレクトをしているために、HTTP/1.1以外のバージョンのプロトコルによる接続要求が443番ポートに来てしまう可能性があるので、Wordpress用のmod_rewriteまわりの設定の

RewriteEngine on

 
の直後あたりに、以下の2行を追加してみました。

RewriteCond %{THE_REQUEST} HTTP/(1\.0|0\.[0-9])$
RewriteRule ^(.*)$ – [R=403,L]

そもそも、443番ポートへの転送を行う前にステータスコード403を返してしまって処理を打ち切ってしまおうという設定です。
ステータスコードは最初は505を返そうと思っていたのですが、500番台のステータスコードを返すとサーバの管理・運用・実装の方法に問題があるように受け取られかねないので、403を返すことにしました。

上記の設定を追加して、httpdを再起動して、HTTP/1.0で80番ポートにアクセスすると”403 Forbidden”が返され、HTTP/1.1でアクセスすると、”200 OK”や”302 Found”といったメッセージが返されるようになります。

これで一晩稼働させて動作を確認してみたのですが、443番ポートに直接HTTP/1.0で接続された場合には対応できなかったので、ssl.confのバーチャルホストの設定の内部にも以下の設定を追加してhttpdを再起動してみました。

RewriteEngine on
RewriteCond %{THE_REQUEST} HTTP/(1\.0|0\.[0-9])$
RewriteRule ^(.*)$ – [R=403,L]

 

まとめ

ここまでの設定で、80番及び443番のどちらのポートでもHTTP/1.0での接続を受け付けないように設定することができたようです。

そこで、上記の設定でしばらく様子を見ることにします。

本記事は以上です。
[2017/11/16 補足] その後、様子を見ていますが、特に大きな問題は起きていないように見えます。