Предусловие
- Развернутая система Indeed AM с основным и дополнительным серверами.
- Развернутые две машины с ОС Linux, с обновленными компонентами.
- Установленный Angie.
- Настройка прозрачной аутентификации, если балансируется MC/UC с Windows аутентификацией.
Для серверов Indeed AM возможно использовать балансировщик нагрузок Angie. Для обеспечения отказоустойчивости самого сервера с Angie рекомендуется развернуть второй сервер с Angie и использовать конфигурацию Angie + Keepalived.
Настройка
Сертификат веб-сервера на имя балансировщика/общее имя Keepalived
Можно выписать Wild Card сертификат с *, либо сертификат с DNS всех Angie и общего имени Keepalived:
В данном примере angie.indeed.local - виртуальное имя Keepalived, angie1.indeed.local - первый сервер Angie, angie2.indeed.local - второй сервер Angie.
Конвертация сертификата из .pfx в .pem
- Извлечь из сертификата зашифрованный приватный ключ (Потребуется указать пароль, заданный при экспорте сертификата):
openssl pkcs12 -in <Путь до вашего сертификата в формате pfx> -nocerts -out <Путь куда будет извлечен ключ>. Пример команды: openssl pkcs12 -in /etc/angie/angie.indeed.local.pfx -nocerts -out /etc/angie/angie.indeed.local.key
- Извлечь сертификат в формате crt:
openssl pkcs12 -in <Путь до вашего сертификата в формате pfx> -clcerts -nokeys -out <Путь куда будет извлечен сертификат в формате crt> Пример команды: openssl pkcs12 -in /etc/angie/angie.indeed.local.pfx -clcerts -nokeys -out /etc/angie/angie.indeed.local.crt
- Расшифровать приватный ключ (Потребуется указать пароль, заданный при экспорте сертификата):
openssl rsa -in <Путь до извлеченного ключа> -out <Путь куда будет извлечен расшифрованный ключ>. Пример команды: openssl rsa -in /etc/angie/angie.indeed.local.key -out /etc/angie/angie.indeed.local-descr.key
- Объединить расшифрованный ключ и сертификат в формате crt и скопировать в необходимую папку. В примере /etc/angie/. Для этого выполните команду:
sudo bash -c 'cat <Путь до извлеченного расшифрованного ключа> <Путь до сертификата в формате crt> >> /etc/angie/<Имя сертификата с форматом pem>' Пример команды: sudo bash -c 'cat /etc/angie/angie.indeed.local-descr.key /etc/angie/angie.indeed.local.crt >> /etc/angie/angie.indeed.local.pem'
Клиентский сертификат
Скопируйте сертификат eaclient.cer в /etc/angie. Пусть сертификата в дистрибутиве: Indeed AM 8.*.*\Indeed Access Manager Server\8.*.*\Misc\SourceCode_EA.Server_Certificates_ClientCertificate_eaclient.cer.
Настройка Angie
Пример конфига angie.conf
#include /etc/angie/http.d/*.conf;
#include /etc/angie/stream.d/*.conf;
user angie;
worker_processes auto;
worker_rlimit_nofile 65536;
error_log /var/log/angie/error.log debug;
pid /run/angie.pid;
events {
worker_connections 65536;
}
http {
resolver 127.0.0.53 status_zone=resolver_zone;
proxy_cache_path /var/cache/angie/cache keys_zone=cache_zone:1m;
limit_conn_zone $binary_remote_addr zone=limit_conn_zone:1m;
limit_req_zone $binary_remote_addr zone=limit_req_zone:1m rate=1r/s;
upstream backend {
least_conn;
zone backend 256k;
server indeedam2.indeed.local:443 weight=10 max_fails=3 fail_timeout=30s;
server indeedame.indeed.local:443 weight=10 max_fails=3 fail_timeout=30s;
# Липкие сессии
sticky cookie IndeedIdProxy secure httponly samesite=Lax;
# Для Windows Аутентификации
keepalive 16;
}
server{
# Параметры нужны для корректной работы IDP
proxy_busy_buffers_size 512k;
proxy_buffers 4 512k;
proxy_buffer_size 256k;
listen 443 ssl;
#http2 on;
server_name angie1.indeed.local;
# RSA key + crt
ssl_certificate angie.indeed.local.pem;
# RSA key
ssl_certificate_key angie.indeed.local-descr.key;
ssl_client_certificate eaclient.cer;
ssl_verify_client optional;
ssl_protocols TLSv1.2;
# headers
add_header Content-Security-Policy "frame-ancestors 'self';" always;
add_header Content-Security-Policy-Report-Only "default-src https:; script-src https: 'unsafe-eval' 'unsafe-inline'; style-src https: 'unsafe-inline'; img-src https: data:; font-src https: data:; report-uri /csp-report";
add_header Permissions-Policy "interest-cohort=()" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block" always;
# SSL
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES256-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA;
ssl_prefer_server_ciphers on;
ssl_session_tickets off;
ssl_session_timeout 5m;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504 http_429 non_idempotent;
# Сбор метрик
status_zone http_server_zone;
proxy_cache cache_zone;
location / {
proxy_buffering off;
proxy_request_buffering off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header X-Forwarded_For $proxy_add_x_forwarded_for;
proxy_ssl_verify off;
proxy_set_header Host $http_host;
proxy_set_header X-Real_IP $remote_addr;
real_ip_header X-Real-IP;
proxy_connect_timeout 600s;
proxy_read_timeout 600s;
proxy_ignore_headers Expires;
proxy_ignore_headers X-Accel-Expires;
proxy_ignore_headers Cache-Control;
proxy_ignore_headers Set-Cookie;
proxy_hide_header X-Accel-Expires;
proxy_hide_header Expires;
proxy_hide_header Cache;
proxy_hide_header Pragma;
add_header X-Proxy-Cache $upstream_cache_status;
proxy_redirect off;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-Host $host;
include ./eaclient.conf;
proxy_pass https://backend;
# Для Windows Аутентификации
proxy_http_version 1.1;
proxy_set_header Connection "";
}
location /status/ {
api /status/;
allow all;
#deny all;
}
# Light Консоль
location /console/ {
allow all;
#deny all;
auto_redirect on;
alias /usr/share/angie-console-light/html/;
index index.html;
location /console/api/ {
api /status/;
}
location /console/api/config/ {
api /config/;
}
api_config_files on;
}
}
}
В server_name укажите имя необходимого сервера Angie.
Конфиг eaclient.conf. Сертификат eaclient находится в дистрибутиве: Indeed AM 8.*.*\Indeed Access Manager Server\8.*.*\Misc\SourceCode_EA.Server_Certificates_ClientCertificate_eaclient.cer.
proxy_set_header X-IndeedAM-ClientCert "<base64 значение eaclient сертификата>";
Зайти в консоль статистики: https://angie.indeed.local/console.
Установка и настройка Keepalived
Данную установку необходимо произвести на каждом сервере с Angie.
- Введите команду для установки Keepalived: sudo apt-get install keepalived
- Откройте файл /etc/sysctl.conf и добавьте строки:
net.ipv4.ip_forward=1
net.ipv4.ip_nonlocal_bind=1
- Выполните команду sudo sysctl -p для проверки добавленных изменений
- Создайте файл конфигурации /etc/keepalived/keepalived.conf
- Настройте файл конфигурации согласно примеру ( config-keepalived-base.cfg ):
global_defs {
# Keepalived process identifier
lvs_id angie_DH
}
# Script used to check if Angie is running
vrrp_script check_angie {
script "killall -0 angie"
interval 2
weight 2
}
# Virtual interface
# The priority specifies the order in which the assigned interface to take over in a failover
vrrp_instance VI_01 {
state MASTER # MASTER для основного сервера, BACKUP для резевного
interface ens33 # Имя интерфейса можно узнать с помощью команды ifconfig
virtual_router_id 51
priority 101 # Для основного сервера с angie 101, для резевного 100
# The virtual ip address shared between the two loadbalancers
virtual_ipaddress {
192.168.1.89 # Виртуальный IP, по которому будет доступен keepalived
}
track_script {
check_angie
}
}
- На дополнительном сервере конфигурационный файл будет отличаться параметрами: "state BACKUP" и "priority 100". ( config-keepalived-backup.cfg )
global_defs {
# Keepalived process identifier
lvs_id angie_DH
}
# Script used to check if Angie is running
vrrp_script check_angie {
script "killall -0 angie"
interval 2
weight 2
}
# Virtual interface
# The priority specifies the order in which the assigned interface to take over in a failover
vrrp_instance VI_01 {
state BACKUP # MASTER для основного сервера, BACKUP для резевного
interface ens33 # Имя интерфейса можно узнать с помощью команды ifconfig
virtual_router_id 51
priority 100 # Для основного сервера с angie 101, для резевного 100
# The virtual ip address shared between the two loadbalancers
virtual_ipaddress {
192.168.1.89 # Виртуальный IP, по которому будет доступен keepalived
}
track_script {
check_angie
}
}
- Для виртуального адреса из примера: 192.168.1.89 создайте A-запись в DNS (В данной инструкции используется и настраивается для angie.indeed.local). DNS Manager>Forward Lookup Zones>New Host (A or AAAA). По этому адресу в дальнейшем будут доступны сервера c балансировщиком нагрузок Angie.
- Запустите keepalived командой /etc/init.d/keepalived start. Проверить работоспособность сервиса можно командой: sudo service keepalived status, а команой ip addr show ens33 (имя сетевого интерфейса) можно проверить поднялся ли виртуальный IP адрес.
Для перезагрузки службы используйте команду: sudo service keepalived restart
|