Я реализую аутентификацию для сайтов, размещенных внутри офиса, у меня есть модуль аутентификации PAM, который аутентифицирует пользователей, и пока он работает хорошо.
Проблема в том, что мне нужно аутентифицировать ТОЛЬКО пользователей, которые приходят из Интернета (внешнего), в данном случае IP 192.168.12.1, который является устройством шлюза, который направляет весь внешний трафик на внутренний веб-сервер.
Соответствующая конфигурация, которая у меня есть, такова:
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
}
}
Если я использую
удовлетворить всех;
Это потребует от каждого пользователя (внутреннего и внешнего) авторизации, это не то, что мне нужно.
Если я поставлю deny 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 запрета
Если я поставлю 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
deny 192.168.12.1;
Он просто обходит аутентификацию
Мне нужен способ заставить 192.168.12.1 пройти аутентификацию, но без блокировки всей подсети 192.168.12.0/24, поскольку там есть другие устройства, которые должны иметь возможность регистрироваться без аутентификации.
Принятый ответ больше не правильный. Поведение было ошибкой, которая была исправлена в 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 обрабатывает директивы allow и deny в первый матч манера.
Ожидается, что вы получите 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";