Postgres: pg_hba.conf – ograniczanie połączeń z określonych IP

8-lis-2020

Postgres można skonfigurować do przyjmowania połączeń tylko z określonych adresów IP. Służy do tego konfiguracja zapisana w pliku pg_hpa.conf.  To nie jest tak, że jeśli adres IP zostanie wprowadzony do tego pliku, to połączenie będzie po prostu nawiązywane (poza metodą „trust”). Konieczność jakiegoś uwierzytelnienia będzie zawsze obowiązywać. Plik ten należy traktować raczej jako dodatkowy front obrony. Jeśli są jakieś sieci lub adresy z których można się łączyć, to muszą tu być dodane, a jeśli chcesz żeby połączenie się nie odbywało, to albo dodaj taki adres z wpisem „reject”, albo po prostu nie dodawaj go do pliku. Modyfikacja pliku wymaga restartu serwera.

Plik jest czytany od góry do dołu i jego analiza kończy sie w momencie napotkania pierwszego pasującego wpisu. Np. konfiguracja w tej postaci:

# TYPE DATABASE USER ADDRESS METHOD

# following 2 lines were added to provoke connection failure on the local host
host all all 127.0.0.1/32 reject
host all all ::1/128 reject
# "local" is for Unix domain socket connections only
local all all scram-sha-256
# IPv4 local connections:
host all all 127.0.0.1/32 scram-sha-256
# IPv6 local connections:
host all all ::1/128 scram-sha-256
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all scram-sha-256
host replication all 127.0.0.1/32 scram-sha-256
host replication all ::1/128 scram-sha-256

spowoduje zablokowanie połączeń z adresu 127.0.0.1 lub z odpowiednika ipv6 ::1. 

Jeśli przy takiej konfiguracji pliku spróbujesz podłączyć się do serwera z lokalnego adresu dostaniesz błąd:

error: could not connect to server: FATAL:  pg_hba.conf rejects connection for host „::1”, user „postgres”, database „postgres”, SSL off

Już wiesz jak go naprawić, prawda?

Zdefiniowane ustawienia można też sprawdzić za pomocą widoku pg_hba_file_rules

Możliwe metody uwierzytelnienia to:

  • trust – hasło nie jest wymagane. Jeśli tylko nazwa użytkownika, nazwa bazy są poprawne, to połączenie będzie nawiązane
  • md5  – żąda uwierzytelnienia hasła przez md5
  • password – hasło ma być wysłane czystym tekstem
  • ident – nie wspierane na windows, wyszukuje konta z systemu operacyjnego i powiązanego z tym kontem użytkownika postgres w pliku pg_ident.conf. Jeśli powiązanie jest znalezione, to nie trzeba przesyłać hasła
  • peer – tylko systemy unixowe i tylko na lokalnym systemie. Nazwa użytkownika jest pobierana z kernela
  • cert – w oparciu o plik pg_indent.conf mapuje certyfikat klienta do konta postgres. Wspierane na wszystkich OS

Komentarze są wyłączone

Autor: Rafał Kraik