Назад | Перейти на главную страницу

Прокси NGinx, добавление базовой аутентификации на основе IP-адреса

Я создаю систему на основе OpenVPN, в которой клиенты будут подключаться к веб-сайту, защищенному с помощью базовой аутентификации (так оно и есть, изменить это невозможно).

Я хотел бы пройти через прокси-сервер nginx, который добавит мне правильный заголовок базовой аутентификации, прежде чем попасть на веб-сайт. Таким образом, на основе IP-адреса, используемого клиентом (исходящего из конфигурации OpenVPN), я бы получил его имя пользователя / пароль в БД и соответственно подделал заголовок. Таким образом, пользователю не нужно вводить логин / пароль.

Ввести заголовок базовой аутентификации очень просто:

location / {
   proxy_set_header Host $host;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_pass http://6.6.6.6:80;
   proxy_set_header Authorization "Basic a2luZzppc25ha2Vk";
}

Где «a2luZzppc25ha2Vk» - это, конечно, base64 для этого логина: пароля.

Итак, теперь мне нужно заменить a2luZzppc25ha2Vk значением, найденным в БД, согласно $ remote_addr

Вы можете сбросить свою базу данных в конфигурацию следующим образом:

geo $auth_base64 {
    <remote_addr1>/32   <base64_1>;
    <remote_addr2>/32   <base64_2>;
    <remote_addrN>/32   <base64_N>;
    default             <base64_for_default_address>
}

Конечно без «<>».

Затем включите эту конфигурацию в раздел http {}. Вы можете сделать простую cronjob (дамп, тест, перезагрузка).

Таким образом, переменная $ auth_base64 может использоваться в директиве proxy_set_header:

proxy_set_header Authorization "Basic $auth_base64";

Или вы можете использовать сторонний модуль: http://www.grid.net.ru/nginx/eval.en.html ведьма может оценивать ответ серверной части в переменных. Самостоятельно не проверял. Могут возникнуть проблемы с современными версиями nginx.