Sikkerhedsrevision er et must i alle virksomheder for at beskytte data og undgå eventuelle sikkerhedsbrud, men det er også en tidskrævende opgave, da du skal tjekke en masse ting med jævne mellemrum. Resultatet er, at virksomheder generelt følger en sikkerhedstjekliste og konfigurerer alt til at dække den, men de har ikke sikkerhedsrevisioner. Du kan sige, "Hvis alt fungerer fint, så behold det bare som det er". Nå, faktisk kan du ikke stole på, at de sikkerhedspolitikker, du konfigurerer nu, vil være nyttige i fremtiden, og at intet vil ændre sig for at påvirke dem. Løsningen til dette kunne være at automatisere disse sikkerhedsrevisioner eller have en måde at gøre det med jævne mellemrum på en brugervenlig måde.
I denne blog vil vi se, hvordan man udfører forskellige sikkerhedsrevisioner for PostgreSQL og automatiserer dem ved hjælp af ClusterControl.
Hvad skal du bruge for at lave en sikkerhedsrevision på PostgreSQL?
Lad os se på nogle af de vigtigste ting at revidere af sikkerhedsformål i en PostgreSQL-database:
-
Kommunikation:Kommunikationen i alle dine systemer skal være krypteret, og du skal begrænse trafik til det, der kun kommer fra kendte kilder for at reducere risikoen for uautoriseret adgang til dine data.
-
Databaseadgang:Du skal begrænse både fysisk og fjernadgang til dine databaser. Fjernadgang kan begrænses ved kun at tillade forbindelser fra kendte kilder for hver bruger, eller endda ved at bruge SSH- eller VPN-forbindelser.
-
Brugerkonti:Der er mange måder at forbedre sikkerheden for dine brugerkonti i PostgreSQL på, såsom at fjerne inaktive brugere , kun tildeling af nødvendige privilegier osv.
-
Installation og konfiguration:Der er nogle ændringer, der skal foretages for at sikre din PostgreSQL-installation, f.eks. kun at installere det nødvendige pakker, ændring af standard legitimationsoplysninger og konfiguration osv.
-
Revision og logning:Logføringsudsagn kan hjælpe dig med at opdage sikkerhedsproblemer eller undgå dem, hvis du fanger dem i tide . Du kan bruge standard PostgreSQL-logningsfaciliteten, men du kan også bruge en udvidelse som pgAudit for at få mere detaljeret logning.
-
Opgraderinger:Hold dit OS og din database så opdateret som muligt ved at anvende patches og sikkerhedsopgraderinger.
-
Forespørgselsovervågning:Du bør tjekke trafikken for at opdage unormale forespørgsler eller DoS-angreb.
-
Overvågning:For at kende status for dine systemer skal du have et godt overvågningssystem på plads. Dette kan være nyttigt for at finde sikkerhedsproblemer eller endda for at undgå dem.
Nu ved vi, hvad vi skal kontrollere, lad os se på en mulighed for at automatisere disse opgaver - ClusterControl.
Sikkerhedsrevision for PostgreSQL med ClusterControl
For PostgreSQL Security Audits er ClusterControl en god mulighed, da det er et administrations- og overvågningssystem, der hjælper dig med at implementere, administrere, overvåge og skalere dine databaser fra en brugervenlig grænseflade. Det har understøttelse af de bedste open source-databaseteknologier, og du kan automatisere mange af de databaseopgaver, du skal udføre regelmæssigt, såsom tilføjelse og skalering af nye noder, kørsel af sikkerhedskopier og gendannelser og mere.
Lad os se på, hvordan du kan dække de tidligere nævnte sikkerhedstjek ved hjælp af ClusterControl.
Kommunikation
I sikkerhedsafsnittet (ClusterControl -> Vælg Cluster -> fanen Sikkerhed), kan du aktivere SSL-kryptering for at kryptere forbindelserne mellem klienterne og serveren.
Adgang fra ClusterControl til noderne er også sikret ved hjælp af adgangskodefri SSH med et nøglepar.
Databasedgang
Du kan begrænse adgangen til din PostgreSQL-database ved at ændre pg_hba.conf-konfigurationsfilen fra ClusterControl-brugergrænsefladen (ClusterControl -> Vælg Cluster -> Administrer -> Konfigurationer). På denne måde kan du angive følgende muligheder:
-
Type:De mest brugte muligheder her er "lokal" for en Unix-domæne-socket og "vært" for en almindelig eller SSL-krypteret TCP/IP-socket, men der er andre muligheder som "hostssl" og mere.
-
Database:Det kan være "alle", "sameuser", "samerole", "replikering", en databasenavn eller en kommasepareret liste over databasenavne.
-
Bruger:Det kan være "alle", et brugernavn, et gruppenavn foran med "+", eller en kommasepareret liste heraf.
-
Adresse:Værtsnavn eller en IP-adresse og en CIDR-maske.
-
Metode:De mest brugte her er "trust", "reject", "md5", "ident" , og "peer", men der er flere muligheder som "scram-sha-256" eller "ldap".
Eksempel:
# TYPE DATABASE USER ADDRESS METHOD
host all admindb 10.10.10.121/32 md5
Brugerkonti
Du kan administrere dine databasebrugere fra ClusterControl UI (ClusterControl -> Vælg Cluster -> Administrer -> Brugerstyring). Du kan oprette nye brugere eller redigere og slette eksisterende og tildele dem de tilsvarende rettigheder.
Installation og konfiguration
Du kan implementere en ny PostgreSQL-klynge eller importere en eksisterende. Med din PostgreSQL-klynge tilføjet til ClusterControl, kan du administrere den aktuelle konfiguration (ClusterControl -> Vælg Cluster -> Administrer -> Konfiguration), eller endda tilføje nye noder til klyngen.
Under implementeringen kan du ændre databasekonfigurationen som databaseport eller legitimationsoplysninger, og derefter installerer ClusterControl kun de nødvendige pakker for at implementere din nye klynge.
Revision og logning
Du kan kontrollere standard PostgreSQL-logning i ClusterControl-brugergrænsefladen (ClusterControl -> Vælg Cluster -> Logs -> System Logs) eller endda aktivere pgAudit-udvidelsen fra ClusterControl og kontrollere revisionslogningen samme sted .
Opgraderinger
I tilfælde af mindre opgraderinger kan du bruge ClusterControl til denne opgave. Du kan få adgang til UI og køre opgraderingen (ClusterControl -> Vælg Cluster -> Administrer -> Opgraderinger), eller bruge "Package Upgrades" ClusterControl Operational Report for at modtage de tilgængelige pakker via e-mail eller kontrollere dem i ClusterControl UI.
Forespørgselsovervågning
I sektionen for forespørgselsovervågning kan du finde de mest populære forespørgsler, kørende forespørgsler, forespørgselsudlignere og forespørgselsstatistik for at overvåge din databasetrafik.
Overvågning
ClusterControl giver dig mulighed for at overvåge dine servere i realtid med et foruddefineret sæt dashboards for at analysere nogle af de mest almindelige metrics.
ClusterControl giver dig mulighed for at tilpasse de tilgængelige grafer i klyngen, og du kan aktivere den agentbaserede overvågning for at generere mere detaljerede dashboards.
Du kan også oprette advarsler, som informerer dig om begivenheder i din klynge, eller integreres med forskellige tjenester såsom PagerDuty eller Slack.
Driftsrapporter
Hvis du ikke vil have adgang til ClusterControl UI for at kontrollere status for dine klynger, kan du oprette eller planlægge driftsrapporter.
Driftsrapporterne giver dig information om din databasestatus, som du kan bruge til at revidere dit miljø. Disse rapporter består af forskellige kontroller og omhandler forskellige daglige DBA-opgaver. Ideen bag ClusterControl Operational Reporting er at samle alle de mest relevante data i et enkelt dokument, der hurtigt kan analyseres for at få en klar forståelse af status for databaserne og deres processer.
Du kan planlægge rapporter som "Daglig systemrapport", "Pakkeopgraderingsrapport", "Skemaændringsrapport", "Sikkerhedskopier" og "Tilgængelighed", og du kan modtage dem i mere end én e-mail adresse.
Brug af ClusterControl CLI til automatisering af sikkerhedsrevisioner
ClusterControl CLI, også kendt som s9s, er et kommandolinjeværktøj introduceret i ClusterControl version 1.4.1 til at interagere, kontrollere og administrere databaseklynger ved hjælp af ClusterControl-systemet. ClusterControl CLI åbner en ny dør til klyngeautomatisering, hvor du nemt kan integrere den med eksisterende installationsautomatiseringsværktøjer som Ansible, Puppet, Chef osv. Kommandolinjeværktøjet påkaldes ved at udføre en binær kaldet s9s, der er tilføjet som standard i ClusterControl-installationen.
Lad os se på nogle eksempler på dette kraftfulde værktøj. Til dette vil vi se, hvordan du udfører de nævnte sikkerhedsrevisionsopgaver ved hjælp af ClusterControl CLI.
Kommunikation
Du kan aktivere SSL-kryptering i din klynge ved at bruge følgende kommando:
$ s9s cluster --enable-ssl --cluster-id=ID
Hvor ID er klynge-id-nummeret:Du kan overvåge fremskridtene for denne opgave (og resten af opgaverne) ved at angive jobprocessen.
$ s9s job --list
Databasedgang
Du kan kontrollere databasekonfigurationen for at validere den tilladte adgang:
$ 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'
...
Hvor ID er klynge-id-nummeret, IP_ADDRESS og PORT er din databases IP-adresse og port.
Brugerkonti
Du kan angive de brugerkonti, der er i klyngen:
$ 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
Hvor ID er Cluster ID-nummeret.
Installation og konfiguration
Du kan oprette nye klynger, tilføje nye databasenoder eller endda ændre de eksisterende konfigurationer i din klynge:
$ 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
Hvor IP_ADDRESS er din databases IP-adresse, og du skal erstatte DBUSER, DBPASSWORD og OSUSER for henholdsvis dine databaselegitimationsoplysninger og operativsystembruger.
Revision og logning
Du kan aktivere revisionslogning fra kommandolinjen ved at bruge følgende kommando:
$ s9s cluster --setup-audit-logging --cluster-id=ID
Hvor ID er klynge-id-nummeret:så kan du kontrollere logfilerne med revisionslogningsoplysningerne.
Opgraderinger
Du kan oprette rapporter for at se, om du skal opgradere dine databaser eller operativsystempakker.
$ s9s report --cluster-id=ID --type=upgrade --create
Hvor ID er Cluster ID-nummeret:Baseret på denne rapport kan du planlægge vedligeholdelsesvinduer til at køre opgraderingerne, og det kan også gøres fra ClusterControl.
Forespørgselsovervågning
Du kan kontrollere processen, der kører på dine noder og filtrere dem efter forespørgslen, kilden og mere.
$ s9s process \
--top-queries \
--cluster-id=ID \
--update-freq=1 \
'INSERT*'
$ s9s process \
--list-queries \
--cluster-id=ID \
--client='IP_ADDRESS:*' \
'INSERT*'
Overvågning
Du har forskellige muligheder for at overvåge dine systemer herfra. Du kan tjekke status for alle klyngerne, tjekke en af dem eller endda tjekke alarmerne 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 oprette driftsrapporter og kontrollere dem fra kommandolinjen. Den samme rapport er tilgængelig i ClusterControl UI.
$ s9s report --cluster-id=ID --type=default --create
Dette var blot nogle grundlæggende eksempler for at se den slags ting, du kan udføre ved hjælp af ClusterControl CLI. For mere information om værktøjet, kan du henvise til den officielle dokumentation.
Konklusion
Der er altid en risiko for at blive hacket, men du kan lukke sårbarhedsgabet på din PostgreSQL-klynge ved at tjekke de ovennævnte punkter. For at gøre denne opgave meget nemmere kan du bruge ClusterControl UI eller endda automatisere kontrollerne med ClusterControl CLI. Det kan også integreres med eksterne værktøjer som Ansible, Puppet og mere.