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:

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

Dodaj komentarz:

Autor: Rafał Kraik