DBAtlas · Atlas de operações de banco de dados

Hardening de segurança do PostgreSQL (auditoria de estado, rede, TLS, autenticação, privilégios, audit, criptografia)

PostgreSQLNível: IntermediárioDuração: 5 min (auditoria) – 3 horas (hardening completo)

Este não é um guia de instalação: ele encontra e fecha as brechas de segurança de um servidor PostgreSQL em execução. Primeiro a Auditoria de estado, somente leitura, lista as brechas por severidade e indica para qual cartão cada achado leva; depois você fecha as áreas uma a uma ou todas em sequência: endereço de escuta, firewall e pg_hba; TLS e sslmode=verify-full no cliente; scram-sha-256 e bloqueio do login de postgres pela rede; desenho de roles e privilégios de PUBLIC; pgaudit e log centralizado; LUKS / pgcrypto; backup criptografado; sistema operacional; acompanhamento de versão. No final a auditoria roda de novo e os achados resolvidos saem da lista.

Topologia: Um único servidor PostgreSQL + servidor de aplicação (verificação do cliente); ambientes com replica/Patroni nas notas

Cenários

  • Auditoria de estado: quais são minhas brechas? (somente leitura) — A primeira varredura a executar: pg_hba, endereço de escuta, TLS, senhas md5, superusuários, privilégios de PUBLIC, audit, permissões de arquivos e firewall; não altera nada.
  • Hardening completo (todas as áreas em sequência) — Servidor recém-instalado ou que nunca passou por hardening: todas as áreas são aplicadas em uma ordem segura; o PostgreSQL é reiniciado uma ou duas vezes (é necessária uma janela de manutenção).
  • Rede e conexões: quem pode se conectar de onde? (listen, firewall, pg_hba) — O PostgreSQL escuta em todas as interfaces, o pg_hba tem 0.0.0.0/0 ou trust, a porta está aberta para todos. Alterar listen_addresses exige reinicialização.
  • Criptografar as conexões (TLS, sslmode=verify-full) — ssl = off ou os clientes não verificam o certificado; certificado do servidor, hostssl e verify-full no cliente. Basta um reload, sem downtime.
  • Autenticação e senhas (scram-sha-256, login remoto do postgres) — Método md5/password, senhas com hash md5, o usuário postgres consegue entrar pela rede; migração para scram-sha-256 e conta pessoal de DBA. Sem downtime; as senhas são redefinidas.
  • Privilégio mínimo: roles, PUBLIC e a conta da aplicação — A conta da aplicação é dona das tabelas ou é superusuário, qualquer um pode escrever no schema public; roles de leitura/escrita/dono e relatório de privilégios. Sem downtime.
  • Audit: quem fez o quê? (pgaudit, log centralizado) — O auditor ou a equipe de segurança exige o registro das alterações de DDL e de roles; instalação do pgaudit e envio do log para um servidor central. É necessária uma reinicialização.
  • Criptografar os dados em disco (LUKS / pgcrypto) — É exigida proteção contra roubo do disco ou do backup. O PostgreSQL não tem TDE nativo: LUKS no nível do disco (downtime para a migração) ou pgcrypto no nível da coluna.
  • Segurança dos backups (backup criptografado, permissões) — Os arquivos de backup não estão criptografados ou ficam em um diretório que todos podem ler; criptografia do repositório do pgBackRest ou pg_dump + GPG, .pgpass e permissões de diretório. Sem downtime.
  • Lado do sistema operacional (conta de serviço, permissões, core dump, SELinux) — A conta postgres tem senha utilizável, as permissões do diretório de dados estão frouxas, o SELinux está Permissive/Disabled. A configuração de core dump passa a valer na próxima reinicialização.
  • Patches e versão: estou em uma versão suportada? — Verifica a versão, a data de fim do suporte e as atualizações minor pendentes; remete ao guia de patch para aplicá-las. Somente leitura.

Antes de começar

  • O PostgreSQL … está em execução e é possível conectar como postgres a partir do próprio servidor (sudo -iu postgres psql) sem senha (local all postgres peer no pg_hba). Se a instalação foi feita com o guia de instalação do PostgreSQL, isso já está pronto.
  • Diretório de dados …, diretório de configuração …; psql e pg_dump ficam em …. Estão no PATH do login shell do usuário postgres; ao chamá-los como root, use o caminho completo.
  • Duas sessões SSH separadas abertas no servidor: em uma você aplica os passos; a outra (com sudo -iu postgres psql aberto) serve para desfazer se uma regra errada deixar você de fora. Depois de cada passo que restringe o acesso, teste a nova conexão em uma terceira sessão; não feche as sessões antigas até ver o teste funcionar.
  • Janela de manutenção: o PostgreSQL será reiniciado nas áreas que você escolheu (listen_addresses, shared_preload_libraries, limite de core dump, migração de disco). A equipe da aplicação foi avisada.
  • Você tem em mãos a lista de todas as aplicações que se conectam ao banco e os dados de conexão (IPs dos servidores, usuários, versões de driver). Antes de restringir, o passo de auditoria responde quem se conecta de onde; um cliente fora da lista não conseguirá se conectar depois da restrição.
  • Existe um backup atual com restore testado (pgBackRest ou pg_dump). O hardening não toca nos dados, mas as alterações de roles/privilégios e a migração de disco estão sujeitas a erros que não podem ser desfeitos.

Fases do guia

  • Auditoria de estado (somente leitura) — Listar os achados dentro do banco · Listar os achados de schema e de função em cada banco · Auditar o lado do sistema operacional
  • Antes de começar: ponto de retorno — Fazer uma cópia da configuração atual e das roles · Ativar o diretório de configuração adicional (conf.d)
  • Privilégios — 1. Diagnóstico — Mostrar roles, ownership e privilégios de PUBLIC
  • Privilégios — 2. Rede de segurança — Fazer um dump dos privilégios atuais
  • Privilégios — 3. Aplicação — Criar as roles de grupo e as contas de login · Definir senhas para as novas contas de login · Configurar os privilégios de banco e de schema · Transferir os objetos da conta da aplicação para a role dona · Relatório de privilégios
  • Privilégios — 4. Verificação — Verificar que a conta da aplicação não executa DDL e consegue gravar dados
  • Privilégios — 5. Depois — Passar a ferramenta de migration para a role dona
  • Autenticação — 1. Diagnóstico — Mostrar hashes de senha, métodos e contas
  • Autenticação — 2. Rede de segurança — Verificar a compatibilidade dos drivers
  • Autenticação — 3. Aplicação — Armazenar as novas senhas com scram-sha-256 · Carregar a configuração e redefinir as senhas das contas md5 · Trocar o método md5/password do pg_hba por scram-sha-256 · Bloquear o login do superusuário postgres pela rede · Criar a conta pessoal de DBA
  • Autenticação — 4. Verificação — Verificar os hashes e a rejeição do superusuário pela rede · Login com scram a partir do servidor de aplicação e rejeição do postgres
  • Autenticação — 5. Depois — Revisar contas não usadas e expiradas
  • TLS — 1. Diagnóstico — Mostrar o estado atual do SSL e os clientes sem criptografia
  • TLS — 2. Rede de segurança — Preparar o diretório de certificados
  • TLS — 3. Aplicação — Criar uma CA de teste e o certificado do servidor · Criar a chave e a solicitação de assinatura de certificado (CSR) · Colocar no lugar o certificado assinado e a cadeia da CA · Verificar o certificado, a chave e a cadeia · Ativar o TLS no servidor · Carregar as configurações e verificar que o TLS foi ativado …
  • TLS — 4. Verificação — Verificar que as conexões sem criptografia são rejeitadas
  • TLS — 5. Depois: renovação do certificado — Procedimento de renovação do certificado
  • Rede — 1. Diagnóstico: quem se conecta de onde? — Mostrar o endereço de escuta, as regras do pg_hba e os clientes ativos
  • Rede — 2. Rede de segurança — Manter a sessão de retorno aberta
  • Rede — 3. Aplicação — Restringir o endereço de escuta · Reescrever o pg_hba.conf com acesso mínimo · Verificar e carregar as regras · Abrir a porta no firewall apenas para as redes permitidas · Reiniciar o PostgreSQL para o endereço de escuta
  • Rede — 4. Verificação — Testar uma conexão permitida e uma rejeitada a partir do servidor de aplicação
  • Rede — 5. Depois — Monitorar as conexões rejeitadas
  • Audit — 1. Diagnóstico — Mostrar as configurações de audit e de log
  • Audit — 2. Rede de segurança — Verificar o local e o espaço livre do disco de log
  • Audit — 3. Aplicação — Instalar o pacote do pgaudit · Adicionar o pgaudit às bibliotecas pré-carregadas e gravar as configurações · Reiniciar para ativar o pgaudit · Criar a extensão pgaudit · Encaminhar o log para o servidor central (rsyslog) · Retenção do arquivo de audit local (logrotate) …
  • Audit — 4. Verificação — Fazer uma alteração de DDL e uma de role e vê-las no log
  • Audit — 5. Depois — Monitorar tentativas de desligar o audit
  • Backup — 1. Diagnóstico — Mostrar o estado de criptografia e as permissões dos backups
  • Backup — 2. Rede de segurança — Preparar o local onde a chave de criptografia será guardada
  • Backup — 3. Aplicação — Definir o novo repositório criptografado · Criar o repositório criptografado e fazer o primeiro backup full · Importar a chave pública GPG no servidor · Script de backup criptografado · Diretório de backup, permissões e teste manual · Agendar o backup criptografado (cron) …
Abrir o plano passo a passo para o seu ambiente →