pg_hba.conf
Ограничивайте, кто может подключаться к pg_doorman, по адресу источника, базе, пользователю и типу соединения. Используется тот же формат правил, что и в pg_hba.conf PostgreSQL.
Это слой контроля доступа на сетевом уровне, который работает до проверки учётных данных. Соединение, отвергнутое pg_hba, никогда не доходит до проверки пароля.
Конфигурация
Три формата. Выбирайте тот, что подходит вашей инсталляции.
Inline-строка
general:
hba: |
hostssl all all 0.0.0.0/0 scram-sha-256
host all all 127.0.0.1/32 trust
local all all trust
host all all 0.0.0.0/0 reject
Из файла
general:
hba:
path: "/etc/pg_doorman/pg_hba.conf"
Файл читается при старте и по SIGHUP.
Inline-содержимое под структурным ключом
general:
hba:
content: |
hostssl all all 0.0.0.0/0 scram-sha-256
host all all 127.0.0.1/32 trust
То же, что и inline-строка; полезно, когда конфиг генерируется шаблонизатором.
Формат правил
Каждая строка:
<connection_type> <database> <user> [<source_cidr>] <method>
connection_type — один из:
| Тип | Совпадает с |
|---|---|
host | TCP, с TLS или без |
hostssl | TCP только с активным TLS |
hostnossl | TCP только когда TLS не активен |
local | Локальный Unix-сокет |
database — all, конкретное имя базы или список через запятую. replication не обрабатывается (pg_doorman не поддерживает проброс репликации).
user — all, конкретный пользователь или список через запятую. Префикс +groupname (членство в роли PostgreSQL) не поддерживается.
source_cidr — IPv4- или IPv6-CIDR. Обязателен для host, hostssl, hostnossl. Неприменим к local.
method — один из:
| Метод | Поведение |
|---|---|
trust | Полностью пропустить проверку учётных данных. Клиент допускается под тем именем, которое заявил. |
md5 | Принудительно требовать аутентификацию по паролю MD5. |
scram-sha-256 | Принудительно требовать аутентификацию SCRAM-SHA-256. |
reject | Отказать в соединении до любой проверки учётных данных. |
Правила оцениваются сверху вниз. Побеждает первое совпавшее.
Примеры
Требовать TLS из сети, разрешить открытое локально
hostssl all all 10.0.0.0/8 scram-sha-256
hostnossl all all 10.0.0.0/8 reject
host all all 127.0.0.1/32 trust
local all all trust
ACL по базам
host billing app_billing 10.0.0.0/8 scram-sha-256
host billing all 0.0.0.0/0 reject
host inventory app_inv 10.0.0.0/8 scram-sha-256
host all admin 10.1.1.0/24 scram-sha-256
host all all 0.0.0.0/0 reject
Заблокировать legacy MD5 из открытого интернета
hostssl all all 0.0.0.0/0 scram-sha-256
host all all 0.0.0.0/0 reject
Если в базе хранятся только хеши MD5, а клиент запрашивает SCRAM, аутентификация провалится с понятной ошибкой. Перед тем как ужесточать правила, переведите базу на SCRAM-SHA-256 (ALTER ROLE ... PASSWORD).
Отличия от pg_hba.conf PostgreSQL
- Нет ключевого слова
replication(pg_doorman не пробрасывает соединения репликации). - Нет методов
peer,ident,cert,gss,sspi,pam. PAM настраивается на пользователя черезauth_pam_service, не через HBA. - Нет префикса
+groupnameдля пользователя. - Нет регулярных выражений (синтаксис
/regex). - IPv6-CIDR поддерживается. IPv4-mapped IPv6 (
::ffff:1.2.3.4) сверяется с правилами IPv4.
Перезагрузка
kill -HUP $(pidof pg_doorman)
Существующие соединения заново не оцениваются. Новые соединения используют новые правила.
Оговорки
- Правила применяются к клиентам, подключающимся к pg_doorman, а не к PostgreSQL. Собственный
pg_hba.confPostgreSQL по-прежнему важен для соединения с бэкендом. trustдопускает клиента без какой-либо проверки учётных данных. Бэкенд всё равно должен аутентифицироваться как пользователь пула — но клиентская сторона не проверена. Используйтеtrustтолько в сетях, где адресу источника можно доверять (loopback, ограниченный Unix-сокет).- Поддержки LDAP, Kerberos и
peer-аутентификации нет — смотрите Сравнение.