Właściwie nigdy nie powinniśmy wystawiać portu PostgreSQL na cały świat. Komputery, które łączą się do PostgreSQL po porcie 5432, powinny być w tej samej podsieci za NATem. Wystawiając port PostgreSQL na świat, narażamy się na niebezpieczeństwo ataku sieciowego.
Poniższa instrukcja zakłada otwarcie portu do nasłuchu sieciowego przy założeniu, że PostgreSQL stoi za NATem, a serwery do niego się łączące będą go widzieć w tej samej podsieci. Należy pamiętać o otwarciu portu na poziomie samego serwera/sieci - np. w Azure.
Domyślnie PostgreSQL słucha tylko na localhost (127.0.0.1). Aby dostęp do PostgreSQL był zapewniony z sieci, musimy zmienić parametr “listen_addresses”, dodać wpis do pg_hba.conf i zrestartować klaster.
W pierwszej kolejności z poziomu użytkownika systemowego postgres logujemy się do psql i zmieniamy parametr listen_addresses:
psql
alter system set listen_addresses='*';
Parametr “listen_addresses” określa adresy interfejsów sieciowych, na których ma słuchać. Możemy podać IP konkretnych kart sieciowych lub ustawić “*”, by słuchać na wszystkich interfejsach sieciowych.
Edytujemy teraz plik pg_hba.conf znajdujący się w PGDATA:
nano /data_pg/pg_hba.conf
Następnie wprowadzamy poniższą linię. W miejsce 0/0 (słuchanie dla wszystkich adresów) możemy wstawić swoją maskę podsieci:
host all all 0/0 scram-sha-256
Wyjaśnijmy, co oznaczają kolumny w tym pliku. Pierwsza kolumna (TYPE) dotyczy rodzaju połączenia. Mogą się tu pojawić następujące wartości:
Druga kolumna (DATABASE) dotyczy bazy danych. Możemy tu wskazać konkretną bazę, podając jej nazwę, wszystkie bazy wprowadzając „all” bądź na potrzeby replikacji wpisać „replication”.
Trzecia (USER) kolumna dotyczy użytkownika. Możemy wprowadzić nazwę jakiegoś konkretnego użytkownika lub „all” dla wszystkich. Jest tam też kilka innych opcji, ale raczej rzadko używanych, więc nie zostaną w tym miejscu omówione. Zainteresowani mogą skorzystać z:: https://www.postgresql.org/docs/15/auth-pg-hba-conf.html
Czwarta kolumna (ADDRESS) dotyczy adresu sieciowego lub zakresu adresów. Możemy tu wprowadzić adres jakiegoś konkretnego hosta bądź zakres adresów. Na przykład wpis dla mojego aktualnego adresu IP wyglądałby tak: „89.65.250.248/32”. Możemy też umożliwić dostęp z dowolnego hosta w internecie, wprowadzając „0/0” lub „all” albo wprowadzić „samehost” dla wszystkich adresów IP naszego serwera bądź „samenet” dla wszystkich hostów w tej samej podsieci co serwer. Zamiast adresów IP lub ich zakresów możemy w tym miejscu podać nazwę hosta. Wszystko, co nie jest adresem ip, zakresem tych adresów bądź specjalnym słowem kluczowym, będzie traktowane jako nazwa hosta.
Piąta kolumna (METHOD) dotyczy sposobu autoryzacji sesji do serwera. Tu również jest wiele opcji. Oto najczęściej używane.
W pg_hba.conf liczy się pierwszy pasujący wpis. Jeśli żaden nie będzie pasował, następuje odrzucenie autoryzacji.
Ponieważ zmienialiśmy parametr “listen_addresess”, musimy zrestartować klaster. W przypadku zmiany tylko w pliku pg_hba.conf wystarczy przeładowanie konfiguracji za pomocą pg_reload_conf(). Przechodzimy do użytkownika z uprawnieniami do sudo i restartujemy usługę:
sudo systemctl restart postgresql-15
Po tej operacji możemy (z poziomu użytkownika systemowego postgres) podłączyć się po zewnętrznym adresie IP do klastra:
psql -U postgres -h
Sprawdzamy teraz, czy konfiguracja działa. W tym celu instalujemy narzędzie pgAdmin4 na komputerze. Po jego uruchomieniu dodajemy połączenie do serwera, klikając PPM na „Servers” znajdujący się w prawym górnym rogu i wybierając najpierw „Register”, a następnie „Server”:
W zakładce General podajemy dowolną nazwę, jaką chcemy nadać temu połączeniu.
Przechodzimy do zakładki Connection i wprowadzamy adres IP serwera oraz hasło, które ustawiliśmy za pomocą “\password” w psql. Zaznaczamy też “save password”, by nie trzeba go było podawać za każdym razem.
Następnie zapisujemy połączenie. Na liście połączeń pokaże się nowo skonfigurowane połączenie. Aby przejść do konsoli SQL, rozwijamy swoje połączenie aż do bazy “postgres” i klikamy PPM. Z menu, które się wyświetli, wybieramy Query Tool.
W edytorze, który się pojawi, wprowadzamy:
select current_timestamp;
Należy uruchomić to polecenie, wciskając F5. Powinien być taki efekt:
Komentarze (0)
Brak komentarzy...