Konfigurasi sistem¶
Dokumen ini mendeskripsikan langkah-langkah dasar untuk setup Odoo di production atau server yang menggunakan internet. Ini mengikuti penginstalan, dan secara umum tidak diperlukan untuk sistem development yang tidak terhubung ke internet.
Peringatan
Bila Anda ingin setup server publik, pastikan Anda memeriksa rekomendasi Keamanan kami!
dbfilter¶
Odoo adalah sistem multi-tenant: satu sistem Odoo dapat berjalan dan melayani sejumlah instance database. Odoo juga sangat mudah dikustomisasi, dengan kustomisasi (dimulai dari modul yang dimuat) tergantung pada "database saat ini".
Ini tidak merupakan masalah saat bekerja dengan backend (web client) sebagai user perusahaan yang terlogin: database dapat dipilih saat login, dan kustomisasi dimuat setelahnya.
Namun ini menjadi masalah untuk user yang tidak-login (portal, website) yang tidak terikat ke database: Odoo harus tahu database mana yang akan digunakan untuk membuat halaman website atau melakukan operasi. Bila multi-pengguna tidak digunakan ini tidak merupakan masalah, hanya ada satu database untuk digunakan, tapi bila terdapat lebih dari satu database yang dapat diakses Odoo membutuhkan peraturan untuk mengetahui mana yang harus digunakan.
Inilah salah satu kegunaan dari --db-filter
: dbfilter menentukan bagiamana database harus dipilih berdasarkan nama host (domain) yang diminta. Value adalah regular expression, biasanya termasuk nama host yang di-inject secara dinamis (%h
) atau subdomain pertama (%d
) melalui mana sistem akan diakses.
Untuk server yang hosting lebih dari satu database di production, terutama bila website
digunakan, dbfilter harus ditetapkan, bila tidak sejumlah fitur tidak akan bekerja dengan tepat.
Sampel konfigurasi¶
Hanya tunjukkan database dengan nama yang diawali dengan 'mycompany'
di file konfigurasi tetapkan:
[options]
dbfilter = ^mycompany.*$
Tunjukkan hanya database yang subdomain pertama-nya cocok setelah
www
: contohnya database "mycompany" akan ditunjukkan bila permintaan yang masuk dikirim kewww.mycompany.com
ataumycompany.co.uk
, tapi tidak untukwww2.mycompany.com
atauhelpdesk.mycompany.com
.
di file konfigurasi tetapkan:
[options]
dbfilter = ^%d$
Catatan
Menetapkan --db-filter
yang benar adalah bagian penting dalam mengamankan deployment Anda. Setelah bekerja dengan tepat dan hanya mencocokkan satu database untuk setiap nama host, sangat direkomendasikan untuk memblokir akses ke layar database manager, dan untuk menggunakan parameter startup --no-database-list
untuk mencegah menampilkan daftar database Anda, dan untuk memblokir akses ke layar manajemen database. Lihat juga keamanan.
PostgreSQL¶
Secara default, PostgreSQL hanya mengizinkan hubungan melalui koneksi UNIX socket dan loopback (dari "localhost", mesin yang sama dengan tempat server PostgreSQL diinstal).
UNIX socket dapat digunakan bila Anda ingin Odoo dan dan PostgreSQL untuk berjalan di mesin yang sama, dan merupakan default saat tidak ada host yang disediakan, tapi bila Anda ingin Odoo dan PostgreSQL untuk berjalan pada mesin yang berbeda 1 maka akan harus mendengarkan antarmuka jaringan 2, baik dengan:
Hanya menerima hubungan loopback dan gunakan SSH tunnel di antara mesin yang terdapat Odoo dan mesin yang terdapat PostgreSQL, kemudian atur Odoo untuk terhubung dengan tunnel
Terima hubungan ke mesin tempat Odoo diinstal, biasanya melalui ssl (lihat PostgreSQL connection settings untuk detail), kemudian atur Odoo untuk terhubung melalui jaringan
Sampel konfigurasi¶
Izinkan tcp connection pada localhost
Izinkan tcp connection dari 192.168.1.x network
di /etc/postgresql/<YOUR POSTGRESQL VERSION>/main/pg_hba.conf
tetapkan:
# IPv4 local connections:
host all all 127.0.0.1/32 md5
host all all 192.168.1.0/24 md5
di /etc/postgresql/<YOUR POSTGRESQL VERSION>/main/postgresql.conf
tetapkan:
listen_addresses = 'localhost,192.168.1.2'
port = 5432
max_connections = 80
Mengonfigurasi Odoo¶
Langsung siap pakai, Odoo akan terhubung ke postgres lokal melalui UNIX socket via port 5432. Ini dapat dikesampingkan menggunakan opsi database saat deployment Postgres Anda tidak lokal dan/atau tidak menggunakan penginstalan default.
Paket installer akan secara otomatis membuat user baru (odoo
) dan menetapkannya sebagai user database.
Layar manajemen database dilindungi oleh pengaturan
admin_passwd
. Pengaturan ini hanya dapat ditetapkan menggunakan file konfigurasi, dan diperiksa sebelum melakukan perubahan database. Ini sebaiknya ditetapkan ke value yang secara acak dibuat untuk memastikan pihak ketiga tidak dapat menggunakan antarmuka ini.Semua operasi database menggunakan opsi database, termasuk layar manajemen database. Agar layar manajemen database dapat bekerja, user PostgreSQL harus memilki hak
createdb
.User dapat selalu men-drop database yang mereka miliki. Agar layar manajemen database sepenuhnya non-fungsional, user PostgreSQL harus dibuat dengan
no-createdb
dan database harus dimiliki oleh user PostgreSQL yang berbeda.Peringatan
User PostgreSQL tidak boleh merupakan superuser
Sampel konfigurasi¶
terhubung ke server PostgreSQL pada 192.168.1.2
port 5432
menggunakan akun pengguna 'odoo'
dengan kata kunci 'pwd'
memfilter hanya db dengan nama yang dimulai dengan 'mycompany'
di file konfigurasi tetapkan:
[options]
admin_passwd = mysupersecretpassword
db_host = 192.168.1.2
db_port = 5432
db_user = odoo
db_password = pwd
dbfilter = ^mycompany.*$
SSL Di Antara Odoo dan PostgreSQL¶
Semenjak Odoo 11.0, Anda dapat memaksakan hubungan ssl antara Odoo dan PostgreSQL. Di Odoo db_sslmode mengendalikan ssl security hubungan dengan value yang dipilih antara 'disable', 'allow', 'prefer', 'require', 'verify-ca' atau 'verify-full'
Builtin server¶
Odoo mengikutsertakan HTTP, cron, dan server live-chat bawaan, baik yang menggunakan multi-threading atau multi-processing.
Server multi-thread adalah server lebih sederhana yang secara utama digunakan untuk development, demonstrasi, dan karena kompatibilitanya dengan beragam sistem operasi (termasuk Windows). Thread baru dibuat untuk setiap permintaan HTTP baru, bahkan untuk hubungan yang bertahan lama seperti websocket. Daemonic cron threads ekstra juga dibuat. Oleh karena limitasi Python (GIL), mereka tidak menggunakan hardware sebaik mungkin.
Server multi-thread adalah server default, juga untuk docker container. Ini dipilih dengan tidak mengikutsertakan opsi --workers
atau dengan menyetelnya ke 0
.
Server multi-processing adalah server lengkap yang secara utama digunakan untuk production. Server ini tidak memiliki kekurangan limitasi Python limitation (GIL) yang sama pada penggunaan sumber daya dan oleh karena itu menggunakan hardware sebaik mungkin. Sekelompok worker dibuat pada startup server. Permintaan HTTP baru diurutkan berdasarkan OS sampai terdapat worker yang siap untuk memproses mereka. Event-driven HTTP worker ekstra dibuat untuk live chat pada port alternatif. Cron worker ekstra juga dibuat. Process reaper yang dapat dikonfigurasi memonitor penggunaan sumber daya dan dapat mematikan/me-restart worker yang gagal.
Server multi-processing bersifat opsional. Server ini dipilih dengan menyetel opsi --workers
menjadi integer non null.
Catatan
Karena sangat dapat dikustomisasi untuk server Linux, server multi-processing tidak tersedia di Windows.
Kalkulasi jumlah worker¶
Peraturan praktis : (#CPU * 2) + 1
Cron worker membutuhkan CPU
1 worker ~= 6 user bersamaan
Kalkulasi ukuran memori¶
Kami menghitung 20% permintaan adalah permintaan berat, sementara 80% adalah permintaan sederhana
Worker berat, saat semua computed field dirancang baik, permintaan SQL dirancang baik, ... diperkirakan mengonsumsi sekitar 1 GB RAM
Worker lebih ringan, di skenario yang sama, diperkirakan mengonsumsi sekitar 150MB RAM
RAM yang Dibutuhkan = #worker * ( (rasio_worker_ringan * estimasi_ram_worker_ringan) + (rasio_worker_berat * estimasi_ram_worker_berat) )
LiveChat¶
Di multi-processing, worker LiveChat khusus secara otomatis dinyalakan dan mendengarkan pada --gevent-port
. Secara default, permintaan HTTP akan terus mengakses worker HTTP normal alih-alih worker LiveChat. Anda harus deploy sebuah proxy di depan Odoo dan mengalihkan ulang permintaan masuk yang mana path-nya dimulai dengan /websocket/
ke worker LiveChat. Anda juga harus memulai Odoo di --proxy-mode
supaya Odoo menggunakan header asli klien (seperti hostname, scheme, dan IP) alih-alih milik proxy.
Sampel konfigurasi¶
Server dengan 4 CPU, 8 Thread
60 user bersamaan
60 user / 6 = 10 <- jumlah teoretis worker yang dibutuhkan
(4 * 2) + 1 = 9 <- jumlah teoretis maksimal worker
Kita gunakan 8 worker + 1 untuk cron. Kita juga akan menggunakan sistem monitoring untuk mengukur beban cpu, dan memerika apakah di antara 7 dan 7.5
RAM = 9 * ((0.8*150) + (0.2*1024)) ~= 3Go RAM untuk Odoo
di file konfigurasi:
[options]
limit_memory_hard = 1677721600
limit_memory_soft = 629145600
limit_request = 8192
limit_time_cpu = 600
limit_time_real = 1200
max_cron_threads = 1
workers = 8
HTTPS¶
Baik diakses melalui website/web client atau web service, Odoo mengirimkan informasi autentikasi dalam cleartext. Ini berarti deployment aman dari Odoo harus menggunakan HTTPS3. SSL termination dapat diimplementasikan melalui hampir semua SSL termination proxy, tapi membutuhkan setup berikut:
Aktifkan
proxy mode
Odoo. Ini seharusnya hanya diaktifkan saat Odoo di belakang reverse proxySetup SSL termination proxy (contoh Nginx termination)
Setup proxy tersebut sendiri (contoh Nginx proxying)
SSL termination proxy Anda harus secara otomatis mengalihkan ulang hubungan yang tidak aman ke port yang aman
Sampel konfigurasi¶
Alihkan ulang permintaan http menjadi https
Permintaan proxy ke odoo
di file konfigurasi tetapkan:
proxy_mode = True
di /etc/nginx/sites-enabled/odoo.conf
tetapkan:
#odoo server
upstream odoo {
server 127.0.0.1:8069;
}
upstream odoochat {
server 127.0.0.1:8072;
}
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
# http -> https
server {
listen 80;
server_name odoo.mycompany.com;
rewrite ^(.*) https://$host$1 permanent;
}
server {
listen 443 ssl;
server_name odoo.mycompany.com;
proxy_read_timeout 720s;
proxy_connect_timeout 720s;
proxy_send_timeout 720s;
# SSL parameters
ssl_certificate /etc/ssl/nginx/server.crt;
ssl_certificate_key /etc/ssl/nginx/server.key;
ssl_session_timeout 30m;
ssl_protocols TLSv1.2;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
# log
access_log /var/log/nginx/odoo.access.log;
error_log /var/log/nginx/odoo.error.log;
# Redirect websocket requests to odoo gevent port
location /websocket {
proxy_pass http://odoochat;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
proxy_cookie_flags session_id samesite=lax secure; # requires nginx 1.19.8
}
# Redirect requests to odoo backend server
location / {
# Add Headers for odoo proxy mode
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_redirect off;
proxy_pass http://odoo;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
proxy_cookie_flags session_id samesite=lax secure; # requires nginx 1.19.8
}
# common gzip
gzip_types text/css text/scss text/plain text/xml application/xml application/json application/javascript;
gzip on;
}
HTTPS Hardening¶
Menambahkan header Strict-Transport-Security
ke semua permintaan, untuk mencegah browser mengirimkan permintaan HTTP plain ke domain ini. Anda harus selalu menjaga layanan HTTPS yang bekerja dengan sertifikat valid pada domain ini, bila tidak, user-user Anda akan melihat peringatan keamanan atau tidak dapat mengaksesnya sama sekali.
Semua pengunjung yang masuk melalui NGINX diarahkan secara paksa untuk menggunakan koneksi HTTPS selama satu tahun:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
Konfigurasi tambahan dapat didefinisikan untuk cookie session_id
. Flag Secure
juga dapat ditambahkan untuk memastikan mereka tidak pernah dikirim melalui HTTP dan SameSite=Lax
untuk mencegah CSRF yang diautentikasi.
# requires nginx 1.19.8
proxy_cookie_flags session_id samesite=lax secure;
Odoo sebagai Aplikasi WSGI¶
Odoo juga dapat di-mount sebagai aplikasi standar WSGI. Odoo menyediakan dasar untuk script launcher WSGI sebagai odoo-wsgi.example.py
. Script tersebut harus dikustomisasi (sebaiknya setelah menyalinnya langsung dari direktori setup) untuk dengan tepat mengonfigurasinya langsung di odoo.tools.config
alih-alih melalui command-line atau file konfigurasi.
Namun server WSGI hanya akan mengekspos endpoint HTTP utama untuk web client, website dan webservice API. Karena Odoo tidak mengontrol pembuatan worker lagi Odoo tidak dapat setup cron atau livechat worker
Cron Worker¶
Anda harus memulai salah satu server bawaan Odoo disamping server WSGI untuk dapat memproses cron job. Server tersebut harus dikonfigurasi untuk hanya memproses cron dan bukan permintaan HTTP menggunakan cli option --no-http
atau pengaturan file konfigurasi http_enable = False
.
Pada sistem seperti Linux, disarankan untuk menggunakan server multi-processing alih-alih multi-threading agar dapat memanfaatkan penggunaan hardware yang lebih baik dan peningkatan stabilitas, misalnya, menggunakan cli option --workers=-1
dan --max-cron-threads=n
.
LiveChat¶
Menggunakan server WSGI yang gevent-compatible dibutuhkan untuk pengoperasian fitur live chat yang tepat. Server tersebut harus dapat menangani banyak hubungan serentak yang berumur panjang tapi tidak membutuhkan banyak processing power. Semua permintaan yang mana path-nya dimulai dengan /websocket/
harus dialihkan ke server tersebut. Server WSGI reguler (berdasarkan thread/process) sebaiknya digunakan untuk permintaan-permintaan lainnya.
Cron server Odoo juga dapat digunakan untuk melayani permintaan live chat. Cukup drop cli option --no-http
dari cron server dan pastikan permintaan yang path-nya dimulai dengan /websocket/
dialihkan ke server ini, baik pada --http-port
(server multi-threading) atau pada --gevent-port
(server multi-processing).
Menyajikan file statik dan lampiran¶
Untuk kemudahan development, Odoo secara langsung menyajikan semua file statik dan lampiran dalam modulnya. Ini mungkin tidak ideal bila mengenai performa, dan file statik harus secara umum disajikan oleh server HTTP static.
Melayani file statik¶
File statik Odoo berlokasi di setiap folder static/
module, maka file statik dapat disajikan dengan mencegat semua permintaan ke /MODULE/static/FILE
, dan mencari modul (dan file) yang tepat di beragam addon path.
Disarankan untuk menetapkan header Content-Security-Policy: default-src 'none'
pada semua gambar yang dikirim oleh web server. Ini tidak harus dilakukan karena user tidak dapat memodifikasi/inject konten di dalam folder static/
modul dan gambar yang ada bersifat final (mereka tidak mengambil sumber daya baru secara sendiri). Namun, ini tetap merupakan praktik yang baik.
Menggunakan konfigurasi NGINX (https) di atas, blok map
dan location
di atas harusnya ditambahkan untuk menyajikan file statik melalui NGINX.
map $sent_http_content_type $content_type_csp {
default "";
~image/ "default-src 'none'";
}
server {
# the rest of the configuration
location @odoo {
# copy-paste the content of the / location block
}
# Serve static files right away
location ~ ^/[^/]+/static/.+$ {
# root and try_files both depend on your addons paths
root ...;
try_files ... @odoo;
expires 24h;
add_header Content-Security-Policy $content_type_csp;
}
}
Directive root
dan try_files
yang asli tergantung pada penginstalan Anda, terutama pada --addons-path
Anda.
Example
Katakan Odoo telah diinstal melalui debian packages untuk Community dan Enterprise, dan --addons-path
adalah '/usr/lib/python3/dist-packages/odoo/addons'
.
root
dan try_files
harusnya adalah:
root /usr/lib/python3/dist-packages/odoo/addons;
try_files $uri @odoo;
Katakan Odoo telah diinstal melalui sources, yang mana repositori git Community dan Enterprise-nya diklon di /opt/odoo/community
dan /opt/odoo/enterprise
sesuai urutan, dan --addons-path
adalah '/opt/odoo/community/odoo/addons,/opt/odoo/community/addons,/opt/odoo/enterprise'
.
root
dan try_files
harusnya adalah:
root /opt/odoo;
try_files /community/odoo/addons$uri /community/addons$uri /enterprise$uri @odoo;
Menyajikan lampiran¶
Lampiran adalah file yang disimpan di filestore yang mana aksesnya diregulasi oleh Odoo. Mereka tidak dapat diakses langsung melalui web server statik karena mengakses mereka membutuhkan lebih dari satu lookup di database untuk menentukan di mana file disimpan dan apakah user saat ini dapat mengakses mereka atau tidak.
Kendati demikian, setelah file telah ditemukan dan hak akses diverifikasi oleh Odoo, merupakan ide baik untuk menyajikan file menggunakan web server statik alih-alih Odoo. Agar Odoo untuk mendelegasikan penyajian file ke web server statik, extension X-Sendfile (apache) atau X-Accel (nginx) harus diaktifkan dan dikonfigurasikan pada web server statik. Setelah di setup, jalankan Odoo dengan CLI flag --x-sendfile
(flag unik ini digunakan untuk X-Sendfile dan X-Accel).
Catatan
Extension X-Sendfile untuk apache (dan web server yang kompatibel) tidak membutuhkan konfigurasi tambahan apapun.
Extension X-Accel untuk NGINX membutuhkan konfigurasi tambahan berikut:
location /web/filestore { internal; alias /path/to/odoo/data-dir/filestore; }
Apabila Anda tidak tahu path ke filestore Anda, nyalakan Odoo dengan opsi
--x-sendfile
dan navigasi ke URL/web/filestore
langsung melalui Odoo (jangan menavigasi ke URL melalui NGINX). Ini akan mencatat peringatan, pesannya akan memiliki konfigurasi yang Anda butuhkan.
Keamanan¶
Untuk awal-awal, ingat bahwa mengamankan sistem informasi adalah proses yang berkelanjutan, bukan operasi yang sekali-selesai. Kapan pun juga, Anda hanya akan seaman rantai terlemah di environment Anda.
Jadi tolong jangan ambil bagian dari dokumentasi ini sebagai daftar termutakhir pengukuran keamanan yang akan mencegah semua masalah keamanan. Pedoman ini hanya ditujukan sebagai ringkasan dari hal-hal pertama yang harus Anda masukkan pada rencana keamanan Anda. Sisanya akan datang dengan praktek keamanan yang baik untuk OS dan distribusi Anda, praktek terbaik dalam hal user, password, dan manajemen kontrol akses, dsb.
Saat men-deploy server yang menggunakan internet, mohon pertimbangkan topik-topik terkait keamanan berikut:
Selalu tetapkan password admin super-admin yang kuat, dan batasi akses ke halaman-halaman manajemen database setelah sistem di-setup. Lihat Keamanan Database Manager.
Pilih login yang unik dan password yang kuat untuk semua akun administrator pada semua database. Jangan gunakan 'admin' sebagai login. Jangan gunakan login tersebut untuk operasi keseharian, hanya untuk mengontrol/menangani penginstalan. Jangan pernah menggunakan password default apapun seperti admin/admin, bahkan untuk database test/staging.
Jangan menginstal data demo pada server yang menggunakan internet. Database dengan data demo memiliki secara default login dan password yang dapat digunakan untuk memasuki sistem Anda dan menghasilkan masalah yang signifikan, bahkan pada sistem staging/dev.
Gunakan filter database yang sesuai (
--db-filter
) untuk membatasi visibilitas database Anda sesuai dengan nama host. Lihat dbfilter. Anda juga mungkin ingin menggunakan-d
untuk menyediakan daftar Anda sendiri untuk database yang tersedia (yang dipisahkan koma) untuk difilter, alih-alih membiarkan sistem mengambil mereka semua dari backend database.Setelah
db_name
dandbfilter
Anda sudah dikonfigurasi dan hanya cocok dengan satu database per nama host, Anda sebaiknya menetapkan opsi konfigurasilist_db
menjadiFalse
, untuk mencegah listing database, dan untuk memblokir akses layar manajemen database (ini juga dapat dilakukan dengan opsi command-line--no-database-list
)Pastikan user PostgreSQL (
--db_user
) bukan super-user, dan bahwa database Anda dimiliki oleh user yang berbeda. Sebagai contoh mereka dapat dimiliki oleh super-userpostgres
bila mereka menggunakandb_user
yang dedicated dan non-privileged. Lihat juga Mengonfigurasi Odoo.Pastikan software diupdate dengan secara reguler menginstal build terkini, baik melalui GitHub atau dengan mengunduh versi terbaru dari https://www.odoo.com/page/download atau http://nightly.odoo.com
Konfigurasikan server Anda di mode multi-proses dengan limit yang sesuai yang cocok dengan penggunaan tipikal Anda (memori/CPU/timeout). Lihat juga Builtin server.
Jalankan Odoo di belakang web server yang menyediakan HTTPS termination dengan sertifikat SSL yang valid, untuk mencegah penyadapan komunikasi cleartext. Sertifikat SSP murah, dan banyak opsi yang gratis yang tersedia. Konfigurasikan proxy website untuk membatasi ukuran permintaan, tetapkan timeout yang sesuai, dan aktifkan opsi
proxy mode
. Lihat juga HTTPS.Bila Anda harus mengizinkan akses SSH remote ke server Anda, pastikan Anda menyiapkan password yang kuat untuk semua akun, bukan hanya untuk
root
. Sangat disarankan untuk menonaktifkan autentikasi berdasarkan password, dan hanya mengizinkan autentikasi public key. Juga pertimbangkan untuk membatasi akses melalui VPN, sehingga hanya IP yang terpercaya yang dapat melewati firewall, dan/atau menjalankan sistem pendeteksi brute-force sepertifail2ban
atau yang sepadan.Pertimbangkan untuk menginstal pembatasan percobaan pada proxy atau firewall Anda, untuk mencegah penyerangan brute-force dan denial of service. Lihat juga Memblokir Serangan Brute Force untuk pengamanan lebih spesifik.
Banyak penyedia jaringan yang menyediakan migrasi otomatis untuk serangan Distributed Denial of Service (DDOS), tapi ini seringkali merupakan layanan opsional, jadi Anda sebaiknya menanyakan hal tersebut ke mereka.
Kapanpun memungkinkan, host instance demo/test/staging Anda yang publik pada mesin-mesin yang berbeda dari production. Dan terapkan persiapan keamanan yang sama ke mereka dengan yang untuk production.
Bila server Odoo Anda yang publik memiliki akses ke sumber daya layanan jaringan internal atau layanan yang sensitif (misal melalui VLAN privat), implementasikan peraturan firewall yang sesuai untuk melindungi sumber daya internal tersebut. Ini akan memastikan server Odoo tidak dapat digunakan secara tidak sengaja (atau sebagai hasil tangan user jahat) untuk mengakses atau mengacaukan sumber daya internal tersebut. Biasanya ini dapat dilakukan dengan menerapkan peraturan outbound default DENY pada firewall, lalu hanya secara eksplisit mengotorisasikan akses ke sumber daya internal yang server Odoo harus akses. Systemd IP traffic access control juga dapat berguna untuk mengimplementasikan per-process network access control.
Bila server Odoo Anda yang publik sembunyi di belakang Web Application Firewall, load-balancer, layanan perlindungan DDoS yang transparan (seperti CloudFlare) atau perangkat level-jaringan yang serupa, ANda mungkin ingin menghindari akses langsung ke sistem Odoo. Secara umum susah untuk menjaga alamat endpoint IP server Odoo Anda agar tetap rahasia. Contohnya mereka dapat muncul di log server website saat meng-query sistem publik, atau di header email yang dipost dari Odoo. Dalam situasi seperti itu Anda mungkin ingin mengonfigurasi firewall Anda supaya endpoint-nya tidak dapat diakses secara publik kecuali dari alamat IP tertentu WAF, load-balancer, atau layanan proxy Anda. Penyedia layanan seperti CloudFlare biasanya memiliki daftar publik rentang alamat IP mereka untuk tujuan ini.
Bila Anda menghosting lebih dari satu pelanggan, pisahkan data dan file pelanggan dari pelanggan lainnya menggunakan container atau teknik "jail" yang sesuai.
Setup backup harian untuk database dan data filestore Anda, dan salin mereka ke server arsip remote yang tidak dapat diakses dari server itu sendiri.
Memasang Odoo pada Linux sangat teramat disarankan ketimbang Windows. Apabila Anda tetap memilih untuk memasang Odoo di platform Window, peninjauan penguatan pengamanan yang sangat menyeluruh untuk server harus dilakukan dan merupakan sesuatu yang di luar cakupan pedoman ini.
Memblokir Serangan Brute Force¶
Untuk deployment yang menggunakan internet, serangan brute force pada password user sangat umum, dan ancaman ini tidak boleh diabaikan untuk server Odoo. Odoo mengeluarkan log entri kapanpun percobaan login dilakukan, dan melaporkan hasilnya: sukses atau gagal, beserta login target dan sumber IP.
Log entri akan memiliki bentuk berikut.
Login gagal:
2018-07-05 14:56:31,506 24849 INFO db_name odoo.addons.base.res.res_users: Login failed for db:db_name login:admin from 127.0.0.1
Login berhasil:
2018-07-05 14:56:31,506 24849 INFO db_name odoo.addons.base.res.res_users: Login successful for db:db_name login:admin from 127.0.0.1
Log-log ini dapat dengan mudah dianalisis oleh sistem pencegah intrusi seperti fail2ban
.
Contohnya, definisi filter fail2ban berikut seharusnya cocok dengan login gagal:
[Definition]
failregex = ^ \d+ INFO \S+ \S+ Login failed for db:\S+ login:\S+ from <HOST>
ignoreregex =
Ini dapat digunakan dengan definisi jail untuk memblokir penyerangan IP pada HTTP(S).
Berikut contoh memblokir IP selama 15 menit saat 10 percobaan login gagal dideteksi dari IP yang sama dalam waktu 1 menit:
[odoo-login]
enabled = true
port = http,https
bantime = 900 ; 15 min ban
maxretry = 10 ; if 10 attempts
findtime = 60 ; within 1 min /!\ Should be adjusted with the TZ offset
logpath = /var/log/odoo.log ; set the actual odoo log path here
Keamanan Database Manager¶
Mengonfigurasi Odoo menyebut admin_passwd
secara singkat.
Pengaturan ini digunakan di semua layar manajemen database (untuk membuat, menghapus, dump atau memulihkan database).
Bila layar manajemen tidak boleh diakses sama sekali, Anda harus mengatur opsi konfigurasi list_db
menjadi False
, untuk memblokir akses ke semua pilihan database dan layar manajemen.
Peringatan
Sangat disarankan untuk menonaktifkan Database Manager untuk sistem apapun yang menggunakan internet! Ini berfungsi sebagai alat development/demo, agar gampang membuat dan mengelola database. Ini tidak dirancang untuk digunakan di production, dan bahkan dapat menampakkan fitur-fitur berbahaya ke penyerang. Ini juga tidak dirancang untuk menangani database-database yang besar, dan dapat memicu limit memori.
Pada sistem production, operasi manajemen database harus selalu dilakukan oleh admin sistem, termasuk penyediaan database baru dan backup otomatis.
Jangan lupa setup parameter db_name
yang sesuai (dan secara opsional, dbfilter
) supaya sistem dapat menentukan database target untuk setiap permintaan, bila tidak user akan diblokir karena mereka tidak akan diizinkan untuk memilih databse.
Bila layar manajemen hanya dapat diakses oleh kelompok mesin yang terpilih, gunakan fitur proxy server untuk memblokir akses ke semua rute yang dimulai dengan /web/database
kecuali (mungkin) /web/database/selector
yang menampilkan layar pemilihan-database.
Bila layar manajemen-database dibiarkan agar dapat diakses, pengaturan admin_passwd
harus diubah dari default admin
: password ini diperiksa sebelum mengizinkan operasi yang mengubah database.
Password harus disimpan dengan aman, dan sebaiknya dibuat secara acak contoh
$ python3 -c 'import base64, os; print(base64.b64encode(os.urandom(24)))'
which generates a 32-character pseudorandom printable string.
Reset the master password¶
There may be instances where the master password is misplaced, or compromised, and needs to be reset. The following process is for system administrators of an Odoo on-premise database detailing how to manually reset and re-encrypt the master password.
Lihat juga
For more information about changing an Odoo.com account password, see this documentation: Mengubah password akun Odoo.com.
When creating a new on-premise database, a random master password is generated. Odoo recommends using this password to secure the database. This password is implemented by default, so there is a secure master password for any Odoo on-premise deployment.
Peringatan
When creating an Odoo on-premise database the installation is accessible to anyone on the internet, until this password is set to secure the database.
The master password is specified in the Odoo configuration file (odoo.conf
or odoorc
(hidden
file)). The Odoo master password is needed to modify, create, or delete a database through the
graphical user interface (GUI).
Locate configuration file¶
First, open the Odoo configuration file (odoo.conf
or odoorc
(hidden file)).
The configuration file is located at: c:\ProgramFiles\Odoo{VERSION}\server\odoo.conf
Depending on how Odoo is installed on the Linux machine, the configuration file is located in one of two different places:
Package installation:
/etc/odoo.conf
Source installation:
~/.odoorc
Change old password¶
Once the appropriate file has been opened, proceed to modify the old password in the configuration file to a temporary password.
After locating the configuration file, open it using a (GUI). This can be achieved by simply double clicking on the file. Then, the device should have a default GUI to open the file with.
Next, modify the master password line admin_passwd = $pbkdf2-sha…
to admin_passwd =
newpassword1234
, for example. This password can be anything, as long as it is saved
temporarily. Make sure to modify all characters after the =
.
Example
The line appears like this:
admin_passwd =
$pbkdf2-sh39dji295.59mptrfW.9z6HkA$w9j9AMVmKAP17OosCqDxDv2hjsvzlLpF8Rra8I7p/b573hji540mk/.3ek0lg%kvkol6k983mkf/40fjki79m
The modified line appears like this: admin_passwd = newpassword1234
Modify the master password line using the following Unix command detailed below.
Connect to the Odoo server's terminal via Secure Shell (SSH) protocol, and edit the configuration file. To modify the configuration file, enter the following command: sudo nano /etc/odoo.conf
After opening the configuration file, modify the master password line admin_passwd =
$pbkdf2-sha…
to admin_passwd = newpassword1234
. This password can be anything, as long as
it is saved temporarily. Make sure to modify all characters after the =
.
Example
The line appears like this:
admin_passwd =
$pbkdf2-sh39dji295.59mptrfW.9z6HkA$w9j9AMVmKAP17OosCqDxDv2hjsvzlLpF8Rra8I7p/b573hji540mk/.3ek0lg%kvkol6k983mkf/40fjki79m
The modified line appears like this: admin_passwd = newpassword1234
Penting
It is essential that the password is changed to something else, rather than triggering a new
password reset by adding a semicolon ;
at the beginning of the line. This ensures the database
is secure throughout the entire password reset process.
Restart Odoo server¶
After setting the temporary password, a restart of the Odoo server is required.
To restart the Odoo server, first, type services
into the Windows Search bar.
Then, select the Services application, and scroll down to the Odoo
service.
Next, right click on Odoo, and select Start or Restart. This action manually restarts the Odoo server.
Restart the Odoo server by typing the command: sudo service odoo15 restart
Catatan
Change the number after odoo
to fit the specific version the server is running on.
Use web interface to re-encrypt password¶
First, navigate to /web/database/manager
or http://server_ip:port/web/database/manager
in a
browser.
Catatan
Replace server_ip
with the IP address of the database. Replace port
with the numbered port
the database is accessible from.
Next, click Set Master Password, and type in the previously-selected temporary password into the Master Password field. Following this step, type in a New Master Password. The New Master Password is hashed (or encrypted), once the Continue button is clicked.
At this point, the password has been successfully reset, and a hashed version of the new password now appears in the configuration file.
Lihat juga
For more information on Odoo database security, see this documentation: Keamanan Database Manager.
Browser yang Didukung¶
Odoo mendukung penggunaan semua browser baik desktop atau mobile yang umum tersedia di pasar, selama mereka didukung oleh publisher mereka.
Berikut adalah browser yang didukung:
Google Chrome
Mozilla Firefox
Microsoft Edge
Apple Safari
Peringatan
Pastikan browser Anda up-to-date dan masih didukung oleh publisher mereka sebelum melaporkan bug.
Catatan
Setelah Odoo 13.0, ES6 sudah didukung penggunaannya. Oleh karena itu, IE tidak lagi digunakan.
- 1
untuk memiliki lebih dari satu penginstalan Odoo gunakan database PostgreSQL yang sama, atau sediakan lebih banyak sumber daya komputasi untuk masing-masing software.
- 2
secara teknis alat seperti socat dapat digunakan sebagai proxy soket UNIX di jaringan, tapi ini umumnya untuk software yang hanya dapat digunakan di soket UNIX
- 3
atau dapat diakses hanya melalui internal packet-switched network, tapi yang memerlukan switch yang aman, perlindungan terhadap ARP spoofing dan tidak dapat menggunakan WiFi. Bahkan melebihi secure packet-switched network, deployment lebih disarankan dibanding HTTPS, dan kemungkinan biaya akan dikurangi karena sertifikat yang "self-signed" lebih mudah untuk di-deploy pada controlled environment dibandingkan di internet.