Добавление исключения к базовой проверке подлинности nginx HTTP в зависимости от нахождения в локальной сети
Я запускаю установку веб-приложения, работающего на автономном сервере, который находится в моей основной сети вместе со всеми компьютерами нашей компании и парой других серверов.
Мы решили, что хотим добавить базовую аутентификацию HTTP в качестве дополнительного уровня безопасности, но мы хотим, чтобы люди, подключенные к локальной сети, были освобождены от этого.
После того, как изначально пытался использовать allow
а также deny
директивы, я вместо этого был убежден пользователем переполнения стека вместо того, чтобы использовать geo
, Я добился прогресса, но столкнулся с неприятной проблемой. Кажется, я не могу сделать исключение для диапазона IP-адресов 192.168.1.1-192.168.1.255.
Чтобы показать, что я делал, я добавлю нижеприведенный фрагмент с диапазонами адресов, а затем объясню дальше.
geo $authentication {
default "Authentication required";
127.0.0.1 "off";
192.168.1.0/24 "off";
10.8.0.0/24 "off";
78.432.xx.xx/0 "off";
0.0.0.0/0 "off"
}
server {
location / {
auth_basic $authentication;
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
Я закомментировал все диапазоны IP-адресов (кроме 127.0.0.1), и вот что происходит в каждом сценарии:
- Если я оставляю все комментарии, при доступе к веб-странице меня сначала запрашивают учетные данные, как и ожидалось
- Если я раскомментирую
0.0.0.0/0
Я могу подключиться к странице без учетных данных, как ожидалось. - Если я раскомментирую
78.432.xx.xx/0
(это мой реальный публичный адрес, отредактированный), я могу получить доступ к странице без учетных данных, как ожидалось. - Если я раскомментирую
10.8.0.0/24
(это IP-адреса, которые назначаются пользователям при использовании нашего VPN) при подключении к VPN и, следовательно, назначаемый адрес10.8.0.5
при доступе к веб-странице меня запрашивают учетные данные, чего я не ожидал. - Если я раскомментирую
192.168.1.0/24
при доступе к веб-странице меня запрашивают учетные данные, чего я не ожидал. Обратите внимание, что мой локальный IP-адрес192.168.1.22
,
Я могу видеть при доступе к странице это из журналов nginx:
78.432.xx.xx - - [23/Jan/2018:13:58:57 +0000] "GET / HTTP/1.1" 401 195 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0"
Это говорит о том, что nginx правильно определяет мой внешний IP-адрес и запрашивает учетные данные на его основе, но запись для внутренних IP-адресов не оказывает влияния. Это подтверждается тем, что если я вхожу 192.168.1.102
в браузере вместо доменного имени я могу получить доступ без учетных данных.
Базовая аутентификация работает, как и контроль IP в некоторой степени, но ясно, что я делаю что-то не так, но я не могу понять, что это такое.
Вопрос в том, как сказать nginx, чтобы он пропускал аутентификацию, если он обнаруживает локальный IP-адрес?