Data ERP Anda Adalah Aset Bisnis
Di dalam ERP tersimpan hampir seluruh isi "dapur" perusahaan: data pelanggan, harga jual, stok, laporan keuangan, hingga gaji karyawan. Kalau sistem ini dibobol atau lumpuh, dampaknya langsung terasa: transaksi berhenti, data bocor ke pesaing, dan kepercayaan pelanggan turun.
Begitu ERP bisa diakses dari internet (supaya tim bisa bekerja dari mana saja), sistem itu juga terlihat oleh bot dan peretas yang setiap hari mencari celah. Karena itu, ERP yang aman bukan hanya soal password yang kuat, tetapi juga soal penjaga di depan pintu
Apa Itu WAF? Bayangkan Satpam di Pintu Gedung
WAF (Web Application Firewall) bekerja seperti satpam di pintu masuk kantor. Setiap tamu (request dari internet) diperiksa dulu: tamu biasa dipersilakan masuk, tamu yang mencurigakan ditolak sebelum sempat sampai ke ruangan. Ruangannya adalah ERP Odoo Anda.
BunkerWeb adalah salah satu WAF open source (gratis) yang bisa dipasang di depan Odoo. Berikut ancaman yang dihadangnya:
Ancaman | Dampak ke bisnis | Cara BunkerWeb mencegah |
|---|---|---|
Tebak password berulang (brute force) | Akun admin diambil alih, data dicuri atau dihapus | Membatasi jumlah percobaan login per detik |
Akses ke halaman pengelola database | Database bisa di-backup, dihapus, atau diganti orang luar | Menutup halaman itu dari internet |
Bot dan scanner celah keamanan | Server sibuk melayani bot, celah ditemukan lebih cepat | Memblokir IP yang berperilaku mencurigakan |
SQL injection dan XSS lewat form | Data bocor atau tampilan website disusupi | Memeriksa isi request dengan aturan OWASP |
Banjir request (DDoS ringan) | ERP lambat atau tidak bisa dipakai karyawan | Membatasi request per pengunjung |
Cara Kerja WAF di Depan Odoo

Semua akses dari internet masuk lewat BunkerWeb. Odoo dan database berada di belakangnya dan tidak bisa diakses langsung.
Checklist untuk Pemilik Bisnis
Anda tidak perlu memasang WAF sendiri. Cukup pastikan vendor atau tim IT bisa menjawab "ya" untuk pertanyaan berikut:
- Apakah ERP kita dilindungi WAF, bukan hanya reverse proxy biasa?
- Apakah halaman pengelola database Odoo sudah ditutup dari internet?
- Apakah percobaan login berulang otomatis diblokir?
- Apakah akun admin memakai password kuat dan verifikasi dua langkah (2FA)?
- Apakah database di-backup otomatis setiap hari dan pernah diuji pemulihannya?
- Apakah Odoo dan modulnya rutin diperbarui?
- Apakah ada yang memantau log serangan secara berkala?
Kalau ada yang dijawab "belum", itu prioritas yang perlu dibahas dengan tim IT atau vendor ERP Anda.
Bagian 2: Untuk Tim IT dan IT Manager
Bagian berikut menjelaskan pemasangan BunkerWeb di depan Odoo memakai Docker.
Langkah 1: Docker Compose
Komponen yang dipakai:
Service | Image | Fungsi |
|---|---|---|
bunkerweb | bunkerity/bunkerweb-all-in-one:1.6.17 | WAF, scheduler, dan Web UI dalam satu container |
bw-db | postgres:16 | Menyimpan konfigurasi BunkerWeb |
odoo | odoo:19 | Aplikasi ERP |
db | postgres:16 | Database Odoo (terpisah dari bw-db) |
Compose ini sengaja minimal: hanya koneksi database. Semua pengaturan situs dilakukan lewat Web UI (Langkah 3), sehingga tim IT bisa mengelolanya tanpa restart container.
services:
bunkerweb:
image: bunkerity/bunkerweb-all-in-one:1.6.17
container_name: bunkerweb-aio
depends_on: [bw-db]
ports:
- "80:8080/tcp"
- "443:8443/tcp"
- "443:8443/udp"
environment:
DATABASE_URI: "postgresql://bunkerweb:ganti-password-bw@bw-db:5432/db"
volumes:
- bw-storage:/data
networks: [bw-services, bw-db]
restart: unless-stopped
bw-db:
image: postgres:16
environment:
POSTGRES_USER: bunkerweb
POSTGRES_PASSWORD: ganti-password-bw
POSTGRES_DB: db
volumes:
- bw-db-data:/var/lib/postgresql/data
networks: [bw-db]
restart: unless-stopped
odoo:
image: odoo:19
depends_on: [db]
volumes:
- odoo-data:/var/lib/odoo
- ./config:/etc/odoo
- ./addons:/mnt/extra-addons
networks: [bw-services, odoo-db]
restart: unless-stopped
db:
image: postgres:16
environment:
POSTGRES_USER: odoo
POSTGRES_PASSWORD: ganti-password-kuat
POSTGRES_DB: postgres
volumes:
- odoo-db-data:/var/lib/postgresql/data
networks: [odoo-db]
restart: unless-stopped
volumes:
bw-storage:
bw-db-data:
odoo-data:
odoo-db-data:
networks:
bw-services:
name: bw-services
bw-db:
name: bw-db
odoo-db:
name: odoo-db
- Odoo tidak membuka port ke host, jadi tidak bisa diakses langsung lewat IP:8069.
- Database BunkerWeb dan database Odoo berada di network terpisah dan tidak terbuka ke internet.
Langkah 2: odoo.conf
[options] db_host = db db_user = odoo db_password = ganti-password-kuat admin_passwd = master-password-yang-berbeda proxy_mode = True list_db = False workers = 4 gevent_port = 8072
- proxy_mode = True: Odoo membaca https dan IP asli pengunjung dari BunkerWeb.
- list_db = False: Database Manager disembunyikan (lapisan kedua selain blokir di WAF).
- workers harus lebih dari 0 agar websocket di port 8072 aktif.
Langkah 3: Atur Odoo lewat Web UI BunkerWeb
- Arahkan DNS domain Odoo (misalnya erp.contoh.co.id) dan domain Web UI (misalnya waf.contoh.co.id) ke IP server.
- Jalankan docker compose up -d.
- Buka https://IP-SERVER/setup. Wizard akan meminta akun admin dan domain untuk Web UI. Isi dengan waf.contoh.co.id.
- Login ke Web UI, lalu aktifkan 2FA di menu profil.
- Buka Services → Create, isi domain erp.contoh.co.id, lalu atur setting sesuai tabel di bawah.
Kebutuhan | Setting BunkerWeb | Nilai rekomendasi |
|---|---|---|
Teruskan ke Odoo | REVERSE_PROXY_URL / REVERSE_PROXY_HOST | / → http://odoo:8069 |
Websocket (Discuss, notifikasi) | REVERSE_PROXY_URL_1 / REVERSE_PROXY_HOST_1 / REVERSE_PROXY_WS_1 | /websocket → http://odoo:8072, WS = yes |
Laporan dan import besar | REVERSE_PROXY_READ_TIMEOUT / REVERSE_PROXY_SEND_TIMEOUT | 720s |
Upload lampiran | MAX_CLIENT_SIZE | 100m |
SSL | AUTO_LETS_ENCRYPT | yes |
Proteksi login | LIMIT_REQ_URL_1 / LIMIT_REQ_RATE_1 | /web/login → 1r/s |
Tutup Database Manager | BLACKLIST_URI | ^/web/database |
Aturan OWASP | USE_MODSECURITY / USE_MODSECURITY_CRS | yes |
Blokir scanner | USE_BAD_BEHAVIOR | yes |
IP kantor tidak pernah diblokir | WHITELIST_IP | IP publik kantor |
Nama setting di tabel ini sama dengan environment variable BunkerWeb. Tim yang lebih suka konfigurasi sebagai kode bisa menuliskannya langsung di docker-compose.yml (dengan MULTISITE: "yes" dan awalan domain, misalnya erp.contoh.co.id_REVERSE_PROXY_HOST). Pilih salah satu cara untuk setiap domain, jangan dicampur, karena nilai di compose bisa menimpa perubahan dari Web UI saat container dibuat ulang.
Langkah 4: Tes dan Pantau
# Odoo bisa dibuka lewat HTTPS (hasil: 200) curl -sI https://erp.contoh.co.id/web/login | head -n1 # Database Manager diblokir (hasil: 403) curl -sI https://erp.contoh.co.id/web/database/manager | head -n1 # Pola SQL injection diblokir (hasil: 403) curl -sI "https://erp.contoh.co.id/?id=1%27%20OR%20%271%27=%271" | head -n1 # Port Odoo tidak terbuka (hasil: timeout / refused) curl -m 5 -sI http://IP-SERVER:8069/web/login
Lalu uji sebagai user biasa: login, simpan record, kirim pesan di chatter, upload lampiran, dan pastikan notifikasi Discuss muncul real-time. Request yang diblokir bisa dilihat di Web UI pada menu Reports.
Tips agar User Tidak Ikut Terblokir
Error 403 saat menyimpan data atau mengedit website. Isi email dan halaman website berisi HTML, sehingga aturan OWASP kadang salah mengira itu serangan XSS. Cari ID rule yang terpicu di Reports, lalu buat pengecualian hanya untuk rule dan path itu (menu Configs, tipe modsec). Contoh:
SecRule REQUEST_URI "@rx ^/(web/dataset|mail|web_editor|html_editor)/" \ "id:10001,phase:1,pass,nolog,ctl:ruleRemoveByTag=attack-xss"- Error 429 Too Many Requests. Backend Odoo memuat banyak file sekaligus. Jangan memasang limit ketat untuk seluruh situs; cukup batasi /web/login.
- Antibot dan blokir negara. Jangan aktifkan untuk seluruh situs kalau Odoo juga menjalankan website publik, supaya Googlebot tetap bisa merayapi dan SEO tidak rusak.
- Integrasi API (marketplace, payment gateway, aplikasi mobile). Masukkan IP server integrasi ke WHITELIST_IP.
- Backup. Selain database Odoo, backup juga database bw-db, karena semua konfigurasi BunkerWeb tersimpan di sana.
Pertanyaan yang Sering Diajukan
Ya, BunkerWeb open source dan gratis dipakai. Tersedia juga versi berbayar dengan fitur dan dukungan tambahan.
Pemeriksaan WAF menambah waktu yang sangat kecil per request dan biasanya tidak terasa oleh user.
Tidak. WAF adalah satu lapisan. Tetap perlu password kuat dan 2FA, update rutin, backup terjadwal, dan firewall server yang hanya membuka port 80, 443, dan SSH.
Bisa. BunkerWeb bekerja di level web, jadi tidak bergantung pada edisi atau versi Odoo.
NPM tidak memiliki WAF bawaan. BunkerWeb bisa menggantikan NPM untuk domain Odoo, dengan Web UI yang sama mudahnya.
Kesimpulan
ERP yang aman membutuhkan penjaga di depan pintu. BunkerWeb memberikan perlindungan itu secara gratis: menutup halaman sensitif, menghentikan tebakan password, dan memblokir serangan web umum. Bagi pemilik bisnis, cukup pastikan checklist di atas terpenuhi. Bagi tim IT, pemasangannya bisa selesai dalam satu file Docker Compose dan beberapa klik di Web UI.
Ingin ERP Odoo yang aman tanpa repot mengurus server? Integra by Infinys menyediakan implementasi Odoo, hosting ERP cloud di data center Indonesia, serta managed service termasuk WAF, backup, dan pemantauan. Untuk lebih detil mengenai hal ini bisa email kami ke sales@isi.co.id