JavaRush /Курси /SQL SELF /Обмеження доступу по IP і налаштування pg_hba.conf...

Обмеження доступу по IP і налаштування pg_hba.conf

SQL SELF
Рівень 47 , Лекція 4
Відкрита

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

Налаштування файлу може бути гнучким. Ось кілька прикладів:

  1. Дозволити локальні підключення через Unix-сокет

    local   all             all                                     trust
    

    Дозволено всім користувачам підключатися до всіх баз на локальному сервері без пароля.

  2. Дозволити підключення з однієї IP-адреси

    host    my_database     my_user        192.168.1.100/32         md5
    

    Користувач my_user може підключатися до бази my_database тільки з IP-адреси 192.168.1.100, використовуючи пароль.

  3. Дозволити доступ до бази з усієї підмережі

    host    my_database     all            192.168.1.0/24           scram-sha-256
    

    Будь-який користувач з підмережі 192.168.1.0/24 може підключатися до бази my_database, але тільки через автентифікацію SHA-256.

  4. Заборонити підключення з певної підмережі

    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 досить проста, але початківці-адміни іноді роблять помилки. Наприклад:

  1. Забув перезавантажити сервер. Всі зміни в pg_hba.conf набирають чинності тільки після перезавантаження конфігурації.
  2. Конфліктуючі правила. PostgreSQL обробляє правила зверху вниз. Як тільки правило спрацьовує, інші ігноруються. Більш загальні правила мають бути нижче.
  3. Неправильна маска підмережі. Наприклад, вказавши /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. Цей файл — один із ключових інструментів для забезпечення безпеки бази даних. Слідкуй, щоб налаштування були логічними, перевіреними і відповідали потребам бізнесу. Хіба ми не хочемо жити у світі, де дані захищені від хакерів? Ну, звісно, якщо хакер — це не ти :)

1
Опитування
Керування доступом та безпека, рівень 47, лекція 4
Недоступний
Керування доступом та безпека
Керування доступом та безпека
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ