Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

При одновременной балансировке сервер HAProxy будет принимать запросы и как веб-сервер на адреса apicore, и как RDS сервер.

Необходимо указать адрес HAProxy в файлах:

Code Block
languagejs
titleC:\inetpub\wwwroot\pam\mc\assets\config\config.prod.json
"apiServer"core":  {
   "url":  "https://haproxy.domain.local/pam/core"
},
"idp":  {
   "url":  "https://haproxy.domain.local/api"pam/idp",
   "requireHttps":  true
},


Code Block
languagejs
titleC:\inetpub\wwwroot\pam\uc\assets\config\config.prod.json
"apiServercore":  {
   "url":  "https://haproxy.domain.local/apipam/core"
},
"gatewayServeridp":  {
   "addressurl":  "https://haproxy.domain.local/pam/idp",
   "requireHttps":  true
},


Code Block
languagexmljs
titleC:\Program Files\Indeed\inRights Indeed PAM\Gateway\ProxyApp\Pam.Proxy.App.exeappsettings.json
"Core":  {
  "Url":  <pamProxy ApiUrl="https://haproxy.domain.local/api" IdpUrl=pam/core"
},
"Auth":  {
  "IdpUrl":  "https://pam1haproxy.domain.local/pam/idp",


Code Block
languagejs
titleC:\Program Files\Indeed\Indeed PAM\SSH Proxy\appsettings.json
"Settings":  {
  "CoreUrl":  "https://haproxy... FileCopyMinBytesToSave="1048576" />
domain.local/pam/core",
  "IdpUrl":  "https://haproxy.domain.local/pam/idp",
...
}

Таким образом, в конфигурации HAProxy должны быть настроены отдельные frontend и backend для каждого сервиса.

Для двух PAM Core и двух PAM Gateway конфигурация HAProxy представлена ниже:

Code Block
languagejs
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