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. Цей файл — один із ключових інструментів для забезпечення безпеки бази даних. Слідкуй, щоб налаштування були логічними, перевіреними і відповідали потребам бізнесу. Хіба ми не хочемо жити у світі, де дані захищені від хакерів? Ну, звісно, якщо хакер — це не ти :)
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ