簡體   English   中英

nginx 拒絕基於 $http_x_forwarded_for

[英]nginx deny based on $http_x_forwarded_for

我在 openshift 中有一個 nginx 容器。 我試圖限制來自外部 IP 的訪問,更具體地說,限制在 10.XXX 范圍之外的任何內容。

這是我的配置文件

http {
    ....
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    ....

    }
    server {

        listen 8080;
        server_name app.okd.company.com;
        allow 10.0.0.0/8;
        deny all;
        location / {
        proxy_pass http://app/;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_redirect off;
        }

        location /static/ {
        autoindex on;
        alias /app/static/;
        }
    }

無論是私人的還是外部的,連接都是允許的。 這是一些日志。

10.129.2.1 - - [16/Nov/2021:19:28:57 +0000] "POST /graphql/ HTTP/1.1" 200 53384 "https://app.okd.company.com/" "Mozilla/5.0 ( X11; Linux x86_64; rv:94.0) Gecko/20100101 Firefox/94.0" "10.3.16.158"

10.131.2.1 - - [16/Nov/2021:19:42:56 +0000] "POST /graphql/ HTTP/1.1" 200 53384 "https://app.okd.company.com/" "Mozilla/5.0 ( X11; Linux x86_64; rv:94.0) Gecko/20100101 Firefox/94.0" "73.177.XXX.XXX"

第一個日志似乎允許私有 IP 連接,這是預期的,但第二個日志仍然被允許。 我不確定為什么它沒有阻塞。

編輯:

我意識到 remote_addr 在私有 IP 范圍內。 我不在乎它使用哪個代理訪問我可以控制的 nginx。 我只關心 origin/http_x_forwarded_for。 有沒有一種方法可以基於此允許或拒絕

要將http_x_forwarded_for用作真實 IP,您應該在服務器配置中進行設置。

...
    server {
        set_real_ip_from 10.0.0.0/8;
        real_ip_header X-Forwarded-For;
...

set_real_ip_from1不是可選的。 它需要包含所有可能是轉發代理的地址

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM