Безопасность PostgreSQL: исчерпывающий чек-лист для администраторов

Детальный чек-лист по обеспечению безопасности PostgreSQL, охватывающий сетевые настройки, аутентификацию, управление доступом, шифрование, аудит, обновления и процедурные меры для защиты данных.
PostgreSQL, будучи одной из самых продвинутых и надежных систем управления базами данных, тем не менее, требует грамотной настройки для обеспечения должного уровня безопасности. Угрозы варьируются от несанкционированного доступа и инъекций до утечек данных и внутренних атак. Данный чек-лист представляет собой структурированное руководство по усилению защиты вашего экземпляра PostgreSQL, охватывающее сетевые настройки, аутентификацию, управление доступом, аудит и поддержку.

  • Сетевая безопасность и доступ.
Первая линия обороны — ограничение сетевого доступа к серверу БД. Никогда не разрешайте публичный доступ (0.0.0.0/0). В конфигурационном файле `postgresql.conf` задайте параметр `listen_addresses` только на необходимые IP-адреса (например, 'localhost, 10.0.1.15'). Используйте файл `pg_hba.conf` (Host-Based Authentication) для детального контроля: разрешайте подключения только с определенных IP-адресов или подсетей, используя самые строгие методы аутентификации (например, `scram-sha-256` или сертификаты) вместо `trust` или слабого `md5`. Рассмотрите возможность размещения PostgreSQL за балансировщиком нагрузки или в приватной подсети без прямого выхода в интернет.
  • Аутентификация и управление паролями.
Принудительно используйте надежный метод аутентификации SCRAM-SHA-256. Установите в `pg_hba.conf` для всех хостов `scram-sha-256`. Задайте строгую политику паролей с помощью модуля `pgcrypto` или внешних средств: минимальная длина (12+ символов), сложность, регулярная смена. Переименуйте стандартного суперпользователя `postgres` через параметр `ALTER USER postgres RENAME TO [новое_имя]`. Создавайте отдельных пользователей с минимально необходимыми привилегиями для каждого приложения или службы. Никогда не используйте суперпользователя для работы приложений.
  • Управление привилегиями и ролевая модель.
Строго следуйте принципу наименьших привилегий (Principle of Least Privilege). Используйте роли (ROLE) для группировки прав. Создавайте отдельные роли для чтения (`SELECT`), записи (`INSERT, UPDATE, DELETE`) и администрирования объектов в каждой схеме. Предоставляйте привилегии ролям, а затем назначайте эти роли пользователям. Регулярно ревьюьте права, используя запросы к системным каталогам `pg_roles` и `information_schema.table_privileges`. Ограничивайте возможность создания объектов (`CREATE`) только определенными схемами и для определенных ролей.
  • Шифрование данных.
Обеспечьте шифрование данных на rest (при хранении). Используйте полнодисковое шифрование (FDE) на уровне ОС или шифрование табличных пространств PostgreSQL. Для шифрования трафика между клиентом и сервером обязательно используйте SSL/TLS. В `postgresql.conf` установите `ssl = on`, сгенерируйте или получите сертификаты от доверенного центра и настройте параметры `ssl_cert_file`, `ssl_key_file`. В `pg_hba.conf` для критичных соединений укажите `hostssl` вместо `host` и параметр `clientcert=verify-ca` или `verify-full` для проверки сертификатов клиентов.
  • Защита от SQL-инъекций и безопасность приложений.
Хотя это задача разработчиков, администратор может способствовать безопасности. Поощряйте использование подготовленных выражений (prepared statements) и параметризованных запросов во всех приложениях. Ограничивайте возможности пользователей по выполнению произвольных SQL через функции с `SECURITY DEFINER` и тщательной проверкой входных параметров. Рассмотрите использование расширений вроде `pg_stat_statements` для мониторинга необычных или часто выполняемых запросов, которые могут быть признаком уязвимости.
  • Регулярное обновление и мониторинг.
Своевременно применяйте патчи безопасности и обновляйте минорные версии PostgreSQL. Подпишитесь на рассылку уведомлений об уязвимостях. Внедрите систему мониторинга (Zabbix, Prometheus с экспортером) для отслеживания ключевых метрик: число неудачных попыток входа, необычная активность, использование ресурсов. Настройте алерты на подозрительные события.
  • Аудит и логирование.
Включите детальное логирование. В `postgresql.conf` установите `log_statement = 'ddl'` (логировать команды изменения структуры) или `'mod'` (все изменения данных), `log_connections = on`, `log_disconnections = on`, `log_hostname = on`. Для соответствия стандартам (PCI DSS, GDPR) используйте расширение `pgAudit`, которое предоставляет сессионный и объектный аудит в формате, удобном для анализа. Централизованно собирайте и защищайте логи, настройте их ротацию и долгосрочное хранение для расследования инцидентов.
  • Резервное копирование и восстановление.
Безопасность включает в себя и возможность восстановления. Регулярно выполняйте полные и инкрементальные резервные копии с помощью `pg_dump`, `pg_basebackup` или инструментов вроде Barman, pgBackRest. Храните резервные копии отдельно от основного сервера, в зашифрованном виде. Регулярно тестируйте процедуру восстановления на стенде, чтобы убедиться в ее работоспособности и определить время восстановления (RTO).
  • Защита конфигурационных файлов и ОС.
Ограничьте права доступа к файлам `postgresql.conf` и `pg_hba.conf` (только для чтения владельцем-postgres). Запускайте сервер PostgreSQL от отдельного непривилегированного пользователя ОС (`postgres`). Своевременно обновляйте операционную систему. Используйте средства безопасности ОС (SELinux, AppArmor) для ограничения возможностей процесса PostgreSQL.
  • Процедурные меры.
Разработайте и задокументируйте политику безопасности БД. Регулярно проводите внутренние аудиты и сканирование уязвимостей с помощью специализированных инструментов. Обучайте разработчиков и администраторов лучшим практикам безопасности. Имейте план реагирования на инциденты, связанные с утечкой данных из БД.
Реализация этого чек-листа не является разовым мероприятием, а должна стать частью циклического процесса непрерывного улучшения безопасности. Начните с самых критичных пунктов, таких как настройка `pg_hba.conf` и отказ от аутентификации `trust`, затем постепенно внедряйте остальные меры, регулярно пересматривая и адаптируя политики под меняющиеся угрозы и требования бизнеса.
101 3

Комментарии (11)

avatar
mdhjed8mwvl 02.04.2026
Отличный чек-лист! Как раз искал структурированное руководство по харденингу PostgreSQL для нашего нового проекта.
avatar
mu7qbu 02.04.2026
Отличный отправной пункт! Рекомендую дополнить его мониторингом подозрительной активности.
avatar
zfou7gxuoq 03.04.2026
Не хватает подробностей про настройку SELinux/AppArmor. Это критично для production-среды.
avatar
iaormmjvrdnz 03.04.2026
Автор забыл упомянуть важность шифрования соединений (SSL/TLS) и отказ от trust-метода в pg_hba.conf.
avatar
5ltg1fgta32 04.04.2026
Хорошая база, но безопасность — процесс, а не разовая настройка. Не забывайте про обновления!
avatar
31nuet5zg 04.04.2026
Полезный материал. Добавлю от себя: обязательно используйте отдельные учётные записи для каждого приложения.
avatar
zdlovoyg 04.04.2026
Слишком общие рекомендации. Хотелось бы больше конкретики по настройке параметров в postgresql.conf.
avatar
rzp2g2k1q1 04.04.2026
Не согласен с приоритетом некоторых пунктов. Начинать нужно с сегментации сети и фаервола, а не с паролей.
avatar
dcjqsi08rgk 04.04.2026
Спасибо! Сохранил себе. Особенно актуально после недавних новостей об утечках данных.
avatar
qwlme965pr9 05.04.2026
Спасибо за статью! Пункт про регулярный аудит прав доступа — это то, что многие упускают.
Вы просмотрели все комментарии