Как мне настроить haproxy, чтобы добавить два фронтенда для доступа к owa online?

Вопрос или проблема

Я сталкиваюсь с проблемой на сервере Ubuntu 16.04 с HAPROXY при перенаправлении для отображения OWA в интернете. У меня есть домен, и я установил Exchange Server 2013 на Windows Server 2012 R2. Мне нужно использовать второй фронтенд с TCP для OWA на портах 443 и 80.

Проблема в том, что OWA появляется иногда, а после обновления страницы возникает ошибка или другой мой сайт с другим CA из-за старого фронтенда haproxy-in (режим http). У меня есть LetsEncrypt для всех моих сайтов, назначенных на порт 443.

Пожалуйста, мне нужно решение, чтобы открыть OWA и другие сайты.

Вот мой файл конфигурации haproxy для первого фронтенда:

frontend haproxy_in
bind *:80
bind *:443 ssl crt /etc/haproxy/certs/mdl.ief.tishreen.edu.sy.pem crt /etc/haproxy/certs/mail.ief.tishreen.edu.sy.pem  crt /etc/haproxy/certs/lib.ief.tishreen.edu.sy.pem crt /etc/haproxy/certs/ief.tishreen.edu.sy.pem crt /etc/haproxy/certs/www.ief.tishreen.edu.sy.pem crt /etc/haproxy/certs/educloud.ief.tishreen.edu.sy.pem crt /etc/haproxy/certs/vpn.ief.tishreen.edu.sy.pem
mode http
# Определение пути для LetsEncrypt.........................
acl is_letsencrypt path_beg -i /.well-known/acme-challenge/
use_backend letsencrypt if is_letsencrypt
# Определение хостов........................................
acl is_moodle hdr_dom(host) -i mdl.ief.tishreen.edu.sy
acl is_lib hdr_dom(host) -i lib.ief.tishreen.edu.sy
acl is_mail hdr_dom(host) -i mail.ief.tishreen.edu.sy
acl is_vpn hdr_dom(host) -i vpn.ief.tishreen.edu.sy
acl is_www hdr_dom(host) -i www.ief.tishreen.edu.sy
# Направление хостов к бэкенду..............................
use_backend moodle if is_moodle
use_backend lib if is_lib
use_backend vpn if is_vpn
use_backend www if is_www
default_backend base
# Перенаправление порта 80 на 443, кроме lets encrypt............
redirect scheme https code 301 if !{ ssl_fc } !is_letsencrypt
### фронтенд exchange owa####
frontend exchange-server
bind *:80
bind *:443
mode tcp
acl is_mail hdr_dom(host) -i mail.ief.tishreen.edu.sy
use_backend mail if is_mail

default_backend base

backend mail
balance roundrobin
mode tcp
server vm3 172.17.16.22:443 check
######################
#            #
#   Бэкенды     #
#            #
######################
backend letsencrypt
server letsencrypt 127.0.0.1:8888
backend moodle
balance roundrobin
mode http
server vm1 172.17.16.20:80 check

backend lib
balance roundrobin
mode http
server vm2 172.17.16.18:80/akasia check

backend vpn
balance roundrobin
mode http
server vm4 172.17.16.35:1194 check

backend www
balance roundrobin
mode http
server vm5 172.17.16.25:80 check

backend base
balance roundrobin
mode http
server vmtest 172.17.16.25:80 check


###############################

Использование tcp в качестве режима бэкенда для https соединения не будет работать, когда сам HAproxy работает как SSL терминатор.

Есть два способа сделать вашу конфигурацию работоспособной в зависимости от вашей установки:

1: Измените конфигурацию OWA, чтобы разрешить http соединения, а затем используйте http в качестве режима бэкенда, оставив задачу SSL только для HAProxy.

2: Измените конфигурацию HAProxy, чтобы использовать https и без проверки ssl на бэкенде, что-то вроде:

backend mail
    balance roundrobin
    mode http
    server vm3 172.17.16.22:443 ssl verify none

Попробуйте эту конфигурацию с только одним фронтендом (я использую один публичный IP и два внутренних сервера с SSL). Оба сервера доступны на порту 443 и 80 (порт 80 необходим для обновления сертификатов letsencrypt). Серверы находятся в разных подсетях без проблем. У меня нет никаких сертификатов на сайте haproxy, и одни и те же имена в внутреннем и публичном DNS.

frontend ft_ssl_vip
  mode tcp
  bind *:443
  bind *:80
  tcp-request inspect-delay 5s
  acl sslv3 req.ssl_ver 3
  tcp-request content reject if sslv3
  tcp-request content accept if { req_ssl_hello_type 1 }
  default_backend bk_ssl_default

backend bk_ssl_default
  mode tcp
# Использование SNI для принятия решения о маршрутизации
  acl exchange1 req_ssl_sni -i email.tld.com
  acl exchange2 req_ssl_sni -i autodiscover.tld.com
  acl nextcloud1 req_ssl_sni -i cloud.tld.com
  use-server server1 if exchange1
  use-server server1 if exchange2
  use-server server2 if nextcloud1

  stick-table type binary len 32 size 30k expire 30m

  acl clienthello req_ssl_hello_type 1
  acl serverhello rep_ssl_hello_type 2

# используйте tcp content accept для обнаружения ssl client и server hello.
  tcp-request inspect-delay 5s
  tcp-request content accept if clienthello

# без тайм-аута на проверку ответа по умолчанию.
  tcp-response content accept if serverhello

  stick on payload_lv(43,1) if clienthello

# Запомнить ответ, если сервер hello.
  stick store-response payload_lv(43,1) if serverhello

  option ssl-hello-chk
  server server1 192.168.xx1.xx1 check
  server server2 192.168.xx2.xx2 check 

Ответ или решение

Для решения вашей задачи по корректной конфигурации HAProxy для доступа к Outlook Web App (OWA) с использованием двух фронтендов на портах 443 и 80, необходимо внести несколько изменений в существующую конфигурацию. Важно учесть, что использование режима TCP для HTTPS-соединений может вызвать проблемы, если HAProxy сама выступает в качестве SSL-терминатора.

Шаги по настройке HAProxy

  1. Обновление конфигурации фронтендов: Мы создадим два фронтенда — один для OWA, а другой для остальных приложений. Фронтенд для OWA будет использовать режим TCP для обеспечения шифрования.

  2. Изменение режима бэкендов: Мы используем HTTP в бэкенде для OWA, что позволит HAProxy выполнять SSL-терминацию.

Вот пример новой конфигурации:

frontend haproxy_in
    bind *:80
    bind *:443 ssl crt /etc/haproxy/certs/mdl.ief.tishreen.edu.sy.pem ...
    acl is_letsencrypt path_beg -i /.well-known/acme-challenge/
    use_backend letsencrypt if is_letsencrypt

    acl is_moodle hdr_dom(host) -i mdl.ief.tishreen.edu.sy
    acl is_lib hdr_dom(host) -i lib.ief.tishreen.edu.sy
    acl is_mail hdr_dom(host) -i mail.ief.tishreen.edu.sy
    acl is_vpn hdr_dom(host) -i vpn.ief.tishreen.edu.sy
    acl is_www hdr_dom(host) -i www.ief.tishreen.edu.sy

    use_backend moodle if is_moodle
    use_backend lib if is_lib
    use_backend vpn if is_vpn
    use_backend www if is_www

    # Перенаправление на HTTPS
    redirect scheme https code 301 if !{ ssl_fc } !is_letsencrypt

frontend owa_frontend
    bind *:443 ssl crt /etc/haproxy/certs/mail.ief.tishreen.edu.sy.pem
    mode tcp
    acl is_mail hdr_dom(host) -i mail.ief.tishreen.edu.sy
    use_backend mail_backend if is_mail

backend mail_backend
    balance roundrobin
    mode http  # Замените tcp на http
    server vm3 172.17.16.22:443 ssl verify none check

Подробные пояснения к конфигурации

  1. Фронтенд OWA:

    • bind *:443 ssl crt ...: HTTPS подключение для OWA с вашим SSL сертификатом.
    • mode tcp: Дает возможность вести связь по TCP между клиентом и сервером.
    • acl is_mail hdr_dom(host): Определяет, что запрос на mail.ief.tishreen.edu.sy будет обрабатываться этим фронтендом.
  2. Бэкенд OWA:

    • balance roundrobin: Используется для распределения нагрузки между сервером OWA.
    • mode http: Включает поддержку HTTP, что позволяет HAProxy управлять SSL-соединениями, а затем передавать запросы по HTTP.
    • server vm3 172.17.16.22:443 ssl verify none check: Указывает на сервер OWA, где ssl verify none отключает проверку сертификата для внутренней связи.
  3. Перенаправление для Let’s Encrypt:

    • acl is_letsencrypt и соответствующий use_backend letsencrypt: Это позволяет HAProxy правильно обрабатывать запросы на обновление сертификатов Let’s Encrypt.

Тестирование и отладка

После внесения изменений в конфигурацию, выполните следующие шаги:

  • Проверьте синтаксис конфигурации командой: haproxy -f /etc/haproxy/haproxy.cfg -c
  • Перезапустите HAProxy для применения изменений: systemctl restart haproxy
  • Проверьте доступность OWA через веб-браузер. Убедитесь, что при обращении по пути mail.ief.tishreen.edu.sy вы видите страницу OWA.

Заключение

Эта конфигурация должна помочь в устранении проблем с доступом к Outlook Web App и другим приложениям, устанавливая отдельные фронтенды для обработки различных доменных имен. Убедитесь, что у вас правильно настроены DNS-записи, чтобы они указывали на IP-адрес вашего HAProxy. 활용하여, в случае возникновения дополнительных проблем или вопросов, рассмотрите возможность анализа логов HAProxy для выявления причин ошибок.

Оцените материал
Добавить комментарий

Капча загружается...