日: 2018年11月22日

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

    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";
    }