As auditorias de segurança são obrigatórias em todas as empresas para proteger os dados e evitar possíveis violações de segurança, mas também é uma tarefa demorada, pois você precisa verificar muitas coisas periodicamente. O resultado é que, em geral, as empresas seguem um checklist de segurança e configuram tudo para cobri-lo, mas não possuem auditorias de segurança. Você pode dizer:“Se tudo está funcionando bem, apenas mantenha como está”. Bem, na verdade, você não pode confiar que as políticas de segurança que você está configurando agora serão úteis no futuro e que nada mudará para afetá-las. A solução para isso pode ser automatizar essas auditorias de segurança ou ter uma maneira de fazer isso periodicamente de maneira amigável.
Neste blog, veremos como realizar diferentes auditorias de segurança para PostgreSQL e automatizá-las usando o ClusterControl.
O que você precisa para fazer uma auditoria de segurança no PostgreSQL?
Vejamos algumas das coisas mais importantes para auditar para fins de segurança em um banco de dados PostgreSQL:
-
Comunicação:a comunicação em todos os seus sistemas deve ser criptografada, e você deve restringir o tráfego ao que vem apenas de fontes conhecidas para reduzir o risco de acesso não autorizado aos seus dados.
-
Acesso ao banco de dados:Você precisa restringir o acesso físico e remoto aos seus bancos de dados. O acesso remoto pode ser restrito permitindo conexões apenas de fontes conhecidas para cada usuário, ou mesmo usando conexões SSH ou VPN.
-
Contas de usuário:há muitas maneiras de melhorar a segurança de suas contas de usuário no PostgreSQL, como remover usuários inativos , concedendo apenas privilégios necessários, etc.
-
Instalação e configuração:Existem algumas mudanças a serem feitas para proteger sua instalação do PostgreSQL, como instalar apenas o necessário pacotes, alterando as credenciais e configuração padrão, etc.
-
Auditoria e registro:as instruções de registro podem ajudar você a detectar problemas de segurança ou evitá-los se detectá-los a tempo . Você pode usar o recurso de registro padrão do PostgreSQL, mas também pode usar uma extensão como pgAudit para obter um registro mais detalhado.
-
Atualizações:Mantenha seu sistema operacional e banco de dados o mais atualizado possível aplicando patches e atualizações de segurança.
-
Monitor de consultas:você deve verificar o tráfego para detectar consultas anormais ou ataques DoS.
-
Monitoramento:Para saber o status de seus sistemas, você precisará ter um bom sistema de monitoramento instalado. Isso pode ser útil para encontrar problemas de segurança ou até mesmo para evitá-los.
Agora que sabemos o que verificar, vejamos uma opção para automatizar essas tarefas - ClusterControl.
Auditorias de segurança para PostgreSQL com ClusterControl
Para auditorias de segurança do PostgreSQL, o ClusterControl é uma boa opção, pois é um sistema de gerenciamento e monitoramento que ajuda você a implantar, gerenciar, monitorar e dimensionar seus bancos de dados a partir de uma interface amigável. Ele tem suporte para as principais tecnologias de banco de dados de código aberto e você pode automatizar muitas das tarefas de banco de dados que precisa executar regularmente, como adicionar e dimensionar novos nós, executar backups e restaurações e muito mais.
Vamos ver como você pode cobrir as verificações de segurança mencionadas anteriormente usando o ClusterControl.
Comunicação
Na seção de segurança (ClusterControl -> Selecionar Cluster -> guia Segurança), você pode habilitar a Criptografia SSL para criptografar as conexões entre os clientes e o servidor.
O acesso do ClusterControl aos nós também é protegido usando SSH sem senha com um par de chaves.
Acesso ao banco de dados
Você pode restringir o acesso ao seu banco de dados PostgreSQL modificando o arquivo de configuração pg_hba.conf na interface do usuário do ClusterControl (ClusterControl -> Select Cluster -> Manage -> Configurations). Dessa forma, você pode especificar as seguintes opções:
-
Tipo:As opções mais usadas aqui são “local” para um soquete de domínio Unix e “host” para um soquete TCP/IP simples ou criptografado por SSL, mas existem outras opções como "hostssl" e muito mais.
-
Banco de dados:pode ser "all", "sameuser", "samerole", "replication", um nome do banco de dados ou uma lista separada por vírgulas de nomes de banco de dados.
-
Usuário:pode ser "todos", um nome de usuário, um nome de grupo prefixado com "+", ou uma lista separada por vírgulas.
-
Endereço:Nome do host ou um endereço IP e uma máscara CIDR.
-
Método:Os mais usados aqui são "trust", "reject", "md5", "ident" , e "peer", mas há mais opções como "scram-sha-256" ou "ldap".
Exemplo:
# TYPE DATABASE USER ADDRESS METHOD
host all admindb 10.10.10.121/32 md5
Contas de usuário
Você pode gerenciar seus usuários de banco de dados a partir da interface do usuário do ClusterControl (ClusterControl -> Select Cluster -> Manage -> User Management). Você pode criar novos usuários ou editar e excluir os existentes e atribuir os privilégios correspondentes a eles.
Instalação e configuração
Você pode implantar um novo cluster PostgreSQL ou importar um existente. Com seu cluster PostgreSQL adicionado ao ClusterControl, você pode gerenciar a configuração atual (ClusterControl -> Select Cluster -> Manage -> Configuration), ou até mesmo adicionar novos nós ao cluster.
Durante a implantação, você pode modificar a configuração do banco de dados, como porta ou credenciais do banco de dados, e o ClusterControl instalará apenas os pacotes necessários para implantar seu novo cluster.
Auditoria e registro
Você pode verificar o log padrão do PostgreSQL na UI do ClusterControl (ClusterControl -> Select Cluster -> Logs -> System Logs) ou ainda habilitar a extensão pgAudit do ClusterControl e verificar o log de auditoria no mesmo local .
Atualizações
No caso de pequenas atualizações, você pode usar o ClusterControl para esta tarefa. Você pode acessar a UI e executar a atualização (ClusterControl -> Select Cluster -> Manage -> Upgrades), ou usar o Relatório Operacional ClusterControl “Package Upgrades” para receber os pacotes disponíveis por e-mail ou verificá-los na UI do ClusterControl.
Monitor de consultas
Na seção de monitoramento de consultas, você pode encontrar as principais consultas, consultas em execução, discrepâncias de consulta e estatísticas de consulta para monitorar o tráfego do banco de dados.
Monitoramento
ClusterControl permite monitorar seus servidores em tempo real com um conjunto predefinido de painéis para analisar algumas das métricas mais comuns.
ClusterControl permite personalizar os gráficos disponíveis no cluster e você pode habilitar o monitoramento baseado em agente para gerar painéis mais detalhados.
Você também pode criar alertas, que informam sobre eventos em seu cluster, ou integrar-se a diferentes serviços, como PagerDuty ou Slack.
Relatórios operacionais
Se você não quiser acessar a interface do usuário do ClusterControl para verificar o status de seus clusters, poderá criar ou agendar relatórios operacionais.
Os Relatórios Operacionais fornecem informações sobre o status do banco de dados, que você pode usar para auditar seu ambiente. Esses relatórios consistem em diferentes verificações e abordam várias tarefas diárias do DBA. A ideia por trás do ClusterControl Operational Reporting é colocar todos os dados mais relevantes em um único documento que pode ser analisado rapidamente para obter uma compreensão clara do status dos bancos de dados e seus processos.
Você pode agendar relatórios como "Relatório diário do sistema", "Relatório de atualização de pacote", "Relatório de alteração de esquema", "Backups" e "Disponibilidade" e recebê-los em mais de um e-mail Morada.
Usando a CLI do ClusterControl para automatizar auditorias de segurança
ClusterControl CLI, também conhecido como s9s, é uma ferramenta de linha de comando introduzida no ClusterControl versão 1.4.1 para interagir, controlar e gerenciar clusters de banco de dados usando o sistema ClusterControl. ClusterControl CLI abre uma nova porta para automação de cluster, onde você pode integrá-lo facilmente com ferramentas de automação de implantação existentes, como Ansible, Puppet, Chef, etc. A ferramenta de linha de comando é invocada executando um binário chamado s9s adicionado por padrão na instalação do ClusterControl.
Vejamos alguns exemplos dessa ferramenta poderosa. Para isso, veremos como realizar as tarefas de Auditoria de Segurança mencionadas usando a CLI do ClusterControl.
Comunicação
Você pode habilitar a criptografia SSL em seu cluster usando o seguinte comando:
$ s9s cluster --enable-ssl --cluster-id=ID
Onde ID é o número de ID do cluster:você pode monitorar o andamento desta tarefa (e do restante das tarefas) listando o processo de trabalho.
$ s9s job --list
Acesso ao banco de dados
Você pode verificar a configuração do banco de dados para validar o acesso permitido:
$ s9s node --cluster-id=ID \
--nodes="IP_ADDRESS:PORT" \
--list-config
GROUP OPTION NAME VALUE
- data_directory '/var/lib/pgsql/13/data'
- hba_file '/var/lib/pgsql/13/data/pg_hba.conf'
- ident_file '/var/lib/pgsql/13/data/pg_ident.conf'
- listen_addresses '*'
- port 5432
- max_connections 100
- ssl on
- ssl_ca_file '/etc/ssl/postgresql_single/cluster_47/server_ca.crt'
- ssl_cert_file '/etc/ssl/postgresql_single/cluster_47/server.crt'
...
Onde ID é o número de ID do cluster, IP_ADDRESS e PORT são o endereço IP e a porta do banco de dados.
Contas de usuário
Você pode listar as contas de usuário que estão no cluster:
$ s9s accounts --list --cluster-id=ID --long
NAME P CONN MAXC GRANTS
's9spostgresqlchk'@'%' N 0 0 LOGIN,SUPERUSER,INHERIT,CREATEROLE,CREATEDB
'postgres'@'%' N 1 0 LOGIN,SUPERUSER,INHERIT,REPLICATION,CREATEROLE,CREATEDB
'pg_write_server_files'@'%' N 0 0 INHERIT
...
'cmon_replication'@'%' N 2 0 LOGIN,INHERIT,REPLICATION
'admindb'@'%' N 3 0 LOGIN,SUPERUSER,INHERIT,CREATEROLE,CREATEDB
Onde ID é o número de ID do cluster.
Instalação e configuração
Você pode criar novos clusters, adicionar novos nós de banco de dados ou até mesmo alterar as configurações existentes em seu cluster:
$ s9s cluster --create \
--cluster-type=postgresql \
--nodes="IP_ADDRESS1?master;IP_ADDRESS2?slave;IP_ADDRESS3?slave;" \
--db-admin="DBUSER" \
--db-admin-passwd="DBPASSWORD" \
--cluster-name=PG1 \
--os-user=OSUSER \
--os-key-file=/home/OSUSER/.ssh/id_rsa \
--provider-version=13 \
--log
Onde IP_ADDRESS é o endereço IP do banco de dados e você precisa substituir DBUSER, DBPASSWORD e OSUSER pelas credenciais do banco de dados e usuário do sistema operacional, respectivamente.
Auditoria e registro
Você pode habilitar o log de auditoria na linha de comando usando o seguinte comando:
$ s9s cluster --setup-audit-logging --cluster-id=ID
Onde ID é o número de ID do cluster:então, você pode verificar os logs com as informações de log de auditoria.
Atualizações
Você pode criar relatórios para ver se precisa atualizar seus bancos de dados ou pacotes de sistemas operacionais.
$ s9s report --cluster-id=ID --type=upgrade --create
Onde ID é o número de ID do Cluster:com base neste relatório, você pode agendar janelas de manutenção para executar as atualizações, e isso também pode ser feito no ClusterControl.
Monitor de consultas
Você pode verificar o processo em execução em seus nós e filtrá-los por consulta, origem e muito mais.
$ s9s process \
--top-queries \
--cluster-id=ID \
--update-freq=1 \
'INSERT*'
$ s9s process \
--list-queries \
--cluster-id=ID \
--client='IP_ADDRESS:*' \
'INSERT*'
Monitoramento
Você tem diferentes opções para monitorar seus sistemas a partir daqui. Você pode verificar o status de todos os clusters, verificar um deles ou até mesmo verificar os alarmes em tempo real.
$ s9s cluster --list --long
ID STATE TYPE OWNER GROUP NAME COMMENT
1 STARTED postgresql_single system admins PostgreSQL Cluster All nodes are operational.
2 FAILURE galera system admins PXC57 Cluster failure.
3 STARTED replication system admins MariaDB104 All nodes are operational.
4 STARTED mongodb system admins MongoDB42 All nodes are operational.
Total: 4
$ s9s alarm --cluster-name="PostgreSQL Cluster" --list
ID CID SEVERITY COMPONENT TYPE HOSTNAME TITLE
263 1 CRITICAL Network HostSshFailed haproxy1 SSH failed
264 1 CRITICAL Network HostSshFailed haproxy2 SSH failed
265 1 CRITICAL Network HostSshFailed postgresql2 SSH failed
266 1 CRITICAL Network HostSshFailed postgresql3 SSH failed
...
Relatórios de operação
Você pode criar Relatórios Operacionais e verificá-los na linha de comando. O mesmo relatório está disponível na interface do usuário do ClusterControl.
$ s9s report --cluster-id=ID --type=default --create
Estes foram apenas alguns exemplos básicos para ver o tipo de coisas que você pode realizar usando a CLI do ClusterControl. Para mais informações sobre a ferramenta, você pode consultar a documentação oficial.
Conclusão
Sempre existe o risco de ser hackeado, mas você pode fechar a lacuna de vulnerabilidade em seu cluster PostgreSQL verificando os pontos mencionados acima. Para tornar essa tarefa muito mais fácil, você pode usar a interface do usuário do ClusterControl ou até mesmo automatizar as verificações com a CLI do ClusterControl. Ele também pode ser integrado a ferramentas externas como Ansible, Puppet e muito mais.