pg_hba.conf — это конфигурационный файл PostgreSQL, предназначенный для управления подключениями и аутентификацией. HBA расшифровывается как Host-Based Authentication (аутентификация на основе хоста). Этот файл выступает в роли сетевого "шлагбаума", который определяет:
- Кому разрешено подключаться к серверу (IP-адреса, роль, база данных).
- Какой метод аутентификации требуется для подключения.
Если сравнивать это с реальной жизнью, то pg_hba.conf — это как сторож у входа в здание. Он решает, кого пускать внутрь, а кого нет, проверяя не только ваши документы (пароль), но и прописку (IP-адрес).
Структура файла pg_hba.conf
Файл pg_hba.conf состоит из строк, где каждая строка описывает правило доступа. Структура строки выглядит так:
<тип подключения> <база данных> <пользователь> <источник> <метод аутентификации>
Разберём компоненты:
Тип подключения (connection type): определяет, как клиент будет подключаться.
local: подключение через Unix-сокеты (для локальных пользователей на сервере Linux).host: подключение через TCP/IP.hostssl: подключение через TCP/IP, но только с использованием SSL.hostnossl: подключение через TCP/IP без использования SSL.
База данных: перечисляет базы данных, к которым разрешён доступ. Можно указать конкретную базу данных, несколько баз через запятую, либо ключевые слова:
all: Разрешить доступ ко всем базам данных.
Пользователь: указывает, каким пользователям разрешено подключение.
- Можно указать конкретное имя пользователя или использовать
all, чтобы разрешить доступ всем.
Источник (address): указывает IP-адрес клиента или диапазон адресов.
- Для IPv4 используется формат
x.x.x.xилиx.x.x.x/y(где/y— это маска подсети, например,/24). - Для IPv6 используется формат
::/y. - Ключевое слово
allозначает разрешение для всех IP-адресов.
Метод аутентификации: указывает, какой способ аутентификации используется.
Примеры:
trust: разрешить подключение без пароля (небезопасно, только для тестов).md5: использовать пароль (хэшированный).scram-sha-256: более безопасная аутентификация с использованием SHA-256.reject: запретить доступ.
Примеры строки в pg_hba.conf
Настройка файла может быть гибкой. Вот несколько примеров:
Разрешить локальные подключения через Unix-сокет
local all all trustРазрешено всем пользователям подключаться ко всем базам на локальном сервере без пароля.
Разрешить подключения с одного IP-адреса
host my_database my_user 192.168.1.100/32 md5Пользователь
my_userможет подключаться к базеmy_databaseтолько с IP-адреса192.168.1.100, используя пароль.Разрешить доступ к базе из всей подсети
host my_database all 192.168.1.0/24 scram-sha-256Любой пользователь из подсети
192.168.1.0/24может подключаться к базеmy_database, но только через аутентификацию SHA-256.Запретить подключения с определённой подсети
host all all 192.168.2.0/24 rejectПодключения из подсети
192.168.2.0/24запрещены полностью.
Настройка доступа по IP-адресам
Теперь, когда мы разобрались со структурой файла, давайте рассмотрим, как управлять подключениями.
Попробуем ограничить доступ к серверу с определённых IP-адресов. Допустим, у нас есть сервер PostgreSQL, и мы хотим обеспечить доступ только с локального хоста (127.0.0.1) и из подсети офиса (192.168.10.0/24). Для этого мы добавим такие строки в pg_hba.conf:
# Локальный доступ
host all all 127.0.0.1/32 trust
# Доступ из офиса
host all all 192.168.10.0/24 md5
# Запретить всё остальное
host all all 0.0.0.0/0 reject
Здесь правило 0.0.0.0/0 означает "все IP-адреса". Мы явно запрещаем доступ откуда-либо, кроме указанных адресов.
Настройка доступа для удалённых пользователей
Если ваш сервер PostgreSQL работает в облаке или на удалённом сервере, вам может понадобиться разрешить подключения только для определённых внешних IP. Например:
# Доступ для администратора из дома
host all admin_user 203.0.113.10/32 md5
В этом примере только пользователь admin_user с IP 203.0.113.10 сможет подключиться.
Перезагрузка конфигурации
После внесения изменений в файл pg_hba.conf PostgreSQL должен применить их. Для этого используйте команду:
sudo systemctl reload postgresql
Перезагрузка безопасна и не приведёт к падению сервера.
Если вдруг забыли, где находится pg_hba.conf, можно узнать его путь через SQL:
SHOW hba_file;
Типичные ошибки при работе с pg_hba.conf
Работа с pg_hba.conf довольно проста, но начинающие администраторы иногда допускают ошибки. Например:
- Забыли перезагрузить сервер. Все изменения в
pg_hba.confвступают в силу только после перезагрузки конфигурации. - Конфликтующие правила. PostgreSQL обрабатывает правила сверху вниз. Как только правило срабатывает, остальные игнорируются. Более общие правила должны идти ниже.
- Неправильная маска подсети. Например, указав
/0, вы открываете доступ всем, что может быть серьёзной уязвимостью.
Примеры реальных сценариев использования
Тестирование приложения на локальном сервере.
Разрешить доступ только с локального хоста:
local all all trust
Работа с удалёнными клиентами.
Разрешить доступ клиенту с определённого IP:
host all client_user 203.0.113.42/32 scram-sha-256
Ограничение доступа в публичной сети.
Запретить подключения из сети Интернет (но разрешить офису):
host all all 0.0.0.0/0 reject
host all all 192.168.10.0/24 md5
На этом этапе у вас уже должно сформироваться понимание, как использовать pg_hba.conf для ограничения доступа к PostgreSQL. Этот файл — один из ключевых инструментов для обеспечения безопасности базы данных. Следите за тем, чтобы настройки были логичными, проверенными и согласованными с потребностями бизнеса. Разве мы не хотим жить в мире, где данные защищены от хакеров? Ну, конечно, если хакер это не вы :)
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ