はじめに
ここ数年、nginxを使う企業も増えて来た。今回はnginxのアクセス制御についてまとめる
特定のIPからのアクセスを停止する
例えばDoS攻撃。Firewallで止めるのが一般的だが、Nginxで止めたい時もある。
その場合、拒否したいIPを先に書いて、allow allで締める。
location / { # block below IPs deny 123.11.12.3; deny 10.1.2.3; allow all; }
特定のIPから”のみ”アクセスを停止する
allowを先に書いて、deny allで締める。
location / { # block below IPs allow 123.11.12.3; allow 10.1.2.3; deny all; }
nginxでIPもしくはuseragentでアクセス制限をする
Nigixで複雑な制御をしたいときがある。 例えばnginxでIPもしくはuseragentでアクセス制限などだ。 set関数を使うと、if文のように管理しやすい
サンプルコード
nginxの設定ファイルで以下のように設定 123.12.1.1[2-9]のIPであれば許可 もしくはUseragentがFireFoxの場合はベーシック認証をかける設定
server { set $allow_ip 0; if ($http_x_forwarded_for ~ ^123\.12\.1\.1[2-9]$){ set $allow_ip 1; } set $fx 0; if ($http_user_agent ~ FireFox){ set $fx 1; } set $conditions "${allow_ip}${fx}"; location / { if ($conditions = 00){ return 403; } if ($conditions = 01){ set $auth_basic "basic auth"; } auth_basic $auth_basic; auth_basic_user_file "/etc/nginx/himitsu.htpasswd"; }