Аутентификация HAProxy Stats: Должны ли имя пользователя и пароль быть в открытом виде?

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

Я занимаюсь заменой моего старого балансировщика нагрузки nginx на HAProxy и мне очень нравится панель статистики из-за графического интерфейса, который я могу использовать, чтобы помещать серверы в режим дренажа или обслуживания. Однако меня беспокоит то, что имя пользователя и пароль для этого конфигурируются в открытом виде в одном из конфигурационных файлов. Я не смог найти информацию, которая позволила бы мне перенести это на другой вариант аутентификации, например LDAP, или защитить данные в хешированной форме.

Существует ли какой-либо способ не хранить эту информацию в открытом виде в конфигурации?

Да, они должны быть в открытом виде. Согласно руководству:

Поскольку метод аутентификации — это HTTP Basic Authentication, пароли циркулируют в открытом виде по сети. Таким образом, было принято решение, чтобы файл конфигурации также использовал открытые пароли, чтобы напомнить пользователям, что эти пароли не должны быть конфиденциальными и не должны делиться с другими учетными записями.

Обходной путь, который скрывает пароль stats.cfg, — это использование значения переменной окружения вместо пароля в конфигурационном файле.

Таким образом, stats.cfg может выглядеть следующим образом:

listen stats
        bind    *:1936
        mode    http
        stats auth admin:"$PASS"
        ...

Переменная окружения PASS хранит пароль. Пароль может быть заполнен через какой-либо секретный файл.

Есть возможность защитить вашу страницу статистики с помощью списка пользователей и хешированного пароля в конфигурационном файле.

Рабочий пример может выглядеть так:

userlist stats-auth
    group admin    users admin
    group readonly users user1, user2

    user  admin  password $6$o9HkZQwkJhh8bK$0TDm5DCA8vQ...0kNNaD53QdYpWfNWHbboegayK0
    user  user1  password $6$N2n7dooaQ$oQlLQ.mQ80BvUWtg...WvVYMs1U3Xod3.wR9VCtYGhrm1
    user  user2  password $6$wGOwRT5JG8T$RWWW3oSwSax4ON...3Tpi2M20lcPmYv6aIju.VNYWC/

listen HAProxy-Statistics
    bind :81
    mode http
    stats enable
    acl isAuth http_auth(stats-auth)
    acl isAuthAmin http_auth_group(stats-auth) admin
    stats refresh 10s
    stats show-node
    stats show-legends
    stats uri /stats
    stats http-request auth unless isAuth
    stats admin if isAuthAmin

Затем можно использовать mkpasswd для генерации валидного и надежного хешированного пароля:

sudo apt install whois

mkpasswd -m sha-512 "MyPassword123!"

Вот различные ссылки, которые можно проконсультироваться по поводу этой реализации:

Ссылка на базовую аутентификацию и альтернативы для хранения пароля:
https://www.haproxy.com/documentation/haproxy-configuration-tutorials/authentication/basic-authentication/

Ссылка для определения пользователя с хешированным паролем:
https://www.haproxy.com/documentation/haproxy-configuration-manual/latest/#3.4-user

Ссылка для определения страницы статистики и защиты ее с помощью списка пользователей.
https://www.haproxy.com/documentation/haproxy-configuration-manual/latest/#4.2-stats%20admin

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

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

Теория

HAProxy предоставляет широкие возможности для управления и мониторинга, включая функцию статистической панели, которая значительно упрощает поддержку и контроль за работой серверов. Однако, по умолчанию, аутентификация на этой странице осуществляется с использованием HTTP Basic Authentication, где пароль передается в открытом виде. Это вызывает очевидные вопросы безопасности, так как подобные данные могут быть уязвимы к перехвату в сетевой среде. Кроме того, традиционно в конфигурационных файлах HAProxy пароли также хранятся в открытом виде. Хотя это делается для повышения осведомленности пользователей о необходимости использования уникальных и несекретных учетных данных, возникает вопрос, как повысить безопасность без необходимости менять архитектуру всей системы.

Пример

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

listen stats
    bind    *:1936
    mode    http
    stats auth admin:"$PASS"

В данном случае переменная окружения PASS хранит пароль, который может загружаться из защищенного файла секретов. Это позволяет избежать хранения пароля в виде чистого текста в конфигурационном файле.

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

userlist stats-auth
    group admin    users admin
    user  admin  password $6$o9HkZQwkJhh8bK$0TDm5DCA8vQ...0kNNaD53QdYpWfNWHbboegayK0

listen HAProxy-Statistics
    bind :81
    mode http
    stats uri /stats
    stats auth unless isAuth
    stats admin if isAuthAdmin

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

Применение

Чтобы использовать вышеперечисленный подход, сначала необходимо установить утилиту для генерации хэшированных паролей. Например, в Ubuntu это можно сделать с помощью утилиты whois, поставив соответствующий пакет:

sudo apt install whois
mkpasswd -m sha-512 "MyPassword123!"

Вышеописанные методы применения позволяют не только повысить безопасность, но и создать более гибкую инфраструктуру для управления пользователями в системе HAProxy.

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

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

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