特定のリクエストヘッダが無い場合はリクエストをブロックする方法:Apache mod_rewriteによる設定方法

目次

スポンサードリンク

Webサーバーの前段にはロードバランサーやCDNなどを設置するケースがあります。

このようなケースでは、想定した経路でのリクエストかチェックし、想定外の経路で来たリクエストはブロックすることがあります。

Apacheの mod_rewrite を使って、特定のリクエストヘッダの有無をチェックし、リクエストヘッダが存在しない場合はリクエストをブロックする方法を解説します。

mod_rewrite とは

mod_rewrite は、Apache HTTP サーバーで利用できるモジュールです。このモジュールを使用すると、URL の書き換えやリダイレクト、リクエストのブロックなどの操作を実行できます。

https://httpd.apache.org/docs/current/mod/mod_rewrite.html

設定サンプル

以下の設定サンプルでは、RewriteCondディレクティブ で、後に続くRewriteRuleが適用されるための条件を定義しています。

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-For} !(^.+$)
RewriteRule ^.*$ - [F,L]

%{HTTP:X-Forwarded-For} は、X-Forwarded-Forという名前のHTTP ヘッダーの値を参照しており、!(^.+$) の部分が正規表現によるチェック条件です。先頭の ! はマッチを否定するため、X-Forwarded-Forヘッダーが空または存在しない場合に、後続のRewriteRuleが適用されます。

RewriteRuleディレクティブは、前の行のRewriteCond が満たされた場合に適用されるルールを定義しています。

^.*$ の部分でクライアントからリクエストされたURL全体をターゲットとし、[F,L] で、クライアントに 403 Forbidden のレスポンスを返すよう指示しています。

[F,L] は RewriteRule のフラグです。F は Forbidden の略、L は Last の略です。Lのフラグは、Apache にこのリクエストに対するこの設定以降の書き換えルールを処理しないように指示しています。


Linuxの基礎からセキュリティまで、サーバー運用に必要な知識をまとめた書籍

Webシステムの基礎について徹底的に学べるUdemy講座
【PHP, MYSQL, Apache】ガチで学びたい人のためのWEB開発の基礎 icon