MongoDB adalah database dokumen NoSQL yang bebas dan open source yang biasa digunakan dalam aplikasi web modern. Tutorial ini akan membantu Anda mengatur MongoDB di server Anda untuk digunakan dalam lingkungan aplikasi produksi. Anda akan menginstal MongoDB dan mengkonfigurasi aturan firewall untuk membatasi akses ke MongoDB.
Apa yang saya butuhkan ?
Untuk mengikuti panduan ini, ada beberapa hal yang harus anda penuhi, diantaranya :
- Satu server Debian 8, termasuk pengguna sudo non-root (user biasa).
- Seorang pengguna sudo non-root.
Langkah 1. Instal MongoDB
MongoDB sudah termasuk dalam repositori paket Debian, namun repositori MongoDB resmi memberikan versi paling mutakhir dan merupakan cara yang disarankan untuk menginstal perangkat lunak. Pada langkah ini, kami akan menambahkan repositori resmi ini ke server kami.
Debian memastikan keaslian paket perangkat lunak dengan memverifikasi bahwa mereka ditandatangani dengan kunci GPG, jadi kami harus mengimpor kunci untuk reparasi MongoDB resmi.
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
Setelah berhasil mengimpor kunci, Anda akan melihat:
Output
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)
Selanjutnya, kita harus menambahkan rincian repositori MongoDB sehingga kita bisa mengetahui darimana cara mendownload paketnya.
Terbitkan perintah berikut untuk membuat daftar file untuk MongoDB.
$ echo "deb http://repo.mongodb.org/apt/debian jessie/mongodb-org/3.4 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
Setelah menambahkan rincian repositori, perbarui daftar paket:
$ sudo apt-get update
Sekarang instal paket MongoDB itu sendiri dengan perintah berikut:
$ sudo apt-get install -y mongodb-org
Ini menginstal versi stabil MongoDB terbaru, bersama dengan beberapa alat manajemen yang berguna untuk server MongoDB.
Setelah menginstal MongoDB, mulailah layanan ini, dan pastikan hal itu dimulai saat server Anda melakukan reboot:
$ sudo systemctl enable mongod.service $ sudo systemctl start mongod
Kemudian gunakan systemctl untuk memeriksa apakah layanan telah dimulai dengan benar:
$ sudo systemctl status mongod
Anda harus melihat output berikut, menunjukkan bahwa layanan sedang berjalan:
Output
● mongod.service - High-performance, schema-free document-oriented database
Loaded: loaded (/lib/systemd/system/mongod.service; enabled)
Active: active (running) since Tue 2017-02-28 19:51:51 UTC; 7s ago
Docs: https://docs.mongodb.org/manual
Main PID: 8958 (mongod)
CGroup: /system.slice/mongod.service
└─8958 /usr/bin/mongod --quiet --config /etc/mongod.conf
Feb 28 19:51:51 cart-61037 systemd[1]: Started High-performance, schema-free document-oriented database.
Sekarang MongoDB berhasil dipasang, mari kita amankan dengan firewall perangkat lunak.
Langkah 2. Mengamankan MongoDB dengan Firewall
Dalam kebanyakan kasus, MongoDB harus diakses hanya dari lokasi tepercaya tertentu, seperti server lain yang meng-host aplikasi. Untuk menyelesaikan tugas ini, Anda dapat mengizinkan akses pada port default MongoDB saat menentukan alamat IP dari server lain yang secara eksplisit akan diizinkan untuk terhubung. Kami akan menggunakan firewall iptables untuk menyiapkan peraturan ini, serta beberapa peraturan lainnya untuk mengamankan sistem.
Sebelum kita menulis peraturan, pasang paket iptables-persistent agar Anda dapat menyimpan peraturan yang Anda buat. Dengan cara ini aturan akan diterapkan setiap kali Anda me-restart server Anda. Jalankan perintah ini:
$ sudo apt-get install iptables-persistent
Selanjutnya, hapus peraturan yang ada yang mungkin ada, untuk jaga-jaga:
$ sudo iptables -F
Kemudian tambahkan aturan yang memungkinkan koneksi mapan untuk terus berbicara. Dengan cara ini koneksi SSH yang ada saat ini tidak akan terganggu:
$ sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Selanjutnya, pastikan akses SSH diperbolehkan:
$ sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Jika Anda berencana untuk terhubung ke MongoDB dari server jauh, tambahkan peraturan ini yang akan memungkinkan akses ke port default MongoDB dari server aplikasi Anda:
$ sudo iptables -A INPUT -s your_other_server_ip -p tcp --destination-port 27017 -m state --state NEW,ESTABLISHED -j ACCEPT $ sudo iptables -A OUTPUT -d your_other_server_ip -p tcp --source-port 27017 -m state --state ESTABLISHED -j ACCEPT
Selanjutnya, tambahkan rules yang memungkinkan lalu lintas pada perangkat loopback lokal:
$ sudo iptables -A INPUT -i lo -j ACCEPT $ sudo iptables -A OUTPUT -o lo -j ACCEPT
Terakhir, ubah firewall policy untuk menjatuhkan semua lalu lintas lainnya:
$ sudo iptables -P INPUT DROP
Pastikan rules tadi berjalan dengan benar. Ketikan perintah dibawah ini untuk memastikanya.
$ sudo iptables -S
Anda akan melihat output yang mirip seperti ini:
Output
-P INPUT DROP
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -s your_other_server_ip/32 -p tcp -m tcp --dport 27017 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A OUTPUT -d your_other_server_ip/32 -p tcp -m tcp --sport 27017 -m state --state ESTABLISHED -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
Terakhir, simpan rules:
$ netfilter-persistent save
Langkah 3 – Mengaktifkan Akses ke Server Eksternal (Opsional)
Versi MongoDB saat ini tidak menerima koneksi eksternal secara default. Jika Anda membatasi akses ke alamat IP tertentu dengan firewall, Anda dapat mengubah konfigurasi MongoDB untuk menerima koneksi jarak jauh.
Edit file konfigurasi MongoDB:
$ sudo nano /etc/mongod.conf
Cari bagian ini:
mongod.conf
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1
Mongo sedang mendengarkan alamat loopback lokal, jadi hanya akan menerima koneksi lokal. Ubah nilai bindIp sehingga menyertakan alamat IP dari server MongoDB Anda:
mongod.conf
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1, your_server_ip
Simpan file dan keluar dari editor.
Kemudian restart MongoDB untuk menerapkan perubahan:
$ sudo systemctl restart mongod
Mesin remote Anda sekarang harus bisa terhubung. Namun, Anda mungkin juga ingin mengaktifkan otentikasi untuk mengamankan basis data Anda lebih jauh lagi.