Dostęp do klastra z sieci

Domyślnie klaster PostgreSQL dostępny jest tylko z lokalnego hosta. Nie ma możliwości dostępu do niego z innych hostów. W tym rozdziale zajmiemy się umożliwieniem dostępu z całej sieci lub z wybranych hostów.

Aby ten efekt osiągnąć musimy wykonać następujące rzeczy:

  1. Wprowadzić zmianę w pliku postgresql.conf aby klaster nasłuchiwał połączeń spoza lokalnego kosta

  2. Wprowadzić zmianę w pliku pg_hba.conf , a konkretniej dodać regułę która pozwoli na dostęp z wybranych hostów

  3. Przeładować konfigurację

  4. Zadbać o to by nie blokował nas firewall.

Zarówno plik postgresql.conf jak i pg_hba.conf znajdują się w systemie CentOS w katalogu w którym znajdują się też pliki danych tj. /var/lib/pgsql/9.4/data

W pliku postgresql.conf odnajdujemy taki fragment:

i linijkę zawierającą parametr listen_adddresses po pierwsze odkomentowujemy, po drugie w miejsce localhost wprowadzamy *

Poniżej widać też konfigurację portu nasłuchu, który również możemy przy okazji zmienić. Dopóki linijka z portem jest zakomentowana, serwer i tak będzie chodził na domyślnym porcie 5432.

Otwieramy teraz plik pg_hba.conf i wprowadzamy linijkę o kształcie widocznym na samym dole poniższej ilustracji.

Taka konfiguracja sprawi, że dostęp do bazy będzie zewsząd. Pierwszy parametr „host” określa połączenie sieciowe, drugi bazę/bazy danych do których dostęp konfigurujemy, trzeci użytkowników, czarty adresy sieciowe lub podsieć, a piąty metodę autoryzacji. Wartość „md5” oznacza, że logowanie będzie się odbywało w sposób zaszyfrowany. Dla przykładu można też wprowadzić „password”, ale będzie to oznaczało przesyłanie niezaszyfrowanego hasła. Wartość „trust” oznacza logowanie bez autoryzacji. Gdybyśmy zechcieli pozwolić na dostęp tylko z sieci lokalnej, nasz wpis powinien wyglądać przykładowo tak:

host all all 192.168.0.0/24 md5

Konfiguracja wprowadzona. Przyszedł więc czas na przeładowanie ustawień. W tym celu wywołujemy polecenie

/usr/pgsql-9.4/bin/pg_ctl -D /var/lib/pgsql/9.4/data/ reload

Taki sposób przeładowania z jednej strony nie powoduje restartu klastra i nie zrywa połączeń, jednak przeładowanie konfiguracji może potrwać nawet kilka minut.

Alternatywnie możemy zatrzymać i uruchomić ponownie klaster w ten sposób z poziomu użytkownika postgres:

/usr/pgsql-9.4/bin/pg_ctl -D /var/lib/pgsql/9.4/data/ stop

/usr/pgsql-9.4/bin/pg_ctl -D /var/lib/pgsql/9.4/data/ start

 

lub z roota:

/etc/init.d/postgresql-9.4 restart

albo

service postgresql-9.4 restart

Po tej operacji możesz przy użyciu narzędzia nmap sprawdzić z innego hosta czy port jest otwarty:

Ten artykuł jest elementem poniższych kursów: