Nginx在允许的子网中强制对IP进行身份验证


0

我正在为办公室内托管的站点实施身份验证,我有一个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,因为那里还有其他无需身份验证即可登录的设备。

Answers:


0

预计您的会得到403 deny。诀窍是忽略192.168.12.1,而不是在allow/deny语句中明确提及它。尝试这个。

satisfy any;

allow 192.168.1.0/24;
allow 192.168.11.0/24;

allow 192.168.12.2/32;
allow 192.168.12.3/32;
allow 192.168.12.4/30;
allow 192.168.12.8/29;
allow 192.168.12.16/28;
allow 192.168.12.32/27;
allow 192.168.12.64/26;
allow 192.168.12.128/25;

auth_pam "XXXXXXXXXX";
auth_pam_service_name "nginx";

看来肯定可以。但是,难道不应该有一个更优雅的解决方案吗?
Alonimus

1
是的,将192.168.12.1的端口分配给另一个VLAN,将其放入另一个网络。
drookie

1

接受的答案不再正确。此行为是一个错误,已在nginx 1.5.7(2013)中修复。您可以执行以下操作,为1.2.3.4强制进行基本身份验证,同时授予所有其他IP访问权限:

location / {
    satisfy any;

    deny 1.2.3.4;
    allow 0.0.0.0/0;

    auth_basic "Access denied";
    auth_basic_user_file /etc/nginx/htpasswd;
}

这也记录在这里。请注意,nginx以first-match方式处理allow和deny指令。


您似乎错过了粘贴链接,请也添加它。
丹尼斯·诺尔特

感谢您的提示,显然注释编辑器使用了不同的语法。预览效果不错。我现在修复了语法缺陷。
themisterunknown
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.