본문 바로가기

개발환경

PostgreSQL 접속 설정하기

728x90
반응형

우분투 22.04 에 PostgreSQL 설치하기 포스트에서 PostgreSQL 을 설치하는 방법에 대해서 알아봤는데, 설치를 했다면 접속을 해봐야 하지 않겠어?

그래서 이번에는 PostgreSQL 에 접속할 수 있도록 설정하는 방법과 접속하는 방법에 대해서 알아보려고 해.

접속 설정

현재 나는 MicroServer 의 폐쇄망 네트워크 안에 가상 시스템들을 만들고 있어. 내가 구성한 폐쇄망 네트워크의 IP 주소범위는 10.10.1.0/24 이지. 이 IP 주소 범위는 외부에서 접근할 수 없는 사설 IP 대역이야. 게다가 pfSense 라는 방화벽이 버티고 있어서 이 방화벽을 뚫지 않고는 내부 폐쇄망에 접근이 허용되지 않거든. 그만큼 보안성이 높다는 거지.

그렇다면 어떻게 폐쇄망 네트워크 안에 있는 가상 시스템에 접속할 수 있도록 할 수 있을까?

만약 폐쇄망 네트워크가 아니라 공유망 네트워크에 PostgreSQL 이 설치되어 있다면, DB 서버 외부에서 접근할 수 있도록 설정하는 방법은 이렇게 돼.

$ sudo vi /etc/postgresql/14/main/postgresql.conf


/etc/postgresql/14/main/postgresql.conf 파일을 열어서 listen_addresses 의 값을 디폴트값인 ‘localhost’ 에서 ‘*’ 로 수정하는 방법이야.

listen_addresses 가 주석처리되어 있는 경우에는 기본적으로 localhost (또는 127.0.0.1) 값이 적용되거든. 아래 대기포트 목록은 postgresql.conf 수정전의 상황이야.


이번에는 postgresql.conf 의 listen_addresses = ‘*’ 으로 수정해서 적용한 후의 대기포트 목록이야.


보다시피 127.0.0.1:5432 값이 0.0.0.0:5432 로 바뀌었지? 외부 IP 에서 5432 포트를 사용해서 접속하면 모두 받아들여진다는거지. 물론 방화벽이 열려있다는 가정하에 말이야.

그리고 pg_hba.conf 파일의 내용도 수정을 해 주어야 해.

$ sudo vi /etc/postgresql/14/main/pg_hba.conf


pg_hba.conf 파일은 클라이언트 연결 제어 내용을 관리하는 파일인데, IPv4 local connections: 영역이 외부에서 들어오는 연결을 제어하는 내용이야.

초기값으로는 127.0.0.1/32 와 같이 해당 서버에 대해서만 연결이 가능하도록 설정되어 있는데, 외부에서 들어오는 접속도 허용해야 하기 때문에 0.0.0.0/0 으로 수정을 해준거지.

여기까지 수정했다면 postgresql 서비스를 재시작시켜줘야 하지.

$ sudo systemctl restart postgresql

이제 내부망에 존재하는 다른 PC에서 PostgreSQL 서버에 접속은 가능해졌어(DBeaver 프로그램을 사용해서 연결을 테스트해봤지).

DB명과 사용자계정은 우분투 22.04 에 PostgreSQL 설치하기 포스트에서 생성한 정보를 활용했어.
DBName : db01, Username : userid01, Password : userid01_pw01


그런데, MicroServer 환경에서는 pfSense 방화벽에 5432 포트가 허용 목록에 들어있지 않아서 외부로부터의 접속이 불가능한 상황이지. 그렇다면 pfSense 방화벽이 5432 포트에 대한 포트포워딩 규칙을 추가하여, 5432 포트를 postgres-ubuntu 서버로 연결시키면 되겠네.

일단 pfSense 방화벽에 포트포워딩 규칙을 추가해볼께.

Firewall / NAT 메뉴로 이동한 다음 “Port Forward” 탭을 선택한 뒤 아래쪽의 “Add” 버튼을 눌러서 추가하면 돼.


TCP 프로토콜에 대해서 5432 포트로 들어오는 패킷을 10.10.1.11 (postgres-ubuntu) 주소의 5432 포트로 연결해준다는 설정이야. Description 에는 이 규칙을 이해할만한 설명을 기록해주면 돼.

이제 외부에서 postgresql 서버에 접속이 가능해졌는지를 확인해보자.

접속 테스트

DBeaver 를 실행시켜서 연결하고자 하는 서버주소로 pfSense 의 외부 IP 주소(192.168.219.254)를 기록해주면 돼. postgres-ubuntu 에 할당된 내부 IP 주소인 10.10.1.11 로 입력하게 되면 네트워크 대역대가 달라서 아예 접근이 안되는건 잘 이해할거야.


그런데 이렇게 설정해 놓는건 보안상 위험해. 나만 이 DB서버에 접근할 수 있는게 아니라 전세계 인터넷에서 이 서버에 접근이 가능하게 되지. 내가 DBeaver 에서 pfSense 서버에 할당된 192.168.219.254 라는 사설 IP 주소를 사용했지만, pfSense 는 웹서비스를 위해서 도메인으로 연결될테고 IP 주소가 도메인과 연결되는 순간 PostgreSQL 서버는 외부 인터넷 세계와 연결이 되어 버릴거야.

접속 보안

그래서 pfSense 의 5432 포트포워딩 규칙은 제거해서 5432 포트가 직접 PostgreSQL 서버로 연결되지 않도록 설정하는게 바람직하지.

포트포워딩 규칙을 삭제하더라도 외부에서의 접속이 가능하도록 설정해 둔 상태이기 때문에 내부 폐쇄망 안에 있는 서버들이 PostgreSQL 서버에 접속하는건 가능해.

그러면 PostgreSQL 서버에 접속해서 DB 작업을 해야 할때는 어떻게 해야 하냐고? 조금 불편하더라도 VPN 을 연결해서 마치 내부망에 존재하는 PC처럼 10.10.1.X 대역의 IP 에 접근되도록 구성하면 돼.

VPN 을 구성하는 과정은 다른 포스트에서 자세하게 다루어볼 예정이야. (준비되면 알려줄께)

반응형