Серверы
  • Готовые серверы
  • Конфигуратор
  • Серверы с 1CPU
  • Серверы с 2CPU
  • 4 поколение AMD EPYC и Intel Xeоn
  • Серверы с AMD Ryzen и Intel Core i9
  • Серверы для хранения данных
  • Cерверы с портом 10 Гбит/c
  • GPU
  • Распродажа
  • VPS
    GPU
  • Выделенные серверы с GPU
  • Виртуальные серверы с GPU
  • Распродажа
    Маркетплейс
    Colocation
  • Размещение серверов в дата-центре в Москве
  • Обслуживание серверов в других ЦОД
  • Кластеры
    Прокат
    Услуги
  • Защита от DDoS L7
  • Аренда сетевого оборудования
  • Защита L3-L4 от DDoS атак
  • IPV4 и IPV6 адреса
  • Администрирование серверов
  • Уровни технической поддержки
  • Мониторинг сервера
  • BYOIP
  • USB диск
  • IP-KVM
  • Трафик
  • Коммутация серверов
  • Поставки оборудования за рубежом
  • О нас
  • Работа в HOSTKEY
  • Панель управления серверами и API
  • Дата-центры
  • Сеть
  • Тест скорости
  • Специальные предложения
  • Отдел продаж
  • Для реселлеров
  • Гранты для специалистов по Data Science
  • Гранты для научных проектов и стартапов
  • Документация и Частые вопросы
  • Новости
  • Блог
  • Оплата
  • Документы
  • Сообщите о нарушении
  • Looking Glass
  • 01.08.2022

    Несколько хостов FreeIPA за HTTP-proxy: настраиваем HAProxy 2+

    server one

    Путь инженера в телекоме часто начинается с работы в службе технической поддержки. Если вы хотите вырастить из новичков высококлассных специалистов, нужно дать им возможность работать над выходящими за рамки служебных обязанностей задачами. Мы стараемся помогать активным коллегам в развитии — это один из главных принципов HOSTKEY с момента основания компании. Публикуем заметку о реализации проксирования административной панели FreeIPA через HAProxy, написанную нашим инженером техподдержки Александром Тряпкиным.

    HOSTKEY
    Арендуйте выделенные и виртуальные серверы с моментальным деплоем в надежных дата-центрах класса TIER III в Москве и Нидерландах. Принимаем оплату за услуги HOSTKEY в Нидерландах в рублях на счет российской компании. Оплата с помощью банковских карт, в том числе и картой МИР, банковского перевода и электронных денег.

    Проблема

    У нас есть три хоста административной панели FreeIPA (freeipa01.inside.mydomain.ru, freeipa02.inside.mydomain.ru и freeipa03.inside.mydomain.ru). Необходимо обеспечить доступ к ним по одному доменному имени: freeipa.mydomain.ru. При кажущейся простоте задачи для ее решения пришлось приложить усилия, поскольку в интернете не нашлось готовых рецептов для HAProxy версии 2.0 и выше.

    Каждая инсталляция FreeIPA привязана к своему доменному имени, а значит, нам потребуется править заголовки входящих и исходящих HTTP-запросов. Портал самообслуживания должен быть закрыт действующим сертификатом, при этом работающие в бэкенде хосты FreeIPA нельзя изменять, чтобы не затронуть взаимодействие между клиентами и серверами через API.

    В старых версиях HAProxy (1+) для редактирования HTTP-заголовков использовался метод reqrep/rsprep. В Сети есть инструкции по настройке HAProxy и FreeIPA с помощью этого метода, но в версии 2.0 он был помечен как deprecated, а в версии 2.1 полностью выведен из использования. Вместо rsprep мы будем использовать метод http-response.

    Решение

    Для начала отредактируем созданный по умолчанию конфигурационный файл HAProxy. В нем можно выделить четыре секции: global, defaults, frontend и backend. Первые две мы трогать не будем (достаточно стандартных значений), а вот frontend и backend опишем подробно:

    #Секция frontend
    frontend main 
    	bind :80
    	redirect scheme https code 301 if !{ ssl_fc } # редиректим на https frontend main_ssl
    	bind :443 ssl crt /etc/haproxy/ssl/ # используем сертификаты из директории
    	use_backend freeipa if { ssl_fc_sni freeipa.mydomain.ru } # в случае если обращаются к freeipa.mydomain.ru используем backend FreeIPA
    #Секция backend
    backend freeipa
    	mode http
    	balance roundrobin # по очереди распределяем нагрузку по хостам
    	cookie SERVERID insert indirect nocache httponly secure # добавляем cookie для направления трафика на основе него
    #acl для request на основе добавленного cookie
    	acl hdr_req_ipa01 req.hdr(Cookie) -m sub ipa01 
    	acl hdr_req_ipa02 req.hdr(Cookie) -m sub ipa02 
    	acl hdr_req_ipa03 req.hdr(Cookie) -m sub ipa03 
    #--------------------------------------------------------------------------
    #В зависимости от того, каким cookie помечен наш запрос, изменяем заголовки Host и Referer 
    	http-request set-header Host freeipa01.inside.mydomain.ru if hdr_req_ipa01
    	http-request replace-header Referer ^https?://freeipa\.mydomain\.ru(.*)$  https://freeipa01\.inside\.mydomain\.ru\1 if hdr_req_ipa01
    	http-request set-header Host freeipa02.inside.mydomain.ru if hdr_req_ipa02
    	http-request replace-header Referer ^https?://freeipa\.mydomain\.ru(.*)$ https://freeipa01\.inside\.mydomain\.ru\1 if hdr_req_ipa02
    	http-request set-header Host freeipa03.inside.mydomain.ru if hdr_req_ipa03
    	http-request replace-header Referer ^https?://freeipa\.mydomain\.ru(.*)$ https://freeipa01\.inside\.mydomain\.ru\1 if hdr_req_ipa03
    #--------------------------------------------------------------------------
    #acl для response на основе заголовка Location 
    	acl hdr_ipa01 res.hdr(Location) -m sub freeipa01.inside.mydomain.ru
    	acl hdr_ipa02 res.hdr(Location) -m sub freeipa02.inside.mydomain.ru
    	acl hdr_ipa03 res.hdr(Location) -m sub freeipa03.inside.mydomain.ru
    #--------------------------------------------------------------------------
    #В зависимости от того, с какого хоста пришел ответ, редактируем заголовки Set-Cookie и Location. Без редактирования заголовка Location мы столкнемся со следующей проблемой: пользователь при переходе по ссылке freeipa.mydomain.ru будет переброшен на один из хостов freeipa0x.inside.mydomain.ru (это важный момент, пропущенный во всех найденных руководствах).
    	http-response replace-header Set-Cookie ^Domain=freeipa01\.inside\.mydomain\.ru(.*) Domain=freeipa\.mydomain\.ru\1 if hdr_ipa01
    	http-response replace-value Location ^https?://freeipa01\.inside\.mydomain\.ru(.*)$ https://freeipa\.mydomain\.ru\1 if hdr_ipa01
    	http-response replace-header Set-Cookie ^Domain=freeipa02\.inside\.mydomain\.ru(.*) Domain=freeipa\.mydomain\.ru\1 if hdr_ipa02
    	http-response replace-value Location ^https?://freeipa02\.inside\.mydomain\.ru(.*)$ https://freeipa\.mydomain\.ru\1 if hdr_ipa02
    	http-response replace-header Set-Cookie ^Domain=freeipa03\.inside\.mydomain\.ru(.*) Domain=freeipa\.mydomain\.ru\1 if hdr_ipa03
    	http-response replace-value Location ^https?://freeipa03\.inside\.mydomain\.ru(.*)$ https://freeipa\.mydomain\.ru\1 if hdr_ipa03
    #--------------------------------------------------------------------------
    #Здесь указываем наши хосты FreeIPA
    	server ipa01 freeipa01.inside.mydomain.ru:443 check port 443 inter 5s rise 2 fall 5 cookie ipa01 weight 9 ssl verify none
    	server ipa02 freeipa02.inside.mydomain.ru:443 check port 443 inter 5s rise 2 fall 5 cookie ipa02 weight 1 ssl verify none
    	server ipa03 freeipa03.inside.mydomain.ru:443 check port 443 inter 5s rise 2 fall 5 cookie ipa03 weight 3 ssl verify none
    #check port 443 — проверяем, жив ли хост по 443 порту.
    #inter 5s — проверяем доступность с интервалом 5 секунд. 
    #rise 2 fall 5 — если 2 раза проверка скажет, что хост недоступен, он будет исключен из балансировки и возвращен после 5 успешных проверок.
    #cookie ipa0x — указывает, какое cookie будет добавляться cookie SERVERID insert.
    #ssl verify none — терминация SSL-сертификата, игнорирующая ошибки.
    #weight 3 — указываем приоритет распределения нагрузки.

    Также есть вероятность столкнуться с надоедливым окном базовой авторизации в браузерах Chrome, Edge, IE и некоторых других.

    Появление этого окна описано в багрепорте, там же есть решение проблемы, но при помощи HAProxy проблему можно решить без изменения конфигурации хостов. Для этого добавим в секцию backend конфигурационного файла следующую строку:

    http-response del-header www-authenticate

    Она удалит из ответа хоста заголовок, ответственный за появление навязчивого окна.

    Итоги

    Компания HOSTKEY всегда поддерживает инициативу своих сотрудников, что позитивно сказывается на клиентском опыте и развитии компании. Мы не только помогаем специалистам развиваться и делать карьеру (что опять-таки выгодно работодателю), но и получаем полезные клиентам прикладные разработки, а также интересные заметки для корпоративного блога. Надеемся, наше решение пригодится читателям.

    Арендуйте выделенные и виртуальные серверы с моментальным деплоем в надежных дата-центрах класса TIER III в Москве и Нидерландах. Принимаем оплату за услуги HOSTKEY в Нидерландах в рублях на счет российской компании. Оплата с помощью банковских карт, в том числе и картой МИР, банковского перевода и электронных денег.

    Другие статьи

    06.06.2024

    ТОП-10 трендов хостинга, на которые следует обратить внимание в 2024 году

    С учетом технологического прогресса и меняющихся потребностей пользователей провайдеры хостинга делают все больше для предоставления более эффективных, безопасных и устойчивых услуг.

    13.05.2024

    Могут ли LLM-агенты взламывать сайты и эксплуатировать уязвимости?

    Рассказываем про исследование в рамках которого тестировалась способность LLM-агентов взламывать сайты.

    17.04.2024

    Как выбрать правильный сервер c подходящими для ваших нейросетей CPU/GPU

    Рассказываем о наиболее важных компонентах, которые влияют на выбор сервера для искусственного интеллекта

    05.04.2024

    VPS, хостинг сайтов или конструктор? Где разместить сайт бизнесу?

    Давайте сравним размещение сайта на VPS, хостингах сайтов (общих хостингах) и в популярных конструкторах сайтов.

    21.03.2024

    Есть ли жизнь после Microsoft Teams и OneDrive?

    Ищем альтернативу облачным сервисам Microsoft. Чем заменить Microsoft Teams, OneDrive, Excel, Microsoft 365 и Azure

    HOSTKEY Выделенные серверы в Европе, России и США Готовые решения и индивидуальные конфигурации серверов на базе процессоров AMD, Intel, карт GPU, Бесплатной защитой от DDoS-атак и безлимитный соединением на скорости 1 Гбит/с 30
    4.3 48 48
    Upload