Все уязвимости

Практический разбор · PostgreSQL

PostgreSQL: ограничьте сетевой доступ к базе данных

Для удалённых подключений PostgreSQL совместно проверьте `listen_addresses`, порядок записей `pg_hba.conf` и метод аутентификации. Изменение `pg_hba.conf` можно перечитать без перезапуска, а изменение `listen_addresses` требует перезапуска сервера.

Проверено 5 ноября 2026Это практическое руководство без CVE и оценки CVSS. Фактический риск определяется доступностью интерфейса, порядком совпадающих правил, выбранной аутентификацией и правами ролей базы данных.

Кому нужно проверить

Администраторам PostgreSQL и владельцам приложений, которым требуется или запрещено подключение к базе по TCP/IP. Важна не только марка продукта, но и конкретная версия, способ установки, операционная система и конфигурация.

В чём риск

Слишком широкий `listen_addresses` позволяет серверу принимать попытки соединения на дополнительных интерфейсах, но сам по себе не разрешает вход. `pg_hba.conf` выбирает первое совпавшее правило без перехода к следующему при неудачной аутентификации; ошибочная ранняя запись может затенить ограничивающую. Слабый метод или избыточные права роли повышают последствия ошибочного сетевого допуска.

Затронутые версии

Руководство для самостоятельно размещённых поддерживаемых версий PostgreSQL. Названия параметров и доступные методы аутентификации следует сверять с документацией установленной версии. Управляемые базы данных могут запрещать изменение конфигурационных файлов напрямую и требуют использовать интерфейс поставщика.

Исправленные версии

Универсальной исправленной версии нет: это руководство по конфигурации. Оставляйте `listen_addresses` на loopback, если удалённые соединения не нужны; иначе перечислите только необходимые интерфейсы и отдельно ограничьте источники правилами сети и `pg_hba.conf`. Предпочитайте `scram-sha-256` при совместимых клиентах; миграция требует новых паролей для SCRAM и проверки клиентских библиотек.

Что сделать

  1. 1Определите нужные клиентские системы, интерфейсы и базы. Сделайте резервную копию конфигурации и выясните, кто управляет экземпляром PostgreSQL и как выполняется его перезапуск.
  2. 2Проверьте фактическое значение `listen_addresses`. Если удалённый доступ не нужен, оставьте сервер на loopback. Если нужен, задайте минимальный перечень внутренних адресов; изменение этого параметра применяется только после перезапуска сервера.
  3. 3Проверьте `pg_hba.conf` от начала к концу: используется первое правило, совпавшее по типу соединения, адресу клиента, базе и пользователю. Удалите широкие ненужные правила и ограничьте адресные диапазоны; помните, что ошибочная строка не откатывает обработку к следующей записи.
  4. 4Для изменённого `pg_hba.conf` используйте представление `pg_hba_file_rules` для поиска ошибок до применения, если оно доступно в вашей версии. Затем перечитайте конфигурацию через поддерживаемый механизм, например `pg_ctl reload` или `pg_reload_conf()`; проверьте журналы и результат для новых соединений.
  5. 5Проверьте методы аутентификации и совместимость клиентов. PostgreSQL считает `scram-sha-256` наиболее безопасным из предоставляемых методов парольной аутентификации; переход с MD5 требует убедиться в поддержке SCRAM всеми клиентами, установить новые пароли и обновить правила.
  6. 6Проверьте сетевые правила, TLS-требования вашей среды и минимальные права ролей. Выполните тест разрешённого и запрещённого подключения, проверьте журналы; держите копию прежней конфигурации и план восстановления доступа администратора.

Путь входящего подключения PostgreSQL

Каждый этап проверяется отдельно; успешное прохождение одного этапа не отменяет остальные ограничения.

  1. 1Интерфейс прослушивания принимает попытку подключения
  2. 2Сетевые правила пропускают или блокируют источник
  3. 3Первое совпавшее правило pg_hba.conf выбирает метод аутентификации
  4. 4Роль базы данных ограничивает доступ к данным и операциям
  5. 5Проверьте результат для разрешённого и запрещённого клиента

Примеры конфигурации и проверки

Найти ошибки в записях pg_hba.conf (shell)
psql -c "SELECT line_number, error FROM pg_hba_file_rules WHERE error IS NOT NULL;"

Запускайте в оболочке на своём сервере с установленным psql и настроенным подключением административной роли к нужному экземпляру PostgreSQL. Команда выполняет SQL-запрос до перечитывания изменённого файла и ничего не меняет. Непустой результат сообщает об ошибках разбора; пустой результат не доказывает правильность политики доступа. Сверьте доступность представления и права роли с документацией вашей версии. Откат не требуется.

Как не подпустить ботов к сайту

BotProtection принимает запросы перед вашим сайтом и фильтрует автоматизированные обращения. Поэтому ботам сложнее добраться до уязвимого компонента и начать его проверять или атаковать, а вероятность успешной автоматизированной атаки становится значительно ниже. Это дополнительный слой защиты: обновление уязвимых компонентов, проверка журналов и реагирование на инциденты остаются обязательными.

Первоисточники

Снизьте шанс атаки до того, как бот дойдёт до сайта

Подключите BotProtection как фильтр перед сайтом: подозрительные автоматизированные запросы отсекаются до обращения к вашему серверу. Это значительно снижает вероятность автоматизированной атаки, но не исправляет саму уязвимость, поэтому обновление и настройка компонентов остаются обязательными.