nginxでIPもしくはuseragentでアクセス制限をする

はじめに

ここ数年、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";
}