Nginx のアクセス IP ホワイトリストを構成する方法

1. Nginx がアクセス IP ホワイトリストを設定する

デプロイされたアプリケーションでは、特定の IP のみへのアクセスを許可し、他の IP へのアクセスを許可しない必要がある場合があります。この場合、アクセス ホワイトリストを設定する必要があります。

アクセス ホワイトリストを設定するには、さまざまな方法があります。
1. Alibaba Cloud/Huawei Cloud Management Platform などのネットワーク ファイアウォール設定を通じて2.
サーバー ファイアウォール設定を通じて、 許可および拒否パラメータを通じて 4. nginx の3. nginx 設定によるアクセス分散制限iptables

Nginx ホワイトリストは、許可と拒否を使用して制御されます。この構成は、http セグメント、サーバーまたは場所に追加できます。

アクセスが許可される IP 範囲を 10.10.10.0 ~ 10.10.10.255 のように増やしたい場合は、IP 範囲を表すために CIDR 形式を使用する必要があります。Nginx では、デフォルトで IP アドレスと CIDR 形式のみが許可されます。 . CIDR から IPv4 への Web サイト: https://www .ipaddressguide.com/cidr

例 1:
すべての nginx プロキシが有効になり、192.168.1.6 へのアクセスのみが許可され、他のすべての IP にはアクセスできなくなります。

http {
......
allow 192.168.1.6;
deny all;
......
}

例 2:
nginx サーバー プロキシは特定のポートで有効になり、192.168.1.6 と 192.168.1.6 へのアクセスのみが許可され、他のすべての IP にはアクセスできません。

server {
......
allow 192.168.1.6;
allow 192.168.1.8;
deny all;
......
}

例 3:
nginx の特定のロケーション プロキシが有効になり、192.168.1.6 および 192.168.2.0 ~ 192.168.2.255 のネットワーク セグメントへのアクセスのみが許可され、他のすべての IP にはアクセスできなくなります。

location /screen {
......
allow 192.168.1.6;
allow 192.168.2.0/24;
deny all;
......
}

変更が完了したら、nginx 構成ファイルの再ロードが有効になります: sbin/nginx -s reload

注: このマシンもこのプロキシにアクセスする必要がある場合は、忘れずにallow 127.0.0.1を追加してください。

サポート操作: インターネットでは、一般に、アクセス クライアントの IP はマシンのローカル エリア ネットワーク IP ではなく、オペレーターのエクスポート IP であるため、注意してください。


クエリ方法: Baidu または Sogou で、キーワード「IP」を入力し、「IP アドレス クエリ」の関連検索結果をクリックして IP をクエリします。
外部ネットワークが不明な場合、または外部ネットワークにアクセスできない場合は、nginx エラー ログ logs/error.log を検索して、この nginx にアクセスする IP を見つけることができます。

2. Nginx にホワイトリストを追加する 4 つの方法
1) ファイアウォールのホワイトリストを追加する

nginx ドメイン名設定で有効になっているポート (ポート 80 など) のホワイトリストを iptables に作成します。たとえば、100.110.15.16、100.110.15.17、100.110.15.18 のみがアクセスを許可されますが、これによりすべてのドメイン名がアクセスできるようになります。 nginx のポート 80 へ 制限はなく、範囲は比較的広いです。

2) アクセスに $remote_addr パラメータを使用した配布制限

nginx で特定のドメイン名へのアクセスのみを制限したい場合は、次のように nginx 構成ファイルで設定できます。

##白名单设置,只允许下面三个来源ip的客户端以及本地能访问该站。主要是下面这三行

if ($remote_addr !~ ^(100.110.15.16|100.110.15.17|100.110.15.18|127.0.0.1)) {

rewrite ^.*$ /maintence.php last;

}

3) 次のように $http_x_forwarded_for パラメータを使用してアクセスの分散を制限することもできます。
##白名单设置,只允许下面三个来源ip的客户端以及本地能访问该站。

if ($http_x_forwarded_for !~ ^(100.110.15.16|100.110.15.17|100.110.15.18|127.0.0.1)) {

rewrite ^.*$ /maintence.php last;

}

4) nginx の許可パラメータと拒否パラメータを使用してアクセスを制限することもできます。
##白名单设置,只允许下面三个来源ip的客户端以及本地能访问该站。

allow 100.110.15.16;

allow 100.110.15.17;

allow 100.110.15.18;

allow 127.0.0.1;

deny all;

3. Nginx はユーザー IP に基づいてアクセスジャンプを設定します

最初の方法

$remote_addr クライアントのIPアドレスを元に判定する判定が成功すれば301ジャンプが返ってくる 規則的なルールが書ける 不正なIPが大量にあると頭が痛くなる

if ($remote_addr = 192.168.1.123) {
    return 301 https://blog.whsir.com;
}

2番目の方法

nginx は Lua を通じて実装されています。この方法はKong Dashenによって提供されました。301 リダイレクトする必要がある IP を /tmp/ip ファイルに直接書き込みます。ネットワーク セグメントを 1 行に 1 つずつサポートしています。追加後、再起動する必要はありません。 nginx に追加すると、すぐに有効になります。

nginx はlua モジュールを使用する前にコンパイルする必要があることに注意してください。私のwhsir ワンクリック パッケージnginx には lua が統合されています。

rpm -ivh http://mirrors.whsir.com/centos/whsir-release-centos.noarch.rpm

yum install wnginx -y
set_by_lua $info '

    local opt = ngx.var.remote_addr

    local file = io.popen("ip=" ..opt.. ";if grep -q $ip /tmp/ip;then echo $ip; exit 0;fi ; for net in $(grep / /tmp/ip);do [ $(ipcalc -n $ip/${net#*/}) = $(ipcalc -n $net) ] && echo $ip && break; done")

    content1 = file:read("*l")

    return content1

';



if ( $info = $remote_addr) {

    return 301 https://blog.whsir.com;

}
4. nginx で IP ホワイトリストを構成する詳細な手順

nginx アクセス ログを分析して、どの IP が nginx にアクセスしたかを確認します。

コマンドリファレンス:

awk '{print $1}' logs/access.log | sort | uniq -c | sort -nr -k1

出力効果の例:

1053 192.168.3.15
893 192.168.3.10
818 192.168.0.8


1.IPホワイトリストファイルを追加します。

nginx ディレクトリの conf にファイル ip.conf を追加します。ホワイトリスト ファイルにはコメントを追加する必要がなく、空白行を含めることができることに注意してください。

vi ip.conf
192.168.3.11 1;

192.168.3.10 1;
192.168.0.112 1;


2.
http ノードを編集するように nginx.conf を構成します。

http {

    # ...

    # geo IP whitelist

    geo $remote_addr $ip_whitelist {

       default 0;

       include ip.conf;

    }

    # ...

}

サーバーノードを編集します:

server {

    listen       80;

    # ...

    # IP whitelist

    set $whitelist_flag 1;

    if ( $ip_whitelist != 1 ) {

       set $whitelist_flag "${whitelist_flag}0";

    }

    if ( $request_uri !~* '/warn_navigate_page' ) {

       set $whitelist_flag "${whitelist_flag}0";

    }

    if ( $whitelist_flag = "100" ) {

       #return 403;

       rewrite ^(.*)$ $scheme://$host:$server_port/warn_navigate_page break; #白名单的提示页面

    }

    # ...

}

場所ノードでも編集できます。例:

ロケーションノードを編集します。

location /test {

    proxy_pass  http://IP/test;

    # ...

    # IP whitelist

    set $whitelist_flag 1;

    if ( $ip_whitelist != 1 ) {

            set $whitelist_flag "${whitelist_flag}0";

    }

    if ( $request_uri !~* '/warn_navigate_page' ) {

            set $whitelist_flag "${whitelist_flag}0";

    }

    if ( $whitelist_flag = "100" ) {

            #return 403;

            rewrite ^(.*)$ $scheme://$host:$server_port/warn_navigate_page break; #白名单的提示页面

    }

  

    # ...

}

ナビゲーション プロンプト ページを追加/warn_navigate_page

server {

    listen       80;

    # ...

    # 白名单的提示导航页面

    location /warn_navigate_page {

        root /home/java/nginx/bizapp/warn_navigate_page;

        index  warn_navigate_page.html warn_navigate_page.htm;

        rewrite ^(.*)$ /warn_navigate_page.html break;

    }

}

3. ホワイトリストのプロンプト ナビゲーション ページを編集し、
/home/java/nginx/bizapp/warn_navigate_page のページ warn_navigate_page.html を編集します。

参考:

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="utf-8">

    <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no">

    <meta content="yes" name="apple-mobile-web-app-capable">

    <meta content="black" name="apple-mobile-web-app-status-bar-style">

    <meta content="telephone=no" name="format-detection">

    <meta content="email=no" name="format-detection">

    <title>系统通知</title>

    <style type="text/css">

        body {

            background: url(https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png) no-repeat;

            background-size: 100% 100%;

            background-attachment: fixed;

        }

    </style>

</head>

<body>

    <div>

        <pre>                                                                                     【通知公告】

        尊敬的用户您好,系统已不提供IP地址直接访问,请联系管理员添加白名单。互联网的域名访问地址:<a href="https://www.baidu.com">跳转https://www.weidianyuedu.com</a>

        </pre>

    </div>

</body>

<script type="text/javascript">

</script>

</html>


 参考:https://blog.csdn.net/wanzhong11/article/details/131396910

https://blog.csdn.net/hdxx2022/article/details/132020861

https://blog.whsir.com/post-4430.html

おすすめ

転載: blog.csdn.net/lxw1844912514/article/details/133320686