Veiligheidsaudits zijn een must in alle bedrijven om gegevens te beschermen en mogelijke inbreuken op de beveiliging te voorkomen, maar het is ook een tijdrovende taak omdat u regelmatig veel dingen moet controleren. Het resultaat is dat bedrijven over het algemeen een beveiligingschecklist volgen en alles configureren om deze te dekken, maar ze hebben geen beveiligingsaudits. Je zou kunnen zeggen:"Als alles goed werkt, laat het dan zoals het is". Nou, eigenlijk kun je er niet op vertrouwen dat het beveiligingsbeleid dat je nu configureert in de toekomst nuttig zal zijn en dat er niets zal veranderen om ze te beïnvloeden. De oplossing hiervoor zou kunnen zijn deze beveiligingsaudits te automatiseren of een manier te vinden om dit periodiek op een gebruiksvriendelijke manier te doen.
In deze blog zullen we zien hoe we verschillende beveiligingsaudits voor PostgreSQL kunnen uitvoeren en automatiseren met ClusterControl.
Wat heb je nodig om een beveiligingsaudit uit te voeren op PostgreSQL?
Laten we eens kijken naar enkele van de belangrijkste dingen om te controleren voor beveiligingsdoeleinden in een PostgreSQL-database:
-
Communicatie:de communicatie in al uw systemen moet versleuteld zijn en u moet verkeer beperken tot dat wat alleen komt van bekende bronnen om het risico van ongeautoriseerde toegang tot uw gegevens te verminderen.
-
Databasetoegang:u moet zowel fysieke als externe toegang tot uw databases beperken. Externe toegang kan worden beperkt door alleen verbindingen van bekende bronnen toe te staan voor elke gebruiker, of zelfs door SSH- of VPN-verbindingen te gebruiken.
-
Gebruikersaccounts:er zijn veel manieren om de beveiliging van uw gebruikersaccounts in PostgreSQL te verbeteren, zoals het verwijderen van inactieve gebruikers , alleen noodzakelijke rechten toekennen, enz.
-
Installatie en configuratie:er zijn enkele wijzigingen die u moet doen om uw PostgreSQL-installatie te beveiligen, zoals het installeren van alleen de noodzakelijke pakketten, het wijzigen van de standaardgegevens en configuratie, enz.
-
Auditing en logboekregistratie:logboekinstructies kunnen u helpen beveiligingsproblemen op te sporen of te vermijden als u ze op tijd opmerkt . U kunt de standaard PostgreSQL-logboekfunctie gebruiken, maar u kunt ook een extensie zoals pgAudit gebruiken voor meer gedetailleerde logboekregistratie.
-
Upgrades:houd uw besturingssysteem en database zo up-to-date mogelijk door patches en beveiligingsupgrades toe te passen.
-
Query Monitor:u moet het verkeer controleren om abnormale zoekopdrachten of DoS-aanvallen te detecteren.
-
Monitoring:om de status van uw systemen te kennen, moet u een goed monitoringsysteem hebben. Dit kan handig zijn om beveiligingsproblemen op te sporen of zelfs te vermijden.
Nu we weten wat we moeten controleren, gaan we kijken naar een optie om deze taken te automatiseren - ClusterControl.
Beveiligingsaudits voor PostgreSQL met ClusterControl
Voor PostgreSQL-beveiligingsaudits is ClusterControl een goede optie, omdat het een beheer- en controlesysteem is dat u helpt bij het implementeren, beheren, bewaken en schalen van uw databases vanuit een gebruiksvriendelijke interface. Het biedt ondersteuning voor de beste open-source databasetechnologieën en u kunt veel van de databasetaken automatiseren die u regelmatig moet uitvoeren, zoals het toevoegen en schalen van nieuwe knooppunten, het uitvoeren van back-ups en herstelbewerkingen, en meer.
Laten we eens kijken hoe u de eerder genoemde beveiligingscontroles kunt dekken met ClusterControl.
Communicatie
In het beveiligingsgedeelte (ClusterControl -> Cluster selecteren -> tabblad Beveiliging) kunt u SSL-codering inschakelen om de verbindingen tussen de clients en de server te coderen.
Toegang van ClusterControl tot de nodes is ook beveiligd met SSH zonder wachtwoord met een sleutelpaar.
Databasetoegang
U kunt de toegang tot uw PostgreSQL-database beperken door het configuratiebestand pg_hba.conf te wijzigen vanuit de gebruikersinterface van ClusterControl (ClusterControl -> Cluster selecteren -> Beheren -> Configuraties). Op deze manier kunt u de volgende opties specificeren:
-
Type:De meest gebruikte opties hier zijn "local" voor een Unix-domein socket en "host" voor een gewone of SSL-gecodeerde TCP/IP-socket, maar er zijn andere opties zoals "hostssl", en meer.
-
Database:het kan "all", "sameuser", "samerole", "replication", a databasenaam of een door komma's gescheiden lijst met databasenamen.
-
Gebruiker:het kan "all" zijn, een gebruikersnaam, een groepsnaam voorafgegaan door "+", of een door komma's gescheiden lijst daarvan.
-
Adres:Hostnaam, of een IP-adres en een CIDR-masker.
-
Methode:De meest gebruikte hier zijn "trust", "reject", "md5", "ident" , en "peer", maar er zijn meer opties zoals "scram-sha-256" of "ldap".
Voorbeeld:
# TYPE DATABASE USER ADDRESS METHOD
host all admindb 10.10.10.121/32 md5
Gebruikersaccounts
U kunt uw databasegebruikers beheren vanuit de ClusterControl-gebruikersinterface (ClusterControl -> Cluster selecteren -> Beheren -> Gebruikersbeheer). U kunt nieuwe gebruikers maken of bestaande bewerken en verwijderen en de bijbehorende rechten aan hen toewijzen.
Installatie en configuratie
Je kunt een nieuw PostgreSQL-cluster implementeren of een bestaande importeren. Met uw PostgreSQL-cluster toegevoegd aan ClusterControl, kunt u de huidige configuratie beheren (ClusterControl -> Cluster selecteren -> Beheren -> Configuratie), of zelfs nieuwe knooppunten aan het cluster toevoegen.
Tijdens de implementatie kunt u de databaseconfiguratie wijzigen, zoals databasepoort of referenties, en dan zal ClusterControl alleen de benodigde pakketten installeren om uw nieuwe cluster te implementeren.
Auditing en logboekregistratie
U kunt de standaard PostgreSQL-logboekregistratie controleren in de gebruikersinterface van ClusterControl (ClusterControl -> Cluster selecteren -> Logboeken -> Systeemlogboeken) of zelfs de pgAudit-extensie van ClusterControl inschakelen en de auditregistratie op dezelfde plaats controleren .
Upgrades
In het geval van kleine upgrades kunt u ClusterControl gebruiken voor deze taak. U kunt toegang krijgen tot de gebruikersinterface en de upgrade uitvoeren (ClusterControl -> Cluster selecteren -> Beheer -> Upgrades), of het ClusterControl Operational Report "Package Upgrades" gebruiken om de beschikbare pakketten via e-mail te ontvangen of ze in de ClusterControl UI te controleren.
Query-monitor
In de sectie Querymonitor kunt u de meest voorkomende zoekopdrachten, lopende zoekopdrachten, uitbijters van zoekopdrachten en zoekopdrachtstatistieken vinden om uw databaseverkeer te controleren.
Bewaking
Met ClusterControl kunt u uw servers in realtime bewaken met een vooraf gedefinieerde set dashboards om enkele van de meest voorkomende statistieken te analyseren.
ClusterControl stelt u in staat om de grafieken die beschikbaar zijn in het cluster aan te passen, en u kunt de op agenten gebaseerde monitoring inschakelen om meer gedetailleerde dashboards te genereren.
U kunt ook waarschuwingen maken, die u informeren over gebeurtenissen in uw cluster, of integreren met verschillende services zoals PagerDuty of Slack.
Operationele rapporten
Als u geen toegang wilt tot de gebruikersinterface van ClusterControl om de status van uw clusters te controleren, kunt u operationele rapporten maken of plannen.
De operationele rapporten geven u informatie over uw databasestatus, die u kunt gebruiken om uw omgeving te controleren. Deze rapportages bestaan uit verschillende controles en behandelen verschillende dagelijkse DBA-taken. Het idee achter ClusterControl Operational Reporting is om alle meest relevante gegevens in één document te plaatsen dat snel kan worden geanalyseerd om een duidelijk inzicht te krijgen in de status van de databases en hun processen.
U kunt rapporten plannen zoals "Dagelijks systeemrapport", "Pakketupgraderapport", "Schemawijzigingsrapport", "Back-ups" en "Beschikbaarheid", en u kunt ze in meer dan één e-mail ontvangen adres.
ClusterControl CLI gebruiken voor het automatiseren van beveiligingsaudits
ClusterControl CLI, ook bekend als s9s, is een opdrachtregelprogramma dat is geïntroduceerd in ClusterControl versie 1.4.1 voor interactie, controle en beheer van databaseclusters met behulp van het ClusterControl-systeem. ClusterControl CLI opent een nieuwe deur voor clusterautomatisering, waar u het eenvoudig kunt integreren met bestaande automatiseringstools voor implementatie, zoals Ansible, Puppet, Chef, enz. Het opdrachtregelprogramma wordt aangeroepen door een binair bestand met de naam s9s uit te voeren dat standaard is toegevoegd aan de ClusterControl-installatie.
Laten we eens kijken naar enkele voorbeelden van deze krachtige tool. Hiervoor zullen we zien hoe de genoemde Security Audit-taken kunnen worden uitgevoerd met behulp van de ClusterControl CLI.
Communicatie
U kunt SSL-codering in uw cluster inschakelen met de volgende opdracht:
$ s9s cluster --enable-ssl --cluster-id=ID
Waar ID het Cluster-ID-nummer is:u kunt de voortgang van deze taak (en de rest van de taken) volgen door het taakproces op te sommen.
$ s9s job --list
Databasetoegang
U kunt de databaseconfiguratie controleren om de toegestane toegang te valideren:
$ 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'
...
Waar ID het Cluster-ID-nummer is, zijn IP_ADDRESS en PORT het IP-adres en de poort van uw database.
Gebruikersaccounts
U kunt de gebruikersaccounts in het cluster weergeven:
$ 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
Waar ID het Cluster-ID-nummer is.
Installatie en configuratie
U kunt nieuwe clusters maken, nieuwe databaseknooppunten toevoegen of zelfs de bestaande configuraties in uw cluster wijzigen:
$ 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
Waarbij IP_ADDRESS het IP-adres van uw database is, en u DBUSER, DBPASSWORD en OSUSER moet vervangen voor respectievelijk uw databasereferenties en besturingssysteemgebruiker.
Auditing en logboekregistratie
U kunt controlelogboekregistratie inschakelen vanaf de opdrachtregel met de volgende opdracht:
$ s9s cluster --setup-audit-logging --cluster-id=ID
Waar ID het Cluster-ID-nummer is:dan kunt u de logboeken controleren met de controlelogboekinformatie.
Upgrades
U kunt rapporten maken om te zien of u uw databases of besturingssysteempakketten moet upgraden.
$ s9s report --cluster-id=ID --type=upgrade --create
Waar ID het Cluster-ID-nummer is:op basis van dit rapport kunt u onderhoudsvensters plannen om de upgrades uit te voeren, en dit kan ook worden gedaan vanuit ClusterControl.
Query-monitor
Je kunt het proces op je nodes controleren en ze filteren op de query, bron en meer.
$ s9s process \
--top-queries \
--cluster-id=ID \
--update-freq=1 \
'INSERT*'
$ s9s process \
--list-queries \
--cluster-id=ID \
--client='IP_ADDRESS:*' \
'INSERT*'
Bewaking
Je hebt verschillende opties om je systemen vanaf hier te bewaken. U kunt de status van alle clusters controleren, een ervan controleren of zelfs de alarmen in realtime controleren.
$ 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
...
Operatierapporten
U kunt operationele rapporten maken en deze controleren vanaf de opdrachtregel. Hetzelfde rapport is beschikbaar in de gebruikersinterface van ClusterControl.
$ s9s report --cluster-id=ID --type=default --create
Dit waren slechts enkele basisvoorbeelden om te zien wat voor soort dingen u kunt doen met de ClusterControl CLI. Voor meer informatie over de tool kun je de officiële documentatie raadplegen.
Conclusie
Er is altijd een risico om gehackt te worden, maar u kunt de kwetsbaarheidskloof op uw PostgreSQL-cluster dichten door de bovengenoemde punten te controleren. Om deze taak veel gemakkelijker te maken, kunt u de ClusterControl UI gebruiken of zelfs de controles automatiseren met de ClusterControl CLI. Het kan ook worden geïntegreerd met externe tools zoals Ansible, Puppet en meer.