我正在为办公室内托管的网站实施身份验证,我有一个 PAM 身份验证模块来验证用户身份,到目前为止效果很好。
问题是我只需要对来自 Internet(外部)的用户进行身份验证,在本例中是 IP 192.168.12.1,它是将所有外部流量路由到内部 Web 服务器的网关设备。
我到目前为止的相关配置是这样的:
server {
listen 80;
server_name xxxxxxxxxx;
access_log /var/log/nginx/xxxxxxxx.log;
location / {
satisfy any;
allow 192.168.1.0/24; ##Office subnet
allow 192.168.11.0/24; ##Office subnet
##Inside this subnet is the IP that needs to have auth 192.160.12.1
allow 192.168.12.0/24; ## Office subnet
auth_pam "XXXXXXXXXX";
auth_pam_service_name "nginx";
proxy_pass http://xx.xx.xx.xx/; ## Redirects to desired web server
}
}
如果我使用
满足所有;
这将要求每个用户(内部和外部)进行身份验证,这不是我需要的
如果我这样拒绝 192.168.12.1 :
deny 192.168.12.1;
allow 192.168.1.0/24; ##Office subnet
allow 192.168.11.0/24; ##Office subnet
allow 192.168.12.0/24; ## Office subnet
我立即得到 403 禁止
如果我这样拒绝 192.168.12.1 :
allow 192.168.1.0/24; ##Office subnet
allow 192.168.11.0/24; ##Office subnet
allow 192.168.12.0/24; ## Office subnet
deny 192.168.12.1;
它只是绕过身份验证
我需要一种方法来强制 192.168.12.1 通过身份验证但不阻塞整个子网 192.168.12.0/24,因为那里还有其他设备应该能够在没有身份验证的情况下登录。
接受的答案不再正确。该行为是一个错误,已在 nginx 1.5.7 (2013) 中修复。您可以执行以下操作来强制对 1.2.3.4 进行基本身份验证,同时授予所有其他 IP 的访问权限:
这也记录在这里。请注意,nginx 以首次匹配方式处理允许和拒绝指令。
预计您将获得 403 的
deny
. 诀窍是省略 192.168.12.1,更不用说在allow/deny
语句中明确提及了。尝试这个。