Implementasi CBPolicyD pada Mailborder

Intro

Beberapa waktu lalu ketika melakukan pekerjaan untuk implementasi email server di salah satu klien, klien tersebut meminta agar tidak semua user dapat kirim dan terima dari luar (internet), dalam hal ini hanya user tertentu saja yang dapat mengirim dan menerima email dari luar. Cara tersebut bisa dilakukan di Zimbra Email Server dengan menggunakan AddOn tambahan yaitu CBPolicyD.

Namun, dengan pertimbangan agar penggunaan MTA Email server zimbra lebih optimal, dengan kata lain. Tugas si MTA ini hanya kirim dan terima saja. Akhirnya , dibuatkan 1 MTA server terpisah untuk scanning Spam dan Virus serta rule (peraturan) terkait pengiriman ke user menggunakan Mailborder.

Masalahnya, mailborder ini secara default hanya mendukung untuk pengecekan untuk virus dan spam karena memang tugasnya sebagai ASAV (Antispam Antivirus). Jadi untuk penambahan policy server nya menggunakan si CBpolicyD yang diintegrasikan di Mailborder.

Jika anda sudah mempunyai Mailborder juga, dan ingin menerapkan CBPolicyD pada server anda, maka artikel ini tepat untuk anda baca dan coba terapkan (mudah-mudahan) 🙂

Pengenalan Singkat PolicyD

CBPolicyD adalah sebuah addon untuk menerapkan sebuah policy/kebijakan terhadap MTA anda. Policyd ini memang di desain untuk email server skala besar yang memang mempunyai rule kompleks terhadap usernya. Banyak ide yang dapat diterapkan menggunakan CBPolicyD seperti pemabatasan akses, pengecekan SPF, EHLO HELO, dll.

Versi terakhir saat ini untuk policyd adalah versi 2 dengan Nama kode Cluebringer. sehingga disebut CBPolicyd. Salah satu keunggulan PolicyD yaitu kemudahan manajemen terhadap pembuatan policy, penggunaanya pun cukup mudah karena admin hanya perlu sedikit memahami algoritmanya untuk policy yang akan diterapkan seperti apa.

Integrasi PolicyD dengan Mailborder

PolicyD dapat diintegrasikan dengan mailborder, selama engine nya masih berbasis postfix. Berikut langkahnya :

Tinjauan Sistem

  • Sistem Operasi Ubuntu 14.04
  • Mailborder versi terbaru

Instalasi Dependensi (Paket yang dibutuhkan)

Berikut adalah dependensi yang dibutuhkan oleh policyd agar dapat dijalankan :

  • MySQL, PostgreSQL or SQLite (Database)
  • Net::Server >= 0.96
  • Net::CIDR
  • Config::IniFiles
  • Cache::FastmMap
  • Mail::SPF

Untuk database server yang akan digunakan yaitu menggunakan MySQL, secara default untuk mysql sudah tersedia di mailborder jadi kita tidak perlu melakukan instalasi mysql hanya modul perl nya saja. Berikut langkah-langkah untuk instalasi dependesi perl nya dengan menggunakan cpan :

cpan Net::Server
cpan Net::CIDR
cpan Config::IniFiles
cpan Cache::FastmMap
cpan Mail::SPF

Salin Binary dan Konfigurasi

Setelah dependensi diinstal, silakan lakukan instalasi untuk policyd. Download terlebih dahulu pake policyd nya, untuk versi policyd yang saat ini digunakan adalah v2.0.14, jika mungkin berbeda, bisa disesuaikan :

cd /srv/
wget -c https://download.policyd.org/v2.0.14/cluebringer-v2.0.14.tar.gz
tar -zxvf cluebringer-v2.0.14.tar.gz
cd cluebringer-v2.0.14/

Copy folder cbp ke /usr/local/lib/policyd-2.0/, jika belum ada buat terlebih dahulu :

mkdir /usr/local/lib/policyd-2.0
cp -r cbp /usr/local/lib/policyd-2.0/

Copy juga binary cbpolicyd dan cbpadmin ke folder berikut :

cp cbpadmin /usr/local/bin/
cp cbpolicyd /usr/local/sbin/

Konfigurasi cluebringer.conf

Masih di folder /srv/cluebringer-v2.0.14, salin file cluebringer.conf ke folder /etc/ dan edit filenya :

cp cluebringer.conf /etc/
vi /etc/cluebringer.conf

Hilangkan tanda # pada baris berikut dan sesuaikan value nya :

pid_file=/var/run/cbpolicyd.pid
log_level=3
log_file=/var/log/cbpolicyd.log
log_mail=main
log_detail=info
port=10031

[database]
#DSN=DBI:SQLite:dbname=policyd.sqlite
DSN=DBI:mysql:database=policyd;host=localhost
Username=root
Password=rahasia

Jika sudah simpan konfigurasi tersebut.

Konfigurasi Database

Masuk ke folder database yang ada di folder binary tersebut dan jalankan perintah berikut untuk export konfigurasi databasenya :

cd database
for i in core.tsql access_control.tsql quotas.tsql amavis.tsql checkhelo.tsql checkspf.tsql greylisting.tsql accounting.tsql
do
./convert-tsql mysql $i
done > policyd.sql

sed -i "s/TYPE=/Engine=/g" policyd.sql 
sed -i "s/ERROR: Cannot open file 'accounting.tsql'//g" policyd.sql

Buat database untuk policyd dan Import konfigurasi dari policyd.sql ke database yang telah dibuat dengan menjalankan perintah berikut :

mysqladmin -u root -prahasia create policyd
mysql -u root -p policyd < policyd.sql

Integrasi PolicyD dengan Postfix

Supaya postfix melakukan pengecekan ke PolicyD. Tambahkan konfigurasi  check_policy_service inet:127.0.0.1:10031 ke smtpd_recipient_restrictions dan smtpd_end_of_data_restrictions pada main.cf.

Untuk penambahan konfigurasi ke smtpd_recipient_restrictions bisa menambahkan via WebUI mailborder, Buka Mailborder | Mailborder Servers | Edit Postfix.

Tambahcheck_policy_service inet:127.0.0.1:10031, pada bagiansmtpd_recipient_restrictionssebelum permit_mynetworks,. Seperti berikut :

...
check_policy_service inet:127.0.0.1:10031,
permit_mynetworks,
reject_unauth_destination,
...

Jika sudah simpan konfigurasi.

Kemudian tambahkan pada smtpd_end_of_data_restriction. Jika anda menggunakan mailborder versi berbayar, anda dapat menambahkan rule dengan mailborder GUI di menu “Edit Postfix” kemudian pilih tanda Plus.

Namun, jika menggunakan mailborder versi komunitas anda harus edit di main.cf secara manual. hanya saja jika postfix di reload konfigurasi smtpd_end_of_data_restriction akan hilang. Supaya permanen silakan jalankan perintah berikut :

chattr -i /etc/postfix/main.cf
echo "smtpd_end_of_data_restrictions = check_policy_service inet:127.0.0.1:10031" >> /etc/postfix/main.cf
chattr +i /etc/postfix/main.cf

Jika sudah, restart postfix untuk memuat ulang konfigurasi dengan perintah service postfix restart. dan jalankan perintah cbpolicyd untuk menghidupkan policyd.

Konfigurasi WebUI PolicyD

Salin folder webui yang ada di binary instalasi (/srv/cluebringer-v2.0.14) ke folder /var/www/html dan edit konfigurasi database yang ada di folder /var/www/webui/include/config.php.

cp -r /srv/cluebringer-v2.0.14/webui /var/www/html/
vi /var/www/html/webui/includes/config.php

Ubah konfiugrasinya menjadi seperti berikut :

$DB_DSN="mysql:host=localhost;dbname=policyd";
$DB_USER="root";
$DB_PASS="rahasia";

Jika suda restart service apache2 dengan perintah berikut service apache2 restart

Buka alamat http://ipaddress/webui

PolicyD Webui

Konfigurasi Hidup Otomatis saat Boot

Masukan perintah cbpolicyd ke dalam /etc/rc.local sebelum exit 0 jika menggunakan ubuntu.

vi /etc/rc.local

#!/bin/sh
mkdir -p /var/lock/subsys
cbpolicyd
exit 0

 

Konfigurasi Proteksi untuk WebUI PolicyD

Secara prinsip untuk policyd sudah dapat digunakan untuk melakukan manajemen policy MTA sampai langkah diatas. Hanya saja webui nya dapat diakses secara bebas oleh orang lain yang tahu lokasi public_html nya. Solusi yang dapat dilakukan adalah memberi proteksi autentikasi terhadap webui. dengan .htaccess. Untuk membuatnya silakan lakukan langkah berikut :

Instal paket apache2-utils untuk htpasswd

apt-get install apache2-utils

Buat file .htaccess pada folder /var/www/html/webui/ dan isi seperti berikut :

vi /var/www/html/webui/.htaccess

AuthUserFile /var/www/html/webui/.htpasswd
AuthName "Please Insert Username and Password"
AuthType Basic

<LIMIT GET>
require valid-user
</LIMIT>

Jika sudah simpan konfigurasi.
Buat user untuk autentikasi dengan menggunakan htpasswd, jalankan perintah berikut :

touch /var/www/html/webui/.htpasswd
htpasswd -cb .htpasswd USERNAME PASSWORD

Masukkan konfigurasi berikut pada /etc/apache2/apache2.conf :

<Directory /var/www/html/webui/>
AllowOverride AuthConfig
Order Deny,Allow
Allow from all
</Directory>

Terakhir, restart service apache2 dengan perintah service apache2 restart.

Selesaii, silakan dicoba dan semoga bermanfaat 🙂

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.