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. Этот файл — один из ключевых инструментов для обеспечения безопасности базы данных. Следите за тем, чтобы настройки были логичными, проверенными и согласованными с потребностями бизнеса. Разве мы не хотим жить в мире, где данные защищены от хакеров? Ну, конечно, если хакер это не вы :)

2
Задача
SQL SELF, 47 уровень, 4 лекция
Недоступна
Разрешение локального доступа
Разрешение локального доступа
1
Опрос
Управление доступом и безопасность, 47 уровень, 4 лекция
Недоступен
Управление доступом и безопасность
Управление доступом и безопасность
Комментарии (2)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Евгений Уровень 49 Expert
18 ноября 2025
Вот здесь же неправильно, согласно самой лекции:

host    all   all   0.0.0.0/0   reject
host    all   all   192.168.10.0/24   md5
Более общие правила указываются после.
Ra Уровень 35 Student
15 августа 2025
Открывать 5432 всему миру наверно не комильфо? Юзать КВН? Методы подключения (peer это подключение по логину в системе, (например postgres))

Метод   	    Где работает	Безопасность	Когда использовать
peer	        Только local	Высокая	        Локальные подключения (администрирование).
trust	        local / host	Низкая	        Только для тестовых сред.
md5  	        local / host	Средняя	        Устаревшие системы.
scram-sha-256	local / host	Высокая	        Современные парольные подключения.
cert	        hostssl	        Максимальная	Защищённые подключения по SSL.
ldap	        host	        Высокая	        Корпоративные сети с LDAP.
gss	            host    	    Высокая	        Kerberos / Active Directory.