Säkerhetsrevisioner är ett måste i alla företag för att skydda data och undvika eventuella säkerhetsintrång, men det är också en tidskrävande uppgift då du behöver kontrollera många saker med jämna mellanrum. Resultatet är att företag i allmänhet följer en säkerhetschecklista och konfigurerar allt för att täcka den, men de har inga säkerhetsrevisioner. Du kan säga:"Om allt fungerar bra, behåll det som det är". Tja, faktiskt, du kan inte lita på att säkerhetspolicyerna du konfigurerar nu kommer att vara användbara i framtiden, och att ingenting kommer att förändras för att påverka dem. Lösningen för detta kan vara att automatisera dessa säkerhetsrevisioner eller ha ett sätt att göra det regelbundet på ett användarvänligt sätt.
I den här bloggen kommer vi att se hur man utför olika säkerhetsgranskningar för PostgreSQL och automatiserar dem med ClusterControl.
Vad behöver du för att göra en säkerhetsgranskning på PostgreSQL?
Låt oss titta på några av de viktigaste sakerna att granska för säkerhetsändamål i en PostgreSQL-databas:
-
Kommunikation:Kommunikationen i alla dina system måste vara krypterad och du måste begränsa trafiken till den som bara kommer från kända källor för att minska risken för obehörig åtkomst till dina data.
-
Databasåtkomst:Du måste begränsa både fysisk och fjärråtkomst till dina databaser. Fjärråtkomst kan begränsas genom att endast tillåta anslutningar från kända källor för varje användare, eller till och med använda SSH- eller VPN-anslutningar.
-
Användarkonton:Det finns många sätt att förbättra säkerheten för dina användarkonton i PostgreSQL, som att ta bort inaktiva användare , beviljar endast nödvändiga privilegier, etc.
-
Installation och konfiguration:Det finns några ändringar att göra för att säkra din PostgreSQL-installation, till exempel att installera endast det nödvändiga paket, ändra standardinloggningsuppgifter och konfiguration, etc.
-
Revision och loggning:Loggningsutlåtanden kan hjälpa dig att upptäcka säkerhetsproblem eller undvika dem om du upptäcker dem i tid . Du kan använda den vanliga PostgreSQL-loggningsfunktionen, men du kan också använda en tillägg som pgAudit för att få mer detaljerad loggning.
-
Uppgraderingar:Håll ditt operativsystem och din databas så uppdaterade som möjligt genom att installera patchar och säkerhetsuppgraderingar.
-
Frågeövervakare:Du bör kontrollera trafiken för att upptäcka onormala frågor eller DoS-attacker.
-
Övervakning:För att veta statusen för dina system måste du ha ett bra övervakningssystem på plats. Detta kan vara användbart för att hitta säkerhetsproblem eller till och med för att undvika dem.
Nu vet vi vad vi ska kontrollera, låt oss titta på ett alternativ för att automatisera dessa uppgifter - ClusterControl.
Säkerhetsrevisioner för PostgreSQL med ClusterControl
För PostgreSQL-säkerhetsrevisioner är ClusterControl ett bra alternativ eftersom det är ett hanterings- och övervakningssystem som hjälper dig att distribuera, hantera, övervaka och skala dina databaser från ett användarvänligt gränssnitt. Den har stöd för de bästa databasteknologierna med öppen källkod och du kan automatisera många av de databasuppgifter du måste utföra regelbundet som att lägga till och skala nya noder, köra säkerhetskopieringar och återställningar och mer.
Låt oss titta på hur du kan täcka de tidigare nämnda säkerhetskontrollerna med ClusterControl.
Kommunikation
I säkerhetsavsnittet (ClusterControl -> Välj Cluster -> Security-fliken) kan du aktivera SSL-kryptering för att kryptera anslutningarna mellan klienterna och servern.
Åtkomst från ClusterControl till noderna är också säker med lösenordslös SSH med ett nyckelpar.
Databasåtkomst
Du kan begränsa åtkomsten till din PostgreSQL-databas genom att ändra konfigurationsfilen pg_hba.conf från ClusterControl-gränssnittet (ClusterControl -> Välj Cluster -> Hantera -> Konfigurationer). På detta sätt kan du ange följande alternativ:
-
Typ:De mest använda alternativen här är "lokal" för en Unix-domänsocket och "värd" för en vanlig eller SSL-krypterad TCP/IP-socket, men det finns andra alternativ som "hostssl" och mer.
-
Databas:Det kan vara "all", "sameuser", "sameuser", "replikering", en databasnamn, eller en kommaseparerad lista med databasnamn.
-
Användare:Det kan vara "alla", ett användarnamn, ett gruppnamn med prefixet "+", eller en kommaseparerad lista därav.
-
Adress:Värdnamn eller en IP-adress och en CIDR-mask.
-
Metod:De mest använda här är "trust", "reject", "md5", "ident" , och "peer", men det finns fler alternativ som "scram-sha-256" eller "ldap".
Exempel:
# TYPE DATABASE USER ADDRESS METHOD
host all admindb 10.10.10.121/32 md5
Användarkonton
Du kan hantera dina databasanvändare från ClusterControl UI (ClusterControl -> Välj Cluster -> Hantera -> Användarhantering). Du kan skapa nya användare, eller redigera och ta bort befintliga, och tilldela motsvarande behörigheter till dem.
Installation och konfiguration
Du kan distribuera ett nytt PostgreSQL-kluster eller importera ett befintligt. Med ditt PostgreSQL-kluster lagt till i ClusterControl kan du hantera den aktuella konfigurationen (ClusterControl -> Välj kluster -> Hantera -> Konfiguration), eller till och med lägga till nya noder i klustret.
Under distributionen kan du ändra databaskonfigurationen som databasport eller referenser, och sedan installerar ClusterControl endast de nödvändiga paketen för att distribuera ditt nya kluster.
Revision och loggning
Du kan kontrollera den vanliga PostgreSQL-loggningen i ClusterControl-gränssnittet (ClusterControl -> Välj kluster -> Loggar -> Systemloggar) eller till och med aktivera tillägget pgAudit från ClusterControl och kontrollera granskningsloggningen på samma plats .
Uppgraderingar
I fall av mindre uppgraderingar kan du använda ClusterControl för denna uppgift. Du kan komma åt gränssnittet och köra uppgraderingen (ClusterControl -> Välj Cluster -> Hantera -> Uppgraderingar), eller använda "Package Upgrades" ClusterControl Operations Report, för att ta emot tillgängliga paket via e-post eller kontrollera dem i ClusterControl UI.
Frågeövervakare
I sektionen för frågeövervakare kan du hitta de vanligaste frågorna, löpande frågorna, frågeavvikelserna och frågestatistiken för att övervaka din databastrafik.
Övervakning
ClusterControl låter dig övervaka dina servrar i realtid med en fördefinierad uppsättning instrumentpaneler för att analysera några av de vanligaste mätvärdena.
ClusterControl låter dig anpassa de grafer som är tillgängliga i klustret, och du kan aktivera den agentbaserade övervakningen för att generera mer detaljerade instrumentpaneler.
Du kan också skapa varningar som informerar dig om händelser i ditt kluster, eller integrera med olika tjänster som PagerDuty eller Slack.
Driftsrapporter
Om du inte vill komma åt ClusterControl UI för att kontrollera statusen för dina kluster kan du skapa eller schemalägga driftsrapporter.
Driftsrapporterna ger dig information om din databasstatus, som du kan använda för att granska din miljö. Dessa rapporter består av olika kontroller och tar upp olika dagliga DBA-uppgifter. Tanken bakom ClusterControl Operational Reporting är att lägga all den mest relevanta informationen i ett enda dokument som snabbt kan analyseras för att få en tydlig förståelse av statusen för databaserna och deras processer.
Du kan schemalägga rapporter som "Daglig systemrapport", "Paketuppgraderingsrapport", "Schemaändringsrapport", "Säkerhetskopieringar" och "Tillgänglighet", och du kan få dem i mer än ett e-postmeddelande adress.
Använda ClusterControl CLI för att automatisera säkerhetsgranskningar
ClusterControl CLI, även känd som s9s, är ett kommandoradsverktyg som introducerats i ClusterControl version 1.4.1 för att interagera, kontrollera och hantera databaskluster med ClusterControl-systemet. ClusterControl CLI öppnar en ny dörr för klusterautomation där du enkelt kan integrera den med befintliga automationsverktyg för distribution som Ansible, Puppet, Chef, etc. Kommandoradsverktyget anropas genom att exekvera en binär som heter s9s som läggs till som standard i ClusterControl-installationen.
Låt oss titta på några exempel på detta kraftfulla verktyg. För detta kommer vi att se hur man utför de nämnda säkerhetsgranskningsuppgifterna med ClusterControl CLI.
Kommunikation
Du kan aktivera SSL-kryptering i ditt kluster med följande kommando:
$ s9s cluster --enable-ssl --cluster-id=ID
Där ID är kluster-ID-numret:du kan övervaka förloppet för denna uppgift (och resten av uppgifterna) genom att lista jobbprocessen.
$ s9s job --list
Databasåtkomst
Du kan kontrollera databaskonfigurationen för att validera den tillåtna åtkomsten:
$ 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'
...
Där ID är kluster-ID-numret, IP_ADDRESS och PORT är din databas IP-adress och port.
Användarkonton
Du kan lista de användarkonton som finns i klustret:
$ 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
Där ID är kluster-ID-numret.
Installation och konfiguration
Du kan skapa nya kluster, lägga till nya databasnoder eller till och med ändra befintliga konfigurationer i ditt kluster:
$ 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
Där IP_ADDRESS är din databas IP-adress och du måste ersätta DBUSER, DBPASSWORD och OSUSER för dina databasuppgifter respektive operativsystemanvändare.
Revision och loggning
Du kan aktivera granskningsloggning från kommandoraden med följande kommando:
$ s9s cluster --setup-audit-logging --cluster-id=ID
Där ID är kluster-ID-numret:sedan kan du kontrollera loggarna med granskningsloggningsinformationen.
Uppgraderingar
Du kan skapa rapporter för att se om du behöver uppgradera dina databaser eller operativsystempaket.
$ s9s report --cluster-id=ID --type=upgrade --create
Där ID är kluster-ID-numret:baserat på den här rapporten kan du schemalägga underhållsfönster för att köra uppgraderingarna, och det kan också göras från ClusterControl.
Frågeövervakare
Du kan kontrollera processen som körs på dina noder och filtrera dem efter fråga, källa och mer.
$ s9s process \
--top-queries \
--cluster-id=ID \
--update-freq=1 \
'INSERT*'
$ s9s process \
--list-queries \
--cluster-id=ID \
--client='IP_ADDRESS:*' \
'INSERT*'
Övervakning
Du har olika alternativ för att övervaka dina system härifrån. Du kan kontrollera status för alla kluster, kontrollera ett av dem eller till och med kontrollera larmen i realtid.
$ 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
...
Driftsrapporter
Du kan skapa driftsrapporter och kontrollera dem från kommandoraden. Samma rapport är tillgänglig i ClusterControl UI.
$ s9s report --cluster-id=ID --type=default --create
Detta var bara några grundläggande exempel för att se vilken typ av saker du kan utföra med ClusterControl CLI. För mer information om verktyget kan du hänvisa till den officiella dokumentationen.
Slutsats
Det finns alltid en risk att bli hackad, men du kan täppa till sårbarhetsgapet på ditt PostgreSQL-kluster genom att kontrollera ovanstående punkter. För att göra denna uppgift mycket enklare kan du använda ClusterControl UI eller till och med automatisera kontrollerna med ClusterControl CLI. Den kan också integreras med externa verktyg som Ansible, Puppet och mer.