Postgresql

Configure Postgres Remote Connection

Pada umumnya ketika selesai install Postgres default konfigurasinya bound ke “localhost”, contohnya :

$ netstat -nlt
Proto Recv-Q Send-Q Local Address     Foreign Address	State
tcp        0      0 0.0.0.0:443       0.0.0.0:*        	LISTEN
tcp        0      0 127.0.0.1:11211   0.0.0.0:*        	LISTEN
tcp        0      0 0.0.0.0:80        0.0.0.0:*        	LISTEN
tcp        0      0 0.0.0.0:22        0.0.0.0:*        	LISTEN
tcp        0      0 127.0.0.1:5432    0.0.0.0:*        	LISTEN
tcp        0      0 127.0.0.1:3737    0.0.0.0:*        	LISTEN
tcp6       0      0 :::22             :::*             	LISTEN

Dari hasil netstat di atas, kita ketahui port 5432 bounding ke 127.0.0.1 yang artinya koneksi hanya dapat di terima dari dalam OS/Mesin. Setiap connection request dari luar OS/Mesin akan di reject. Bisa dibuktikan menggunakan telnet dari luar OS/Mesin di port 5432.

$ telnet 107.170.11.79 5432
Trying 107.170.11.79...
telnet: connect to address 107.170.11.79: Connection refused
telnet: Unable to connect to remote host

Configuring postgresql.conf

Agar bisa di manage dari luar mesin, kita perlu menambahkan config di file postgresql.conf. Lokasi file postgresql.conf nya di setiap system akan berbeda-beda tetapi kita bisa cari menggunakan find.

$ find / -name "postgresql.conf"
/var/lib/pgsql/9.4/data/postgresql.conf

Open file posgresql.conf dan repolace baris di bawah ini.

listen_addresses = 'localhost'

Dengan :

listen_addresses = '*'

Sekarang restart postgres service.

/etc/rc.d/init.d/postgresql restart 

Jalan kembali netstat untuk melihat listen port.

$ netstat -nlt
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 127.0.0.1:11211         0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:2812          0.0.0.0:*               LISTEN
tcp6       0      0 ::1:11211               :::*                    LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN
tcp6       0      0 :::5432                 :::*                    LISTEN
tcp6       0      0 ::1:25                  :::*                    LISTEN

disini kita bisa lihat “Local Address” untuk port 5432 telah berubah menjadi 0.0.0.0

Configure pg_hba.conf

Sekarang kita coba kembali remote postgresql server menggunakan cmd “psql”.

$ psql -h 107.170.158.89 -U postgres
psql: could not connect to server: Connection refused
	Is the server running on host "107.170.158.89" and accepting
	TCP/IP connections on port 5432?

Ternyata “Refused”, agar postgresql menerima remote cmd kita perlu menambahkan configuration di file pg_hba.conf.

Tambahkan configuration di bawah ini pada akhir baris pg_hba.conf.

host    all             all              0.0.0.0/0	md5
host    all             all              ::/0           md5

md5 pada configuration di atas berarti password perlu di provided. Jika di clinet tidak mau menggunakan password bisa di rubah “md5” menjadi “trust”.

Restart kembali postgresql service, dan coba kembali connect.

$ psql -h 107.170.158.89 -U postgres
Password for user postgres:
psql (9.4.1, server 9.4.5)
Type "help" for help.

postgres=# \l

Sekarang postgresql bisa connect secara remote.

Perhatian, untuk server production harus di lengkapi extra layer security seperti di atas.

Leave a Comment