---
title: "Cara Mengunci Redis dan MongoDB agar Tidak Terbuka Publik"
description: "Kunci Redis dan MongoDB di VPS: bind ke localhost, wajibkan password atau ACL, tutup port di firewall, lalu uji dari luar."
url: "https://nivelva.com/insight/cara-mengunci-redis-mongodb-tidak-terbuka-publik"
category: "Keamanan/Cyber Security"
tags: ["redis","mongodb","keamanan database","firewall","vps"]
author: "Theresia Candiawan"
published: "2026-11-07T04:48:00+07:00"
updated: "2026-11-07T04:48:00+07:00"
language: "id"
publisher: "Nivelva (https://nivelva.com)"
---

# Cara Mengunci Redis dan MongoDB agar Tidak Terbuka Publik

> **Jawaban singkat:** Redis dan MongoDB aman bila hanya mendengarkan di localhost atau jaringan privat, mewajibkan autentikasi, dan port 6379 serta 27017 ditutup firewall. Setelah diatur, uji dari komputer lain bahwa port tidak bisa dihubungi.

Pernahkah kamu mengecek apakah Redis atau MongoDB di servermu bisa dihubungi siapa saja dari internet? Kalau belum, lakukan sekarang. Database yang terbuka tanpa password adalah salah satu pintu masuk paling mudah bagi penyerang, karena tidak perlu celah canggih: cukup tersambung, lalu baca, hapus, atau tulis data.

Kabar baiknya, menguncinya tidak sulit. Prinsipnya ada tiga: database hanya mendengarkan di alamat yang perlu (biasanya `127.0.0.1`), setiap koneksi wajib login, dan port database ditutup di firewall. Panduan ini membahas langkahnya untuk Redis dan MongoDB di VPS Linux, lalu cara membuktikan bahwa keduanya benar-benar tertutup.

## Kenapa Redis dan MongoDB sering bocor?

Keduanya dirancang untuk berjalan di jaringan tepercaya. Dokumentasi resmi Redis menyebut Redis dibuat untuk diakses klien tepercaya di dalam lingkungan tepercaya, bukan untuk dibuka langsung ke internet. Masalah muncul saat konfigurasi diubah agar "gampang diakses dari mana saja", misalnya `bind 0.0.0.0` di Redis atau `bindIp: 0.0.0.0` di MongoDB, tanpa autentikasi.

Penyebab lain yang sering terjadi:

- Database dijalankan lewat Docker dengan `-p 6379:6379` atau `-p 27017:27017`, sehingga port terbuka ke semua alamat. Di banyak distro, aturan Docker juga melewati UFW.
- Firewall belum aktif sama sekali di VPS baru.
- Password lemah atau dipakai ulang dari layanan lain.
- Konfigurasi contoh dari tutorial lama disalin tanpa diperiksa.

Port yang perlu kamu waspadai: **6379** untuk Redis dan **27017** untuk MongoDB.

## Langkah mengunci Redis

### Langkah 1: Cek ke mana Redis mendengarkan

Jalankan perintah berikut di server:

```
sudo ss -tlnp | grep -E '6379|27017'
```

Kalau hasilnya `127.0.0.1:6379`, Redis hanya bisa dihubungi dari server itu sendiri. Kalau `0.0.0.0:6379` atau `*:6379`, Redis mendengarkan di semua antarmuka dan perlu segera dibatasi.

### Langkah 2: Batasi alamat bind dan pastikan protected mode aktif

Buka file konfigurasi, biasanya `/etc/redis/redis.conf` di Ubuntu dan Debian:

```
bind 127.0.0.1 -::1
protected-mode yes
```

Kalau aplikasi ada di server lain, tambahkan IP **privat** server itu saja, bukan IP publik. Protected mode adalah pengaman bawaan Redis sejak versi 3.2: bila Redis tidak punya password dan tidak dibatasi alamat bind, koneksi dari luar loopback akan ditolak. Jangan mematikannya.

### Langkah 3: Wajibkan autentikasi dengan ACL

Sejak Redis 6, kamu bisa membuat pengguna dengan hak terbatas lewat ACL. Contoh di `redis.conf`:

```
user default off
user appuser on >GantiDenganPasswordPanjangAcak ~app:* +@all -@dangerous
```

Baris pertama mematikan pengguna `default` tanpa nama. Baris kedua membuat pengguna `appuser` yang hanya boleh mengakses kunci berawalan `app:` dan tidak boleh menjalankan perintah berbahaya seperti `FLUSHALL` atau `CONFIG`. Sesuaikan pola kunci dengan aplikasimu, dan pastikan aplikasimu sudah mendukung login dengan nama pengguna. Cara lama `requirepass` masih bisa dipakai untuk satu password bersama.

Buat password panjang secara acak, misalnya dengan `openssl rand -base64 32`.

### Langkah 4: Restart dan uji login

```
sudo systemctl restart redis-server
redis-cli --user appuser --pass 'passwordmu' ping
```

Jawaban `PONG` berarti login berhasil. Coba juga `redis-cli ping` tanpa password; hasilnya harus berupa pesan `NOAUTH` atau ditolak. Nama layanan bisa berbeda (`redis` di sebagian distro).

## Langkah mengunci MongoDB

### Langkah 1: Buat pengguna admin dulu

Sebelum mengaktifkan autentikasi, buat pengguna admin agar kamu tidak terkunci di luar. Masuk dengan `mongosh` dari server, lalu:

```
use admin
db.createUser({
  user: "adminutama",
  pwd: passwordPrompt(),
  roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
})
```

Setelah itu buat pengguna khusus untuk aplikasi, dengan hak `readWrite` hanya pada database aplikasinya. Jangan pakai akun admin di aplikasi.

### Langkah 2: Aktifkan autentikasi dan batasi bindIp

Edit `/etc/mongod.conf`:

```
net:
  port: 27017
  bindIp: 127.0.0.1
security:
  authorization: enabled
```

Sejak MongoDB 3.6, `mongod` bawaan sudah mendengarkan di localhost saja. Jadi kalau di konfigurasimu tertulis `0.0.0.0`, itu hasil perubahan manual. Kalau aplikasi di server lain, tambahkan IP privatnya dipisah koma, misalnya `127.0.0.1,10.0.0.5`.

### Langkah 3: Restart dan uji

```
sudo systemctl restart mongod
mongosh "mongodb://adminutama@127.0.0.1:27017/admin"
```

Coba juga perintah `show dbs` tanpa login. Seharusnya ditolak dengan pesan butuh autentikasi.

Untuk koneksi antar-server lewat jaringan yang tidak sepenuhnya kamu kendalikan, checklist keamanan resmi MongoDB menyarankan TLS. Bila memungkinkan, lebih sederhana lagi memakai jaringan privat atau VPN antar-server.

## Tutup port di firewall

Pengaturan bind adalah lapisan pertama. Firewall adalah lapisan kedua, berjaga kalau suatu hari konfigurasi berubah. Dengan UFW di Ubuntu:

```
sudo ufw default deny incoming
sudo ufw allow OpenSSH
sudo ufw allow from 10.0.0.5 to any port 6379 proto tcp
sudo ufw enable
```

Baris ketiga hanya perlu bila ada server aplikasi lain (ganti IP-nya). Kalau semua berjalan di satu server, jangan buka 6379 atau 27017 sama sekali. Panduan lengkapnya ada di [cara setting UFW di Ubuntu 24.04](https://nivelva.com/insight/cara-setting-ufw-firewall-ubuntu-24-04-pemula).

Kalau database berjalan di Docker, petakan port ke loopback saja, misalnya `-p 127.0.0.1:6379:6379`, atau jangan petakan port sama sekali bila aplikasi ada di jaringan Docker yang sama. Detailnya dibahas di [cara mengamankan Docker di VPS](https://nivelva.com/insight/cara-mengamankan-docker-vps-port-tidak-bocor).

## Buktikan dari luar bahwa port tertutup

Jangan berhenti di "sepertinya sudah aman". Dari komputer lain (bukan server itu), jalankan:

```
nc -zv IP_PUBLIK_SERVER 6379
nc -zv IP_PUBLIK_SERVER 27017
```

Hasil yang diharapkan adalah koneksi gagal atau timeout. Kalau muncul "succeeded" atau "open", ada lapisan yang masih terbuka. Ulangi pemeriksaan setiap kali kamu mengubah konfigurasi, memasang ulang container, atau memindahkan server.

Ringkasan pengaturan yang dibahas:

| Pengaturan | Redis | MongoDB |
|:--|:--|:--|
| Port bawaan | 6379 | 27017 |
| File konfigurasi umum | /etc/redis/redis.conf | /etc/mongod.conf |
| Batasi alamat | `bind 127.0.0.1 -::1` | `bindIp: 127.0.0.1` |
| Autentikasi | ACL (`user ...`) atau `requirepass` | `authorization: enabled` |
| Pengaman bawaan | `protected-mode yes` | Bind localhost sejak 3.6 |
| Uji dari luar | `nc -zv IP 6379` | `nc -zv IP 27017` |

## Pertanyaan yang sering diajukan

### Apakah cukup memasang password tanpa mengubah bind?

Tidak disarankan. Password melindungi dari akses tanpa login, tapi port yang terbuka tetap bisa ditebak passwordnya terus-menerus. Gabungkan bind ke localhost atau IP privat, autentikasi, dan firewall.

### Bagaimana kalau aplikasi saya ada di server lain?

Hubungkan lewat jaringan privat penyedia VPS atau VPN, izinkan hanya IP server aplikasi di firewall, dan pakai TLS bila koneksi melewati jaringan publik.

### Apakah mengganti port bawaan membantu?

Sedikit mengurangi pemindaian otomatis, tapi bukan pengamanan. Pemindai bisa memeriksa semua port, jadi bind, autentikasi, dan firewall tetap wajib.

### Saya menemukan database sudah terbuka berbulan-bulan, apa yang harus dilakukan?

Tutup aksesnya dulu, lalu periksa apakah ada data yang hilang, kunci asing, atau pengguna baru yang tidak kamu kenal. Ganti semua password terkait dan ikuti [panduan respons insiden](https://nivelva.com/insight/panduan-respons-insiden-siber) bila ada tanda data diakses.

Checklist singkat sebelum selesai:

- `ss -tlnp` menunjukkan 6379 dan 27017 hanya di `127.0.0.1` atau IP privat.
- Redis memakai ACL atau `requirepass`, protected mode aktif.
- MongoDB memakai `authorization: enabled` dan pengguna aplikasi terpisah.
- Firewall menolak koneksi masuk ke port database dari internet.
- Uji `nc` dari luar menunjukkan port tertutup.

## Sumber

- <https://redis.io/docs/latest/operate/oss_and_stack/management/security/>
- <https://redis.io/docs/latest/operate/oss_and_stack/management/security/acl/>
- <https://www.mongodb.com/docs/manual/administration/security-checklist/>
- <https://www.mongodb.com/docs/manual/core/security-mongodb-configuration/>

---

Diterbitkan oleh Nivelva Insight (https://nivelva.com/insight/). Artikel ini: https://nivelva.com/insight/cara-mengunci-redis-mongodb-tidak-terbuka-publik
Kontak Nivelva: WhatsApp https://wa.me/6285111245007, email hello@nivelva.com
