Terdapat banyak program untuk menyerang dengan mencari celah kesalahan umum dalam konfigurasi database sehingga penyerang berpeluang menemukan database server. Tutorial ini akan menjelaskan bagaimana mengurangi permasalahan tersebut.
Kita ibaratkan server sebagai sebuah toko, jika kita setting konfigurasi menerima semua port maka itu sama saja dengan memberi tanda “buka” pada toko kita, dalam database adalah network kita, sehingga script otomatis dapat menemukan keberadaan server.
Dalam tutorial ini kita akan belajar bagaimana menghapus Postgresql sebagai akses yang dapat diakses dari public.
Pada tutorial ini kita simulasikan dengan menggunakan 2 server ubuntu, satu untuk menjadi server sementara satunya menjadi client, yang mana masing-masing memiliki sudoers dan firewallnya di-enable.
Pada dasarnya Postgresql yang terinstall di ubuntu secara default hanya menerima akses localhost, untuk mengubahnya agar bisa menerima akses dari luar bisa dilakukan dengan mengganti paramater listen_address pada postgresql.conf, namun itu artinya kita memberi tahu kepada penyerang keberadaan server.
Dengan adanya pg_hba.conf kita terbantu untuk membatasi akses dari publik. Pg_hba.conf hanya menerima koneksi dari socket domain unix/linux.
<pre>
# Put your actual configuration here
# ———————————-
#
# If you want to allow non-local connections, you need to add more
# “host” records. In that case you will also need to make PostgreSQL
# listen on a non-local interface via the listen_addresses
# configuration parameter, or via the -i or -h command line switches.
# DO NOT DISABLE!
# If you change this first entry you will need to make sure that the
# database superuser can access the database using some other method.
# Noninteractive access to all databases is required during automatic
# maintenance (custom daily cronjobs, replication, and similar tasks).
#
# Database administrative login by Unix domain socket
local all postgres peer
# TYPE DATABASE USER ADDRESS METHOD
# “local” is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
</pre>
Konfigurasi di atas hanya berlaku untuk lokal, sehingga agar bisa diakses oleh user yang menggunakan remote connection perlu beberapa langkah sebagai upaya keamanan. Berikut adalah langkah yang perlu dilakukan untuk konfigurasi remote connection agar tetap secure.
1. Tambahkan user dan database baru
Penambahan dilakukan dengan menggunakan client :
<pre> host $ sudo -i -u postgres psql</pre>
Selanjutkan kita tambahkan user dan passwordnya :
<pre>postgres=# CREATE USER sammy WITH PASSWORD ‘password’;</pre>
Setelah berhasil membuat user kita akan membuat database baru dan memberi akses grant ke user yang baru dibuat
<pre> postgres=# CREATE DATABASE sammydb OWNER sammy; </pre>
2. Konfigurasi UFW
Sebelum melakukan konfigurasi UFW, kita cek terlebih dahulu UFWnya
<pre> host$ sudo ufw status </pre>
Jika outputnya adalah inactive kita perlu aktifkan terlebih dahulu
<pre> host$ sudo ufw enable </pre>
Jika sudah selesai ceklah kembali status ufw dan pastikan sudah allow ssh
<pre> host$sudo ufw openSSH </pre>
Selanjutnya ijinkan ip client bisa menuju ke port Postgresql
<pre> host$ sudo ufw allow from client_ip_address to any port 5432 </pre>
Jika sudah, cek kembali status ufw
3. Konfigurasi host yang diijinkan
Edit pg_hba.conf dan tambahkan baris berikut :
<pre> host sammydb sammy client_ip_address/32 md5 </pre>
4. Konfigurasi Listen_address
Set listen_address menjadi seperti berikut :
listen_addresses = ‘localhost,server_ip_address’
5. Restart database
Apa yang sudah kita konfigurasi tidak akan secara otomatis merubah sistem kita, sehingga diperlukan restart database server.
<pre> host$ sudo systemctl restart postgresql </pre>
Setelah berhasil melakukan restart, database kita akan menjadi lebih secure. Jika Anda membutuhkan konsultasi, maintenance, ataupun konfigurasi database, feel free to discuss dengan kami di info@i-3.co.id