global
log /dev/haproxy/log local0local2 debug
chroot # см https:/var/en.wikipedia.org/wiki/Syslog#Facilitylib/haproxy
log /dev/haproxy/log local1 noticepidfile # notice - уровень ошибки. весь список: emerg, alert, crit, err, warning, notice, info, debug
chroot /var/librun/haproxy.pid
maxconn 4000
#user изменяем директорию выполнения для защиты от атак, папкаhaproxy
пуста и нет прав
group maxconn 256 haproxy
daemon
stats socket /var/lib/haproxy/stats
stats timeout 30s
ssl-default-bind-ciphers PROFILE=SYSTEM
# максимальное количество одновременных подключений. ssl-default-server-ciphers PROFILE=SYSTEM
stats socketssl-dh-param-file /runetc/haproxy/admin.sock mode 660 level admin # связывает сокет с admin.sock
dhparams.pem
defaults
mode tcp
log stats timeout 3s
user haproxy
group haproxy
daemonglobal
option httplog
option # Запустить процесс в фоновом режиме
# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
defaults
dontlognull
option log global # параметры лога берутся из секции globalredispatch
modebalance tcp roundrobin
# режим работы экземпляраretries HAProxy
option dontlognull # отключить логи для фиктивных подключений
timeout connect 5000ms3
timeout clientconnect 50000ms
timeout server 50000ms10s
timeout retriesclient 3 # кол-во попыток до того, как понизить статус сервера1h
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
# Stats
frontend stats
bind *:8404 # настройка интерфейса для просмотра статистики
stats enable # включение вывода статистики
stats hide-version # скрытие версии HAProxy на странице статистики
stats realm Haproxy\ Statistics # установка authentication realm
stats uri /haproxy # установка ссылки на страницу статистики
stats auth stat:stat # логин и пароль от страницы статистики
stats refresh 3s # период обновления страницы статистики
frontend ft_rdp
mode tcp # режим работы frontend
bind 192.168.48.140:3389 # Адрес и порт на HAProxy для подключения клиентов
timeout client 1h timeout server 1h
listen stats
mode http
bind *:8888 ssl crt /etc/haproxy/haproxydomainlocal.pem
stats enable
timeout client 5m
timeout server 5m
stats realm Haproxy\ Statistics
stats uri /haproxy
stats auth stat:stat
stats hide-version
stats refresh 3s
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend frontend_pam
mode http
bind *:443 ssl crt /etc/haproxy/haproxydomainlocal.pem
option forwardfor
acl url_core path_beg /pam/core
use_backend backend_api if url_core
acl url_idp path_beg /pam/idp
use_backend backend_idp if url_idp
acl url_mc path_beg /pam/mc
use_backend backend_mc if url_mc
acl url_uc path_beg /pam/uc
use_backend backend_uc if url_uc
frontend frontend_sshp
mode tcp
bind *:22 # порт не должен совпадать с изначальным SSH портом данной Linux машины
log global
option tcplog
default_backend backend_sshp
frontend frontend_gw
mode tcp
bind *:3389
log global
# настройка логов TCP подключений с состояниями и таймерамиoption tcplog
tcp-request inspect-delay 2s # установка максимального времени анализа входящего соединения2000
tcp-request content accept if RDP_COOKIE # сессия открывается при наличии RDP протокола
default_backend bk_rdp # название backend, обрабатывающего запросы
backend bk_rdpbackend_gw
#---------------------------------------------------------------------
# balancing between the various backends
#---------------------------------------------------------------------
backend backend_sshp
mode tcp
balance leastconn
option tcp-check
# режим работы backendlog global
balancetcp-check leastconnconnect # выбор сервера с наименьшим числом активных соединенийport 22
timeout server 1h30m
timeout connect 4s5000
logserver global
gw1 gw1.domain.local:22 weight option10 tcp-check verify required ca-file /path/ca-cert.crt
server gw2 gw2.domain.local:22 weight 10 check verify required ca-file # Выполнить проверку доступности по TCP,
tcp-check connect port 3389 ssl # открывая зашифрованное соединение на порт 3389.
stick-table type ip size 1m expire 12h # настраиваем таблицу привязки по ip размером 1 млн записей и временем жизни записи 1 час
stick on src # использование ip-адреса клиента для привязки
default-server inter 3s rise 2 fall 3 # Установить интервал проверки у серверов backend 3 сек. Сервер будет считаться активным после 2 успешных проверок и недоступным после 3 неудачных проверок./path/ca-cert.crt
backend backend_api
mode http
balance source
option prefer-last-server
option httpchk GET /pam/core/health
server srv1 srv1.domain.local:443 ssl verify required ca-file /path/ca-cert.crt check inter 3000 fall 3
server srv2 srv2.domain.local:443 ssl verify required ca-file /path/ca-cert.crt check inter 3000 fall 3
backend backend_idp
mode http
balance source
option prefer-last-server
option httpchk GET /pam/idp
server srv1 srv1.domain.local:443 ssl verify required ca-file /path/ca-cert.crt check inter 3000 fall 3
server srv2 srv2.domain.local:443 ssl verify required ca-file /path/ca-cert.crt check inter 3000 fall 3
backend backend_mc
mode http
balance source
option prefer-last-server
option httpchk GET /pam/mc
server gw1srv1 192srv1.168domain.10.145local:3389443 weightssl 10 check verify nonerequired ca-file /path/ca-cert.crt check inter #3000 Сервера PAM Gateway: веса серверов равны относительно друг друга,fall 3
server gw2srv2 192srv2.168domain.10.146local:3389443 weightssl 10 check verify nonerequired ca-file /path/ca-cert.crt check inter #3000 проверка доступности включена, сертификат не проверяетсяfall 3
frontendbackend frontendbackend_httpuc
mode http mode http
balance source
option prefer-last-server
option httpchk GET /pam/uc
server # режим работы frontend
bind *srv1 srv1.domain.local:443 ssl crt verify required ca-file /etc/ssl/certs/ubuntu.test.com.pem # настройка интерфейса для входящих запросов
option forwardfor # передать оригинальный ip адрес клиента серверу
default_backend backend_http # название backend, обрабатывающего запросы
backend backend_http
mode http # режим работы backend
option prefer-last-server # попытка повторно использовать тоже соединение к серверу
option redispatch
balance roundrobin
option httpchk GET /api/isHealthy # проверка доступности приложения PAM Core
stick-table type string len 35path/ca-cert.crt check inter 3000 fall 3
server srv2 srv2.domain.local:443 ssl verify required ca-file /path/ca-cert.crt check inter 3000 fall 3
backend backend_gw
mode tcp
balance leastconn
option tcp-check
log global
tcp-check connect port 3389
stick-table type ip size 1m expire 1d12h
stick on src
# настройка, необходимаяdefault-server дляinter связи3000 gatewayrise и2 core, иначе просмотр видеопотока работать не будет
stick on path,word(2,/) if { path_beg /screencast/ } ##
server pam2 192.168.10.122:443 ssl verify none check inter 15s # отключена проверка сертификатов, проверка доступности 15 сек
server pam1 192.168.10.121:443 ssl verify none check inter 15s ##
fall 3
server gw1 gw1.domain.local:3389 weight 10 check verify required ca-file /path/ca-cert.crt
server gw2 gw2.domain.local:3389 weight 10 check verify required ca-file /path/ca-cert.crt |