Настройка LDAP-аутентификации на Apache
Задача
Необходимо сделать защиту API сервиса ONS с помощью аутентификации в Active Directory (LDAP).
В текущем варианте, есть беспарольный доступ к приложению Flask по API через nginx по двум протоколам http и https.
В качестве ОС используется Astra Linux 1.7.
Предполагается, что уже установлены http-серверы apache и nginx.
Диаграмма решения
Apache
Прежде всего. необходимо отключить AstraMode - иначе работать не будет.
Разрешить модули apache2:
Вот эти модули не надо:
- auth_form
- auth_kerb
- authn_anon
- auth_openidc
- request
- session
- session_cookie
- session_crypto
Далее, открываем порт 8009 для публикации сервиса авторизации в файле /etc/apache2/ports.conf:
Создаем файл виртуального хоста /etc/apache2/sites-available/ldap_auth.conf<VirtualHost 127.0.0.1:8009>
ServerAdmin webmaster@dataflex.local
DocumentRoot /var/www/html/auth
ErrorLog ${APACHE_LOG_DIR}/auth_err.log
CustomLog ${APACHE_LOG_DIR}/auth_acc.log combined
<LocationMatch ^/.*>
AuthType Basic
AuthName "LDAP authentication"
AuthBasicAuthoritative Off
AuthBasicProvider ldap
AuthLDAPURL "ldap://10.55.41.8:389/OU=SPB,OU=Regions,DC=dataflex,DC=local?sAMAccountName?sub?(objectClass=*)"
AuthLDAPBindDN IAC-IT-NS-SUDI_T
AuthLDAPBindPassword MySecretPass
AuthLDAPGroupAttributeIsDN on
AuthLDAPGroupAttribute member
</LocationMatch>
<Location />
LogLevel info
AllowOverride All
Options +Indexes +FollowSymlinks
Require valid-user
ProxyPass http://127.0.0.1:8002/ws/
</Location>
<Location /vm>
Require valid-user
ProxyPass http://127.0.0.1:8002/vm/
</Location>
<Location /ws>
Require valid-user
ProxyPass http://127.0.0.1:8002/ws/
</Location>
</VirtualHost>
Nginx
Создаем файл конфигурации nginx /etc/nginx/conf.d/enabled/ons.conf
## HTTPS wo secure [443]
server {
server_name ekb99-scl-ons1t;
listen 443 ssl http2;
ssl_certificate /etc/ssl/private/ekb99-scl-ons1t-bundle.pem;
ssl_certificate_key /etc/ssl/private/ekb99-scl-ons1t.key;
ssl_dhparam /etc/ssl/dhparams.pem;
client_max_body_size 100M;
location / {
include proxy_params;
#auth_request /auth;
try_files $uri $uri/ =404;
proxy_pass http://127.0.0.1:8009;
#proxy_pass http://127.0.0.1:8002;
}
location /vm {
include proxy_params;
proxy_pass http://127.0.0.1:8009/vm;
}
location /ws {
include proxy_params;
proxy_pass http://127.0.0.1:8009/ws;
}
}
## Current insecure ONS API backend [80]
server {
listen 80;
server_name ekb99-scl-ons1t;
client_max_body_size 100M;
location / {
include proxy_params;
proxy_pass http://127.0.0.1:8001;
}
}
## Htaccess basic secure ONS API backend [81]
server {
listen 81;
server_name ekb99-scl-ons1t.gazprom-neft.local;
client_max_body_size 100M;
location / {
include proxy_params;
auth_basic "API security access";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://127.0.0.1:8001;
}
}
После этого делаем проверку конфигурации и рестарт сервера:
Проверка работы
Заходим на клиентскую ВМ, с которой будем делать API-запросы к сервису. Проверяем работу без авторизации:
Проверяем работу c авторизацией по паролю из файла .htaccess:Проверяем работу с авторизацией по LDAP: