Sebagai sysadmin yang mengurusi email, tentu saja kita sudah memiliki data dan statistik pengiriman email dari server yang di-manage. Dari data tersebut, bisa dilakukan pembatasan volume pengiriman email harian untuk setiap akunnya. Pembatasan ini bertujuan untuk mengurangi resiko pengiriman email spam dari akun yang sudah ter-compromise.
Zimbra memiliki CBPolicyD yang merupakan policy manager yang sudah termasuk dalam paket instalasi Zimbra. Aktivasi dan penerapannya memerlukan effort lebih supaya bisa sesuai dengan kebutuhan organisasi. Langkah pertamanya seperti yang sudah disebutkan, mendapatkan data pengiriman email supaya policy yang dibuat tidak merugikan organisasi.
Tutorial kali ini saya akan menunjukkan cara konfigurasi PolicyD Zimbra 8.8.15 single installation pada Ubuntu 20.04. Secara garis besar ada 3 langkah yang dilakukan :
- Aktivasi PolicyD pada Zimbra 8.8.15.
- Instalasi webserver PolicyD.
- Pengaturan rate limit harian pada PolicyD webui.
Topologi yang digunakan adalah seperti ini.
Penjelasan topologi : Sysadmin mengakses webui PolicyD yang terinstall pada Ubuntu Web Server melalui domain https://policyd.bayuskylabs.com
untuk mengatur rate limit mail harian pada domain mail.bayuskylabs.com
. Ubuntu Web Server menggunakan MariaDB milik Zimbra sebagai database yang digunakan.
Step 1. Aktivasi PolicyD pada Zimbra
1. Login SSH pada Zimbra server dan eskalasi menjadi root lalu clone repo policyd dari Zimbra.
$ sudo su
# apt install git
# git clone https://github.com/Zimbra/zm-core-utils.git
2. Masuk ke directory zm-core-utils/src/bin/
lalu eksekusi script policyd
# cd zm-core-utils/src/bin/
# bash cbpolicyd.sh
3. Tunjukkan password untuk user ad-policyd_db dengan command
# grep Pass /opt/zimbra/conf/cbpolicyd.conf.in |cut -d'=' -f2
4. Sebagai user zimbra periksa database untuk policyD menggunakan akun dan password pada langkah 3.
# su zimbra
$ /opt/zimbra/bin/mysql policyd_db -u ad-policyd_db -p
Enter password:
MariaDB [policyd_db]> SELECT * FROM quotas_limits;
+----+----------+-----------------------+--------------+---------+----------+
| ID | QuotasID | Type | CounterLimit | Comment | Disabled |
+----+----------+-----------------------+--------------+---------+----------+
| 1 | 1 | MessageCount | 10 | NULL | 0 |
| 2 | 1 | MessageCumulativeSize | 8000 | NULL | 0 |
| 3 | 2 | MessageCount | 12 | NULL | 0 |
| 4 | 3 | MessageCount | 100 | NULL | 0 |
| 5 | 4 | MessageCount | 125 | NULL | 0 |
+----+----------+-----------------------+--------------+---------+----------+
5 rows in set (0.00 sec)
PolicyD telah terinstall dengan benar.
5. Aktifkan layanan cbpolicyd untuk server Zimbra, konfigurasi MTA, dan modul AccessControl agar dapat diakses oleh PolicyD WebUI.
$ zmprov ms `zmhostname` +zimbraServiceInstalled cbpolicyd
$ zmprov ms `zmhostname` +zimbraServiceEnabled cbpolicyd
$ zmprov ms `zmhostname` zimbraCBPolicydAccessControlEnabled TRUE
$ zmprov mcf +zimbraMtaRestriction 'check_policy_service inet:127.0.0.1:10031'
$ zmprov ms `zmhostname` zimbraCBPolicydLogLevel 4
6. Berikan akses user ad-policy_db untuk akses database policyd_db dari IP selain Zimbra.
$ mysql
$ CREATE USER 'ad-policyd_db'@'%' IDENTIFIED BY 'PASSWORD dari langkah 3';
$ GRANT ALL PRIVILEGES ON policyd_db . * TO 'ad-policyd_db'@'%' WITH GRANT OPTION;
$ FLUSH PRIVILEGES ;
7. Persiapkan agar MariaDB bisa diakses dari Zimbra maupun PolicyD WebUI, dengan mengubah bind-address menjadi 0.0.0.0.
$ sudo nano /opt/zimbra/conf/my.cnf
[mysqld]
...
bind-address = 0.0.0.0
...
8. Restart zimbra service
$ zmcontrol restart
Lanjut ke langkah selanjutnya yaitu aktifkan WebUI untuk PolicyD.
Step 2. Instalasi WebUI PolicyD
Siapkan instalasi Ubuntu 20.04 di server yang berbeda dari Zimbra Server. Saya menggunakan Ubuntu container untuk webserver PolicyD.
1. Jalankan apt update dan install Apache dan PHP
$ sudo apt update
$ sudo apt install apache2 php libapache2-mod-php
2. Buat file konfigurasi cbpolicyd.bayuskylabs.com.conf
$ sudo nano /etc/apache2/sites-available/cbpolicyd.bayuskylabs.com.conf
<VirtualHost *:443>
ServerAdmin admin@bayuskylabs.com
DocumentRoot /var/www/html/cbpolicyd/
ServerName cbpolicyd.bayuskylabs.com
ServerAlias cbpolicyd.bayuskylabs.com
SSLEngine on
SSLCipherSuite HIGH:!aNULL:!MD5
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder on
SSLCertificateFile /etc/apache2/ssl/commercial.crt
SSLCertificateKeyFile /etc/apache2/ssl/commercial.key
SSLCertificateChainFile /etc/apache2/ssl/commercial_ca.crt
<Directory /var/www/html/cbpolicyd>
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /var/www/html/cbpolicyd/
Require valid-user
</Directory>
</VirtualHost>
3. Copy SSL certificate ke lokasi sesuai konfigurasi di atas. Saya terlebih dahulu menempatkannya di home directory.
$ sudo mkdir /etc/apache2/ssl
$ sudo cp commercial* /etc/apache2/ssl/
4. Aktifkan site dan module yang dibutuhkan dan restart apache2
$ sudo a2ensite cbpolicyd.bayuskylabs.com.conf
$ sudo a2dissite 000-default.conf
$ sudo a2enmod ssl
$ sudo service apache2 restart
5. Buat directory untuk web PolicyD dan berikan ownership untuk www-data agar bisa diakses via web
$ sudo mkdir /var/www/html/cbpolicyd
$ sudo chown -R www-data:www-data /var/www/html/policyd
6. Buat file htpasswd agar WebUI tidak bisa diakses selain user yang sudah ditentukan, misalkan user yang saya gunakan adalah admin-webui, user ini bebas, tidak harus username dalam Ubuntu.
sudo htpasswd -c /var/www/html/cbpolicyd/.htpasswd admin-webui
7. Git clone PolicyD public repository, masuk ke dalam policyd/webui dan copy file yang dibutuhkan ke dalam virtual-host Root Directory yang telah dibuat pada langkah ke-2
$ git clone https://gitlab.devlabs.linuxassist.net/policyd/policyd.git
$ cd policyd/webui
$ sudo cp -ra * includes/ tooltips/ /var/www/html/cbpolicyd
8. Update konfigurasi database pada file konfigurasi
$ sudo nano /var/www/html/cbpolicyd/includes/config.php
$DB_DSN="mysql:host=zimbra.bayuskylabs.com;dbname=policyd_db;port=7306";
$DB_USER="ad-policyd_db";
$DB_PASS="<db-password>";
$DB_TABLE_PREFIX="";
host: lokasi zimbra server, $DB_PASS: gunakan hasil dari Step 1 langkah 3
9. Buka WebUI dengan mengakses https://cbpolicyd.bayuskylabs.com
atau https://IP_Address
. Saat pertama kali akses akan diminta mengisi username dan password. Gunakan username dan password yang diatur pada langkah 6.
Step 3. Buat Policy untuk Membatasi Pengiriman Email
Proses pengaktifan policy untuk pembatasan pengiriman email memiliki tiga langkah utama yang berurutan. Langkah pertama adalah menentukan grup yang berisi domain yang akan dimasukkan ke dalam policy. Berikutnya atur policy yang akan diterapkan kepada grup tersebut. Terakhir tentukan kuota yang diterapkan kepada domain tersebut. Perhatikan nomor pada gambar, itu merupakan urutan klik untuk pengaturan.
1. Klik Policies -> Groups -> Add
2. Ketika sudah ditambahkan, Nilai groups pada kolom “Disabled” adalah “Yes” yang artinya masih belum aktif. Untuk mengaktifkan entry, pilih group yang tadi dibuat, lalu klik change, ubah value pada variabel “Disabled” menjadi “No”.
3. Kembali ke Policy Groups, pilih domain_bayusky yang telah dibuat klik Action -> Members. Tambahkan domain pada zimbra yang akan diterapkan policy tersebut.
Ketika menambah entry, perhatikan kolom Disabled, nilai default setelah dibuat adalah Yes, pastikan ubah menjadi No agar entry menjadi aktif, seperti pada langkah ke 2. Hal ini berlaku pada seluruh langkah berikutnya.
4. Berikutnya adalah membuat Policy dan menambahkan member policy. Masuk ke menu Policies -> Main
5. Pilih Policy yang baru dibuat pada, lalu add member. Isi seperti gambar di bawah ini.
tanda “%” adalah seluruh anggota grup pada policy group yang dibuat pada langkah ke 2, dan “!%” artinya bukan anggota grup.
6. Selanjutnya tentukan kuota sebagai triger policy dieksekusi. Klik pada menu Quotas -> Configure. Period (waktu) memiliki satuan detik, jadi untuk satu jam berart 3600 detik.
7. Atur limit quota dengan memilih dari list, klik action -> limits. Jika masih kosong, klik Action -> Add.
8. Buktikan dengan mengirim email lebih dari kuota, akan muncul pesan error seperti yang sudah ditentukan.
Sumber : CBPolicyD Management – Zimbra :: Tech Center, Zimbra Tips : How To Configure Rate Limit Sending Message on PolicyD – Ahmad Imanudin