Configurações Essenciais para a Segurança do Seu Banco de Dados PostgreSQL

Este guia detalha configurações essenciais para fortalecer a segurança do PostgreSQL. Aprenda a impor autenticação moderna usando `pg_hba.conf` (SCRAM-SHA-256), implementar criptografia SSL/TLS obrigatória e minimizar a superfície de ataque restringindo os ouvintes de rede. Essencial para estabilidade em produção e conformidade.

39 visualizações

Configurações Essenciais para Proteger seu Banco de Dados PostgreSQL

Proteger um banco de dados PostgreSQL é fundamental para salvaguardar dados sensíveis e garantir conformidade. Como um banco de dados relacional avançado de código aberto, o PostgreSQL oferece mecanismos de configuração robustos para controlar o acesso, criptografar a comunicação e minimizar potenciais vulnerabilidades. Este guia aprofunda-se nos arquivos de configuração e parâmetros críticos necessários para estabelecer uma postura de segurança reforçada para ambientes de produção.

A segurança eficaz do PostgreSQL baseia-se em dois pilares principais: controlar quem pode se conectar e como eles se conectam. Exploraremos configurações vitais dentro de postgresql.conf e o arquivo crucial de autenticação de cliente, pg_hba.conf, juntamente com a implementação de criptografia obrigatória usando SSL/TLS.

1. Reforçando a Autenticação de Cliente com pg_hba.conf

O arquivo Host-Based Authentication (pg_hba.conf) dita quais hosts podem se conectar, como quais usuários PostgreSQL eles podem se conectar, a quais bancos de dados eles podem acessar e, o mais importante, o método de autenticação exigido para essa conexão.

Entendendo a Estrutura de pg_hba.conf

Cada linha em pg_hba.conf segue um formato específico:

TYPE DATABASE USER ADDRESS METHOD [OPTIONS]

  • TYPE: Tipo de conexão (ex: local, host, hostnossl, hostssl).
  • DATABASE: Nome(s) do banco de dados de destino.
  • USER: Função(ões) do banco de dados de destino.
  • ADDRESS: Faixa de endereço IP do cliente.
  • METHOD: Mecanismo de autenticação (ex: scram-sha-256, md5, reject, trust).

Melhores Práticas para Métodos de Autenticação

Nunca use o método trust em produção, pois ele permite que qualquer pessoa que corresponda aos critérios de conexão se conecte sem uma senha. Os métodos de autenticação modernos recomendados são:

Recomendado: scram-sha-256

SCRAM (Salted Challenge Response Authentication Mechanism) oferece melhorias significativas em relação a métodos de senha mais antigos como md5, usando hashing mais forte e prevenindo ataques de replay. Esta deve ser sua escolha padrão para conexões remotas.

# Aplicar SCRAM para todas as conexões remotas na porta 5432
host    all     all     0.0.0.0/0       scram-sha-256

Conexões Locais

Para conexões originadas do próprio servidor (por exemplo, aplicações rodando na mesma máquina), use soquetes locais. A configuração mais segura é geralmente peer (para soquetes de domínio Unix) ou scram-sha-256 se os soquetes estiverem desabilitados ou restritos.

# Usar autenticação peer para conexões locais via soquete Unix
local   all     all             peer

Rejeitando Conexões Explicitamente

Use o método reject para bloquear explicitamente conexões de redes perigosas ou não confiáveis.

# Bloquear todas as conexões de uma faixa de IP conhecida como insegura
host    all     all     192.168.1.0/24  reject

Dica Acionável: Após modificar pg_hba.conf, você deve recarregar a configuração para que as alterações tenham efeito (por exemplo, pg_ctl reload ou enviando um sinal SIGHUP ao processo postmaster).

2. Implementando Criptografia SSL/TLS

Para evitar que dados sensíveis (incluindo senhas) sejam interceptados pela rede, é obrigatório impor a criptografia SSL/TLS para todas as conexões remotas.

Configuração em postgresql.conf

Certifique-se de que estes parâmetros estejam definidos corretamente em seu arquivo de configuração principal:

  • ssl = on: Habilita o suporte SSL globalmente.
  • ssl_cert_file: Caminho para o arquivo do certificado do servidor (ex: server.crt).
  • ssl_key_file: Caminho para o arquivo da chave privada do servidor (ex: server.key).

Impondo SSL em pg_hba.conf

Para forçar os clientes a usar SSL, altere o tipo de conexão em pg_hba.conf de host para hostssl:

# Permitir apenas conexões via SSL/TLS
hostssl all     all     0.0.0.0/0       scram-sha-256

Se você tiver clientes legados que não podem suportar SSL, pode permitir explicitamente conexões não-SSL, mas restringi-las apenas a operações não sensíveis, embora a rejeição total seja preferível.

3. Minimizando a Superfície de Ataque

A segurança envolve a redução da exposição do servidor de banco de dados a ameaças externas. Isso é gerenciado principalmente através da configuração de rede e desabilitação de recursos desnecessários.

Limitando o Endereço de Escuta da Rede

Por padrão, o PostgreSQL pode escutar em todas as interfaces de rede (listen_addresses = '*'). Para segurança aprimorada, configure-o explicitamente para escutar apenas na(s) interface(s) específica(s) que requerem acesso externo, ou localhost se apenas aplicações locais se conectam.

Em postgresql.conf:

# Escutar apenas em localhost (127.0.0.1) se possível
listen_addresses = 'localhost'

# OU, escutar apenas em uma interface de rede privada específica
# listen_addresses = '192.168.1.10'

Aviso de Segurança: Se listen_addresses for definido como *, todas as interfaces serão usadas. Certifique-se de que pg_hba.conf controle estritamente quais faixas de IP podem se conectar.

Desabilitando Extensões e Recursos Desnecessários

Cada extensão habilitada adiciona complexidade potencial e vetores de ataque. Audite regularmente as extensões instaladas e remova qualquer uma que não seja ativamente usada para sua carga de trabalho de produção. Isso minimiza a superfície de ataque geral.

Segurança de Senha e Funções (Roles)

Certifique-se de que todas as funções administrativas (como o usuário postgres padrão) tenham senhas fortes e complexas definidas usando ALTER USER:

ALTER USER postgres WITH PASSWORD 'SuaSenhaForteEComplexa123!';

Use o princípio do menor privilégio: os usuários de aplicação devem ter apenas permissões SELECT, INSERT, UPDATE e DELETE nas tabelas específicas de que precisam, em vez de status de superusuário.

4. Configuração de Auditoria e Log

Embora não seja estritamente um mecanismo de controle de acesso, o log robusto é crucial para detectar e investigar incidentes de segurança. Configure os parâmetros de log em postgresql.conf para capturar eventos relevantes.

Configurações chave para auditoria de segurança:

  • log_statement = 'ddl' ou 'all': Registra todos os comandos da Linguagem de Definição de Dados (DDL) (como CREATE TABLE, ALTER USER). Defina como 'all' temporariamente durante revisões de segurança, mas esteja ciente do impacto no desempenho.
  • log_connections = on: Registra cada tentativa de conexão bem-sucedida.
  • log_disconnections = on: Registra quando os clientes se desconectam.
  • log_duration = on: Registra o tempo de execução de todas as instruções, o que às vezes pode revelar padrões de atividade incomuns.

Ao combinar regras de acesso estritas em pg_hba.conf, criptografia imposta via SSL, um endereço de escuta restrito e log abrangente, você estabelece uma base sólida para proteger sua implantação PostgreSQL.

Resumo das Etapas Essenciais de Segurança

  1. Atualizar pg_hba.conf: Use scram-sha-256 ou peer para métodos de autenticação.
  2. Impor Criptografia: Defina ssl = on em postgresql.conf e use entradas hostssl em pg_hba.conf.
  3. Restringir Escuta: Configure listen_addresses para apenas interfaces necessárias, evitando o padrão * se possível.
  4. Impor Menor Privilégio: Limite as funções do banco de dados apenas às permissões absolutamente exigidas para sua função.
  5. Recarregar Configuração: Sempre recarregue ou reinicie o PostgreSQL após modificar arquivos de segurança para aplicar as alterações.