|
FOROS PROFESIONALES WINDEV, WEBDEV y WINDEV Mobile |
| | | | | |
Mais segurança no seu PostgreSQL |
Iniciado por Boller, 20,sep. 2024 20:23 - No hay respuesta |
| |
| | | |
|
| |
Miembro registrado 4.521 mensajes |
|
Publicado el 20,septiembre 2024 - 20:23 |
PostgreSQL
[20/09/2024, 14:20:45] Adriano Boller: O arquivo `pgpass` é uma ferramenta muito útil no PostgreSQL, especialmente nas versões mais recentes, por várias razões, principalmente relacionadas à segurança e automação no acesso ao banco de dados.
### Motivos para usar o `pgpass`:
1. **Automatização de Conexões Seguras**: O `pgpass` armazena as credenciais do banco de dados (usuário, senha, host e porta) de forma segura, permitindo que scripts e programas possam se conectar ao banco de dados sem solicitar interativamente as credenciais. Isso é essencial para automação de tarefas de manutenção, backups, restaurações e migrações que precisem ser realizadas sem intervenção humana.
2. **Evita Expor Senhas em Scripts**: Em vez de passar a senha diretamente em um comando SQL ou script, o `pgpass` permite que você armazene as credenciais de maneira centralizada, reduzindo o risco de expor a senha em arquivos de script ou logs. Isso é mais seguro e facilita a gestão de acesso em servidores.
3. **Compatibilidade com Múltiplas Instâncias**: O arquivo `pgpass` pode ser configurado para armazenar credenciais de várias instâncias do PostgreSQL. Ele consegue gerenciar conexões para diferentes servidores, usuários e bancos de dados, tornando mais fácil o gerenciamento de ambientes com várias instâncias do PostgreSQL.
4. **Suporte Nativo e Integração Simples**: O PostgreSQL, nas suas versões mais recentes, oferece suporte nativo ao `pgpass`, o que facilita sua integração sem necessidade de bibliotecas adicionais. Ele é automaticamente reconhecido pelas ferramentas do PostgreSQL, como o `psql` e o `pg_dump`, quando estas são executadas pelo mesmo usuário que possui o arquivo `pgpass`.
5. **Aprimoramento da Segurança**: Ao configurar o `pgpass` corretamente, você pode garantir que ele tenha permissões de leitura adequadas (apenas o usuário proprietário pode acessá-lo), tornando o acesso ao banco de dados mais seguro do que armazenar as credenciais diretamente em scripts ou variáveis de ambiente.
### Como funciona o `pgpass`: - O arquivo `.pgpass` (no Linux) ou `pgpass.conf` (no Windows) deve ser criado no diretório home do usuário que se conecta ao PostgreSQL. - A sintaxe do arquivo é simples, com cada linha contendo: `hostname:port:database:username:password`. - O PostgreSQL lerá este arquivo sempre que for necessária uma autenticação, utilizando as credenciais armazenadas para realizar a conexão automaticamente.
### Exemplo de configuração: ``` # Exemplo de arquivo pgpass localhost:5432:meu_banco:meu_usuario:minha_senha ```
### Considerações finais: Com o avanço das versões do PostgreSQL, a configuração do `pgpass` tem sido cada vez mais recomendada para garantir práticas de segurança eficientes e automação, permitindo que os administradores mantenham um ambiente controlado e seguro, especialmente em servidores de produção.
Se precisar de ajuda para configurar o `pgpass`, posso te guiar nos detalhes técnicos!
[20/09/2024, 14:20:45] Adriano Boller: Para evitar que um invasor possa derrubar (`drop`) bancos de dados PostgreSQL, é necessário implementar uma série de medidas de segurança que dificultem o acesso não autorizado e garantam a integridade dos dados. Abaixo estão as melhores práticas de segurança para evitar esse tipo de ataque:
### 1. **Restringir Acessos e Privilégios de Usuários** - **Princípio do Menor Privilégio**: Conceda apenas os privilégios mínimos necessários para cada usuário. Somente o superusuário (como `postgres`) deve ter permissões para realizar operações destrutivas, como `DROP DATABASE`. - **Separação de Funções**: Crie diferentes usuários para diferentes funções (como leitura, escrita e administração) e atribua permissões adequadas. Por exemplo, um usuário que só precisa ler dados não deve ter permissões de escrita, muito menos para remover objetos do banco. - **Revisão Periódica**: Faça auditorias regulares nas permissões dos usuários para garantir que ninguém tenha acesso desnecessário.
### 2. **Proteção de Credenciais** - **Senhas Fortes e Complexas**: Implemente senhas seguras e longas, que sejam difíceis de quebrar. - **Autenticação Forte**: Considere usar autenticação baseada em certificados ou integração com mecanismos de autenticação externos, como LDAP ou Kerberos, ao invés de confiar somente em autenticação via senha. - **Bloqueio de Tentativas de Login Mal-Sucedidas**: Configure mecanismos que detectam e bloqueiam tentativas repetidas de login falhas para evitar ataques de força bruta.
### 3. **Configuração Segura do PostgreSQL** - **Arquivo `pg_hba.conf`**: Configure corretamente o arquivo de controle de acesso `pg_hba.conf` para restringir as conexões a apenas máquinas ou sub-redes específicas. Desabilite o acesso de IPs ou redes não confiáveis. - Use `local` para conexões internas (Unix sockets) e limite o acesso via rede somente aos endereços IP confiáveis. - **Desabilitar o Acesso Externo Desnecessário**: Se o banco de dados não precisa ser acessado de fora da rede local, não permita conexões externas. Se necessário, use firewalls para restringir o acesso a portas específicas. - **Mudança da Porta Padrão**: A porta padrão do PostgreSQL é a 5432. Mudar essa porta para outra menos conhecida pode reduzir a probabilidade de ataques automatizados, embora não seja uma medida definitiva.
### 4. **Criptografia de Conexão** - **SSL/TLS**: Sempre habilite SSL/TLS para criptograf
*Em resumo:* Interessante até criar outro usuário em vez de Postgres na instalação um nome totalmente diferente e com pgpass.conf e para pghba.conf pra sua segurança e porta diferente da padrão. Pra melhorar só conseguir chegar no banco via vpn. Quem não estiver com a vpn não usa o sistema.
[20/09/2024, 15:16:08] Adriano Boller: *No Linux*
### Exemplo de configuração segura do `pgpass` e `pg_hba.conf` para PostgreSQL, incluindo a mudança da porta padrão e práticas para evitar invasões:
#### 1. Arquivo `.pgpass` (Armazenamento seguro de credenciais) O arquivo `pgpass` armazena credenciais de conexão ao banco de dados de forma segura, e deve estar protegido com permissões restritas (0600 para Linux, por exemplo, para garantir que apenas o proprietário tenha acesso).
**Exemplo de arquivo `.pgpass`**: ``` # Formato: hostname:port:database:username:password localhost:5433:meu_banco:meu_usuario:minha_senha_forte 192.168.0.100:5433:outro_banco:outro_usuario:senha_muito_secreta ``` - **Porta**: No exemplo, a porta padrão do PostgreSQL foi alterada de 5432 para 5433. - **Senha**: Use senhas fortes e complexas para dificultar ataques de força bruta. - **Hosts**: Você pode especificar diferentes IPs para diferentes bancos, garantindo que o acesso seja restrito apenas a hosts confiáveis.
> **Importante**: Certifique-se de que o arquivo `.pgpass` tenha permissões restritas para o usuário correto. No Linux, isso é feito com o comando: ```bash chmod 600 ~/.pgpass ```
#### 2. Arquivo `pg_hba.conf` (Configuração de acesso ao PostgreSQL) O arquivo `pg_hba.conf` define quem pode se conectar ao banco de dados, de onde, e como deve ser autenticado. Configurar corretamente esse arquivo é fundamental para evitar invasões.
**Exemplo seguro de `pg_hba.conf`**: ```ini # Permitir apenas conexões locais (localhost) para usuários autenticados via senha (md5) local all all md5
# Permitir conexões apenas de IPs internos específicos (ex: 192.168.0.x) com autenticação por senha forte host all all 192.168.0.0/24 md5
# Bloquear qualquer outro acesso externo host all all 0.0.0.0/0 reject ``` - **Local**: O primeiro bloco permite que qualquer usuário do sistema se conecte localmente, desde que tenha a senha correta (autenticação `md5`). - **IP Interno**: O segundo bloco permite que apenas computadores da rede interna 192.168.0.0/24 acessem o banco de dados, exigindo autenticação por senha (`md5`). - **Rejeição Global**: O terceiro bloco garante que qualquer outro acesso (externo ou de IPs desconhecidos) seja explicitamente rejeitado, prevenindo tentativas de acesso não autorizadas.
#### 3. Alteração da porta padrão no `postgresql.conf` A mudança da porta padrão (5432) para uma porta diferente (como 9554433229) ajuda a dificultar a detecção automatizada de instâncias PostgreSQL.
**Passos para alterar a porta**:
- Abra o arquivo `postgresql.conf`, que geralmente fica no diretório de dados do PostgreSQL. Exemplo de caminho em sistemas Linux: `/etc/postgresql/14/main/postgresql.conf`.
- Procure a linha referente à porta: ```ini # Port number for PostgreSQL to listen on port = 5432 ```
- Altere a porta para 9554433229 (ou outra de sua escolha): ```ini port = 9554433229 ```
- Reinicie o serviço PostgreSQL para aplicar as alterações: ```bash sudo systemctl restart postgresql ```
#### 4. Configurações Adicionais de Segurança
- **Firewall**: Configure um firewall para permitir apenas o tráfego na nova porta do PostgreSQL (9554433229). No Linux com `ufw`, você pode fazer isso com: ```bash sudo ufw allow 9554433229/tcp ```
- **SSL/TLS**: Habilite SSL no PostgreSQL para garantir que as conexões sejam criptografadas. No `postgresql.conf`, configure: ```ini ssl = on ``` E adicione certificados SSL para garantir a segurança da conexão.
---
Com essas configurações, você protege o PostgreSQL de forma eficaz, evitando acessos não autorizados, usando senhas fortes, restringindo acessos a IPs confiáveis, e mudando a porta padrão para dificultar a exploração automatizada.
[20/09/2024, 15:16:08] Adriano Boller: *No Windows*
Para configurar o PostgreSQL de forma segura em **Windows**, incluindo a configuração de `pgpass`, `pg_hba.conf` e a alteração da porta padrão, aqui está um guia prático:
### 1. Arquivo `pgpass.conf` no Windows
No Windows, o arquivo `pgpass.conf` tem a mesma função que no Linux, mas o local de armazenamento é diferente. Ele permite armazenar as credenciais de conexão de forma segura para scripts e automações.
#### **Passos para criar o `pgpass.conf`**:
1. **Localização do Arquivo**: O arquivo `pgpass.conf` deve ser criado na pasta do usuário no caminho: ``` C:\Users\<SEU_USUARIO>\AppData\Roaming\postgresql\pgpass.conf ```
2. **Conteúdo do `pgpass.conf`**: O formato é o mesmo, contendo `hostname:port:database:username:password`.
**Exemplo**: ``` # Formato: hostname:port:database:username:password localhost:9554433229:meu_banco:meu_usuario:minha_senha_forte 192.168.0.100:9554433229:outro_banco:outro_usuario:senha_muito_secreta ```
3. **Definindo Permissões**: - No Windows, é essencial que apenas o usuário proprietário tenha permissão de leitura/escrita no arquivo. Para ajustar isso: 1. Clique com o botão direito no arquivo `pgpass.conf` e selecione **Propriedades**. 2. Vá para a aba **Segurança**. 3. Remova o acesso de todos os outros usuários, deixando apenas o seu.
### 2. Arquivo `pg_hba.conf` no Windows
O arquivo `pg_hba.conf` no Windows tem o mesmo propósito de definir quem pode se conectar ao PostgreSQL, de onde, e como a autenticação será feita.
#### **Localização do `pg_hba.conf`**: O `pg_hba.conf` está localizado dentro da pasta de instalação de dados do PostgreSQL, geralmente em: ``` C:\Program Files\PostgreSQL\<versao>\data\pg_hba.conf ```
#### **Configuração Segura do `pg_hba.conf`**:
Aqui está um exemplo de configuração que limita o acesso ao servidor e impede invasores de fora da rede local.
```ini # Permitir apenas conexões locais no servidor Windows local all all md5
# Permitir conexões apenas de IPs internos (ex: 192.168.0.x) com autenticação por senha forte host all all 192.168.0.0/24 md5
# Bloquear qualquer outro acesso externo host all all 0.0.0.0/0 reject ```
- **Conexões locais**: O primeiro bloco permite apenas conexões locais no servidor (exemplo, scripts rodando no mesmo servidor) com autenticação por senha (`md5`). - **Conexões da rede interna**: O segundo bloco permite que apenas IPs da rede interna 192.168.0.x possam se conectar, exigindo autenticação com senha. - **Rejeição de outros acessos**: O terceiro bloco bloqueia qualquer outra conexão que não seja da rede local.
Após editar o `pg_hba.conf`, reinicie o serviço PostgreSQL para aplicar as mudanças.
### 3. Alterar a Porta Padrão no Windows
A mudança da porta padrão do PostgreSQL dificulta ataques automatizados que procuram a porta padrão (5432).
#### **Alterando a Porta no `postgresql.conf`**:
1. Abra o arquivo `postgresql.conf`, localizado em: ``` C:\Program Files\PostgreSQL\<versao>\data\postgresql.conf ```
2. Encontre a linha: ```ini # Port number for PostgreSQL to listen on port = 5432 ```
3. Altere para outra porta, como 9554433229: ```ini port = 9554433229 ```
4. Salve o arquivo e reinicie o PostgreSQL para aplicar a mudança.
#### **Reiniciando o Serviço PostgreSQL no Windows**:
1. Abra o **Prompt de Comando** com permissões de administrador. 2. Execute o seguinte comando para reiniciar o serviço: ```bash net stop postgresql-x64-14 net start postgresql-x64-14 ``` (Substitua `14` pela sua versão instalada).
### 4. Configurando o Firewall no Windows
Após mudar a porta do PostgreSQL, é importante ajustar o firewall para permitir o tráfego na nova porta e bloquear conexões indesejadas.
#### **Passos para Configurar o Firewall**:
1. Abra o **Firewall do Windows com Segurança Avançada**. 2. Crie uma nova regra de entrada para permitir conexões TCP na nova porta: - Vá para **Regras de Entrada** > **Nova Regra**. - Selecione **Porta** e clique em **Avançar**. - Escolha **TCP** e especifique a nova porta (5433, por exemplo). - Defina a ação como **Permitir Conexão**. - Aplique a regra a perfis de rede **Privado** e **Domínio** (evite aplicar em **Público**).
3. Opcionalmente, você pode bloquear outras portas não utilizadas ou limitar ainda mais as regras de firewall para hosts específicos.
---
### Recapitulando os Passos:
1. **pgpass.conf**: Armazenar credenciais com senhas fortes e definir permissões restritas. 2. **pg_hba.conf**: Restringir conexões a usuários locais e IPs confiáveis da rede. 3. **Alterar porta**: Mudar a porta padrão do PostgreSQL para dificultar ataques automatizados. 4. **Firewall**: Configurar o firewall do Windows para permitir apenas o tráfego na nova porta e de hosts confiáveis.
Com essas configurações, seu PostgreSQL no Windows estará muito mais protegido contra invasores.
Use vpn não use banco de dados sem rede privada!
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|