Connecties configureren naar je PostgreSQL database.

Connecties configureren naar je PostgreSQL database, hoe doe je dat veilig?

De PostgreSQL database wordt standaard opgezet zonder dat er connecties van een andere machines mogelijk zijn. Daardoor kan er alleen connectie gemaakt worden vanaf de database host. Om een remote connecties mogelijk te maken zijn er enkele parameters die geconfigureerd moeten worden in de configuratie file: postgres.conf. Het gaat om:

  • listen_adresses
    Deze parameter bepaalt op welke adressen er geluisterd wordt. Standaard is dit localhost waardoor er alleen lokale connecties mogelijk zijn. Voor machines met meerdere netwerk interfaces kan er gekozen worden of enkele of alle interfaces gebruikt worden voor database connectiviteit.
  • port.
    De poort waarop connecties gemaakt worden, standaard is dit 5432.

Met het zetten van deze parameter is het voor de database mogelijk connecties van andere machines te ontvangen. Daarnaast heeft nog een andere configuratie file aandacht nodig: pg_hba.conf. De pg_hba.conf (HBA staat voor host-based authentication) biedt de mogelijkheid selectief machines toegang te geven tot een database/user combinatie.  De standaard configuratie is hier in hoge mate restrictief waarbij alleen lokale connecties mogelijk zijn.

Als we kijken naar de structuur van de pg_hba.conf kijken zien we dat elke entry er als volgt uit ziet:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

Elke regel geeft aan of een bepaalde connectie wel of niet mogelijk is en onder welke condities dit dan plaats moet vinden.  Als er meerdere regels toepasbaar zijn dan is de eerste toepasbare regel bepalend. De volgorde in de file doet er dus toe. Zonder passende entry is er geen connectie mogelijk.

Laten we naar de verschillende aspecten van een pg_HBA.conf en meest voorkomende waarden kijken:

  • TYPE
    Dit geeft de origine van het connectie request weer.  De belangrijkste zijn:
    • local
      dit past bij een lokale connectie op basis van Unix-domain sockets. Deze connectie is essentieel om basis beheer uit te kunnen voeren.
    • host
      Dit is de entry die alle tcp/ip gebaseerde connecties opvangt, onafhankelijk of er SSL gebruikt wordt of niet.
    • hostssl
      Dit is de entry die alle SSL connecties over tcp/ip opvangt.
    • hostnossl
      Deze entry vangt all tcp/ip connecties zonder SSL.
  • USER
    Dit deel van de entry geerft aan welke user er mag connecten. De waarde ‘all’ matcht voor alle gebruiker.
  • ADRESS
    Dit geeft aan welke machines er kunnen connecten. Dit kan met machinenaam, IP-adres, IP-range of speciaal sleutelwoord zoals ‘all’.
  • METHOD
    Geeft de authenticatie methode aan die wordt gebruikt als de rest van de connectie specificatie matcht. Er zijn verschillende mogelijkheden. De meest voorkomende zijn:
    • Reject
      Reject de connection, hiermee kan je als een firewall connectie verzoeken uitfilteren.
    • Trust
      Staat de connectie altijd toe. Hiermee is alle toegangscontrole uitgezet. Dit is  in het algemeen onwenselijk.
    • Peer
      Deze setting is alleen geschikt voor lokale connecties.  Op het moment dat de OS-userid overeenkomt met de database naam wordt de connectie toegestaan.
    • md5
      Staat de connectie toe als er een SCRAM-SHA-256 of MD5 encrypted password wordt gerbruikt.

Wat betekent dit?

Dit heeft als gevolg dat je de pg_hba.conf file zo moet specificeren dat de relevante connecties mogelijk zijn maar er toegang vanaf machines die geen noodzaak hebben met de database te verbinden onmogelijk wordt gemaakt. Het heeft geen nut in de pg_hba.conf  Het heeft geen nut toegang van specifieke users te beperken in de pg_hba.conf. Dergelijke beperkingen moeten in de database geïmplementeerd worden.
Een pg_hba.conf kan er als volgt uit zien

# TYPE	DATABASE	USER		ADDRESS			METHOD
local	all		postgres				peer
host	appdb	        appuser	        192.168.178.99		md5
host	all		all		10.10.1.128		reject
host	all		all		10.10.1.0/24		md5

Op deze manier zijn lokale connectie op basis van OS-authenticatie mogelijk.  Een specifieke host kan met een specifieke database verbinden. Gelijkertijd wordt een enkele host vanuit een subnet juist de connectie ontzegd.

Het is belangrijk deze file correct te specificeren.  Bij een nieuwe applicatie of database verbining kan het nodig zijn om de configuratie aan te passen. Het is belangrijk dit te beseffen voordat je foutmeldingen krijgt tijdens het maken van een verbinding. Zo een foutmelding kan er dan uit zien als:

psql errro: FATAL: no pg_hba.conf entry for host <>  user <> database <>, SSL off

Hopenlijk heb je wat gehad aan dit artikel over veilig connecties configureren naar je PostgreSQL database. Mocht je hulp nodig hebben of je hebt vragen n.a.v. dit artikel, laat het ons dan weten.

Veilig connecties configureren naar je PostgreSQL database.

https://nl.wikipedia.org/wiki/PostgreSQL

Scroll to Top