特定のリクエストヘッダが無い場合はリクエストをブロックする方法: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開発の基礎
Search
Recent Posts
- OpenSSHのエラー「bad ownership or modes for chroot directory component」の原因と解消方法
- Apacheの起動状態をチェックして停止してる場合にApacheを起動するシェルスクリプト
- Amazon LinuxのOSバージョンを調べる方法|/etc/redhat-release の代替ファイル
- MYSQLでダンプファイルを取得する際に発生したエラー「Couldn't execute 'SELECT BINLOG_GTID_POS('', '0')': You are not using binary logging (1381)」の原因と対処方法
- RHEL系Linuxでリポジトリを一覧表示するコマンド(dnf repolist)