Серверы
  • Готовые серверы
  • Конфигуратор
  • Серверы с 1CPU
  • Серверы с 2CPU
  • 4 поколение AMD EPYC и Intel Xeоn
  • Серверы с AMD Ryzen и Intel Core i9
  • Серверы для хранения данных
  • Cерверы с портом 10 Гбит/c
  • GPU
  • Распродажа
  • VPS
    GPU
  • Выделенные серверы с GPU
  • Виртуальные серверы с GPU
  • Распродажа
    Маркетплейс
    Colocation
  • Размещение серверов в дата-центре в Москве
  • Обслуживание серверов в других ЦОД
  • Кластеры
    Прокат
    Услуги
  • Аренда сетевого оборудования
  • Защита 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 в Нидерландах в рублях на счет российской компании. Оплата с помощью банковских карт, в том числе и картой МИР, банковского перевода и электронных денег.

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

    14.07.2024

    Как смотреть видео на YouTube при замедлении сервиса в России?

    Мы протестировали скорость работы YouTube и качество видео при подключении к серверам сервиса в Европе и США.

    12.07.2024

    Создаем чат-бота техподдержки с RAG из документации компании в OpenWebUI | блог компании HOSTKEY

    Рассказываем о нашем опыте создания чат-бота технической поддержки, который призван помогать отделу фронтлайна отвечать на вопросы пользователей (а в будущем — стать частью нашей команды)

    17.06.2024

    Slack блокируют! Переходим на Rocket.Chat?!

    Есть ли жизнь после блокировки Slack? Рассказываем о плюсах альтернативного корпоративного мессенджера Rocket.Chat.

    06.06.2024

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

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

    13.05.2024

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

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

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