【发布时间】:2021-12-27 21:21:57
【问题描述】:
我在 openshift 中有一个 nginx 容器。我正在尝试限制来自外部 IP 的访问,更具体地说,限制不在 10.X.X.X 范围内的任何内容。
这是我的配置文件
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。有没有一种方法可以允许或拒绝基于此
【问题讨论】:
-
你的第二个日志IP
10.131.2.1不是属于10.0.0.0/8子网以及第一个10.129.2.1一个吗? -
是的,
10.131.2.1∈10.0.0.0/8。 -
所以它检查的ip是第一个ip,而不是日志末尾的IP?在这种情况下,73.177.***.***
-
继续挖掘,看起来我正在尝试基于 http_x_forwarded_for 进行阻止