Membuat mail server

Juni 22, 2010

Installasi mailserver dengan postfix and courier menggunakan authentikasi mysql

Diarsipkan di bawah: LiNuX (based on debian), Mail Server — Tag:, , , , — LQman @ 5:51 am

Tutorial ini menjelaskan Step by Step tentang cara membuat mailserver dg virtual domain (domain email tidak harus selalu sama dg domain komputer yang sesungguhnya) denganberbasiskan postfix dan courier dg memanfaatkan mysql sebagai penyimpan data username & password bagi tiap2 user. Berikut ini yang harus anda lakukan.

( INTERNET )—————-| DMZ |—————-( Local Area Networks )
Step 1: Install paket-paket yang diperlukan
Paket yang diperlukan dalam tutorial ini antara lain :
Untuk Mengirim email (SMTP) : postfix (Pilih: “Local only”), postfix-tls, postfix-mysql, postfix-doc
Untuk Database user : mysql-client-5.0, mysql-server-5.0
Untuk menerima email (POP3 & IMAP) : courier-base (Pilih: “No”), courier-authdaemon, courier-authlib-mysql, courier-pop, courier-pop-ssl, courier-imap, courier-imap-ssl
Untuk Keamanan Pengiriman dan Penerimaan email : libsasl2, libsasl2-modules, libsasl2-modules-sql, openssl
Untuk Mencegah Virus dan Spam : amavisd-new, spamassassin, clamav, clamav-daemon, zoo, unzip, lha
Untuk tampilan WebMail : squirrelmail, phpmyadmin
Untuk testing tools : telnet

root@bajoel:~#apt-get install postfix postfix-tls postfix-mysql postfix-doc mysql-client-5.0 mysql-server-5.0 courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl libsasl2 libsasl2-modules libsasl2-modules-sql openssl amavisd-new spamassassin clamav clamav-daemon zoo unzip lha squirrelmail phpmyadmin telnet

Step 2: Membuat user, database, dan tabel yang diperlukan pada mysql
Tambahkan database dan tabel-tabel baru pada mysql anda sebagai berikut
root@bajoel:~#mysql -u root -p
password:
mysql>CREATE DATABASE mail;
mysql>CREATE USER 'mailadmin'@'localhost' identified by 'passwordanda';
mysql>USE mail;
mysql>CREATE TABLE domains (
domain varchar(50) NOT NULL,
PRIMARY KEY (domain) )
TYPE=MyISAM;
mysql>CREATE TABLE forwardings (
source varchar(80) NOT NULL,
destination TEXT NOT NULL,
PRIMARY KEY (source) )
TYPE=MyISAM;
mysql>CREATE TABLE users (
email varchar(80) NOT NULL,
password varchar(20) NOT NULL,
PRIMARY KEY (email) )
TYPE=MyISAM;
mysql>GRANT all ON mail.* TO 'mailadmin'@'localhost';

Step 3: Membuat file2 baru sebagai penunjuk ke database mysql
Buat file baru dg nama mysql-virtual_domains.cf
root@bajoel:~#touch /etc/postfix/mysql-virtual_domains.cf
isi file mysql-virtual_domains.cf dg baris-baris dibawah ini:
root@bajoel:~#mcedit /etc/postfix/mysql-virtual_domains.cf
user = mailadmin
password = passwordanda
dbname = mail
table = domains
select_field = ‘virtual’
where_field = domain
hosts = 127.0.0.1

Buat file baru dg nama mysql-virtual_forwardings.cf yg berisi :
root@bajoel:~#touch /etc/postfix/mysql-virtual_forwardings.cf
isi file mysql-virtual_forwardings.cf dg baris-baris dibawah ini:
root@bajoel:~#mcedit /etc/postfix/mysql-virtual_forwardings.cf
user = mailadmin
password = passwordanda
dbname = mail
table = forwardings
select_field = destination
where_field = source
hosts = 127.0.0.1

Buat file baru dg nama user mysql-virtual_mailboxes.cf yg berisi :
root@bajoel:~#touch /etc/postfix/mysql-virtual_mailboxes.cf
isi file mysql-virtual_mailboxes.cf dg baris-baris dibawah ini:
root@bajoel:~#mcedit /etc/postfix/mysql-virtual_mailboxes.cf
user = mailadmin
password = passwordanda
dbname = mail
table = users
select_field = CONCAT(SUBSTRING_INDEX(email,’@’,-1),’/’,SUBSTRING_INDEX(email,’@’,1),’/’)
where_field = email
hosts = 127.0.0.1

Buat file baru mysql-virtual_email2email.cf yang berisi :
root@bajoel:~#touch /etc/postfix/mysql-virtual_email2email.cf
isi file mysql-virtual_email2email.cf dg baris-baris dibawah ini:
root@bajoel:~#mcedit /etc/postfix/mysql-virtual_email2email.cf
user = mailadmin
password = passwordanda
dbname = mail
table = users
select_field = email
where_field = email
hosts = 127.0.0.1

[Penting] Demi keamanan, pastikan hanya user root & postfix saja yang bisa mengakses file-file yang telah anda buat.
root@bajoel:~#chown root:postfix /etc/postfix/mysql-virtual_*.cf
root@bajoel:~#chmod u=rw,g=r,o= /etc/postfix/mysql-virtual_*.cf

Step 4: Membuat user baru pada system kita sebagai administrator-email
User ini bertugas untuk membuat maildir baru setiap ada user baru yang mendaftar pada mailserver anda
root@bajoel:~#groupadd -g 5000 mail-admin
root@bajoel:~#useradd -g mail-admin -u 5000 mail-admin -d /home/mail -m
root@bajoel:~#mkdir /home/mail
root@bajoel:~#chown -R mail-admin:mail-admin /home/mail
root@bajoel:~#chmod -R u=rwx,g=,o= /home/mail

Step 5: Mengkonfigurasi postfix sbg server SMTP
File main.cf ini adalah file konfigurasi utama dari postfix
root@bajoel:~#mcedit /etc/postfix/main.cf
Editlah file tsb, sehingga menjadi seperti dibawah ini:
inet_interfaces = all
myhostname = mail.domain-anda.org (fqdn)
mydestination = (jangan menuliskan virtual domain disini -> lebih baik dikosongi saja)
mynetworks = lqman.org (nama domain anda)
virtual_alias_domains =
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual_forwardings.cf mysql:/etc/postfix/mysql-virtual_email2email.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual_domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual_mailboxes.cf
virtual_mailbox_base = /home/mail
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/postfix/smtpd.cert
smtpd_tls_key_file = /etc/postfix/smtpd.key

Testing…
Restart service postfix, dan cobalah untuk mengakses port 25 dengan telnet
root@bajoel:~#/etc/init.d/postfix restart
root@bajoel:~#postfix check

Jika tidak muncul suatu pesan kesalahan, berarti anda sukses…….
root@bajoel:~#telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
220 mail.lqman.org ESMTP Postfix (Debian/GNU)

Jika muncul sebagaimana tulisan diatas, berarti postfix anda sudah berjalan lancar…….
Tekanlah tombol Ctrl+] lalu ketik quit untuk keluar dari sesi telnet,
Ambilah napas dalam-dalam, dan lanjutkan perjuangan ;)

Step 6: Mengaktifkan fasilitas authentikasi pada postfix (Auth-SMTP)
Tell Postfix to use SASL/MySQL, dg cara buat file baru dg nama /etc/postfix/sasl/smtpd.conf
root@bajoel:~#touch /etc/postfix/sasl/smtpd.conf
Isi file /etc/postfix/sasl/smtpd.conf dg baris-baris dibawah ini:
root@bajoel:~#mcedit /etc/postfix/sasl/smtpd.conf
pwcheck_method: auxprop
auxprop_plugin: sql
mech_list: plain login cram-md5 digest-md5
sql_engine: mysql
sql_hostnames: 127.0.0.1
sql_user: mailadmin
sql_passwd: passwordanda
sql_database: mail
sql_select: select password from users where email=’%u@%r’
log_level: 7

[Penting] Demi keamanan, pastikan hanya user root & postfix saja yang bisa mengakses file-file yang telah anda buat.
root@bajoel:~#chown root:postfix /etc/postfix/sasl/smtpd.conf
root@bajoel:~#chmod u=rw,g=r,o= /etc/postfix/sasl/smtpd.conf

Mengaktifkan TLS untuk meng-encrypt SMTP traffik, dg cara membuat sertifikat (certificate)
root@bajoel:~#openssl req -new -outform PEM -out /etc/postfix/smtpd.cert -newkey rsa:2048 -nodes -keyout /etc/postfix/smtpd.key -keyform PEM -days 365 -x509

[Penting] Demi keamanan, pastikan hanya user root & postfix saja yang bisa mengakses file-file yang telah anda buat.
root@bajoel:~#chown root:postfix /etc/postfix/smtpd.*
root@bajoel:~#chmod u=rw,g=r,o= /etc/postfix/smtpd.*

Step 7: Mengkonfigurasi courier sebagai server POP3 / IMAP
Edit file /etc/courier/authdaemonrc,
root@bajoel:~#mcedit /etc/courier/authdaemonrc
ubah parameter authmodulelist menjadi :
authmodulelist=”authmysql”
Lalu edit file /etc/courier/authmysqlrc,
root@bajoel:~#mcedit /etc/courier/authmysqlrc
Ubah beberapa parameter, shg menjadi seperti di bawah ini :
MYSQL_SERVER localhost
MYSQL_USERNAME mailadmin
MYSQL_PASSWORD passwordanda
MYSQL_PORT 0
MYSQL_DATABASE mail
MYSQL_USER_TABLE users
#MYSQL_CRYPT_PWFIELD (jadikan baris ini sebagai komentar)
MYSQL_CLEAR_PWFIELD password
MYSQL_UID_FIELD 5000
MYSQL_GID_FIELD 5000
MYSQL_LOGIN_FIELD email
MYSQL_HOME_FIELD “/home/mail”
MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,’@’,-1),’/’,SUBSTRING_INDEX(email,’@’,1),’/’)
#MYSQL_NAME_FIELD (jadikan baris ini sebagai komentar)

[Penting] Mengedit file authmysqlrc agak sedikit susah, pastikan anda berhati-hati dan tidak membuat kesalahan (jangan memakai tanda SPASI, tetapi gunakan tombol TAB)

Testing…
Restart service courier-authdaemon, dan cobalah untuk mengakses port 110 dengan telnet
root@bajoel:~#/etc/init.d/courier-authdaemon restart
Jika tidak muncul suatu pesan kesalahan, berarti anda sukses…….
root@bajoel:~#telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Hello there.

Jika muncul pesan seperti diatas, maka berbahagialah.
Tarik napas dalam-dalam dan ucapkan hamdalah atas keberhasilan anda :)

[Penting] Anda tidak dapat membuka mailbox / maildir anda sebelum ada email yang terkirim pada mailbox anda.Pesan kesalahan akan dimunculkan. Karena itulah anda harus mengirim welcome email pada setiap user baru.

Step 8: Test hasil konfigurasi anda
Selamat, anda telah menyelesaikan poin konfigurasi. Pada bagian ini anda anda hanya akan men-testing server yang telah anda konfig sebelumnya.
Sekarang kita akan membuat database pada domain yang akan kita coba, domain inilah yang kita jadikan sebagai domain percobaan untuk mengirim dan menerima email.
Buatlah domain baru dg nama lqman.org pada tabel domains, dan buatlah juga alamat email dan password baru pada tabel users.
Untuk lebih jelasnya ikutilah syntax mysql dibawah ini.

root@bajoel:~#mysql -u mailadmin -p mail
password:
mysql>INSERT INTO domains(domain) VALUES ('lqman.org');
mysql>INSERT INTO users(email,password) VALUES ('admin@lqman.org','admin');
mysql>INSERT INTO users(email,password) VALUES ('user@lqman.org','user');

Sekarang kita sudah punya sebuah virtual domain baru dg nama “lqman.org” dan 2 orang user, yaitu “admin@lqman.org” dan “user@lqman.org” yang masing-masing user ini mempunyai password “admin” dan “user”.

Jika anda tidak mempunyai MX record pada DNS server anda, maka kami menyarankan utk menambahkan MX record spt dibawah ini:
root@bajoel:~#mcedit /etc/bind/db.lqman.org

@ IN MX 5 mail.lqman.org.
mail IN A 10.122.1.22

IP-Address 10.122.1.22 hanya sebagai contoh saja, ubahlah sesuai dg IP-Address yg anda inginkan. Kemudian untuk mencoba pengiriman email dari smtp server anda, lakukan telnet pada localhost 25

root@bajoel:~#telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
220 mail.lqman.org ESMTP Postfix (Debian/GNU)

kemudian secara interaktif (pada mode telnet) berikan perintah spt dibawah ini:
Anda : ehlo virtual.test
Server : 250-mailtest
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250-AUTH=LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250 8BITMIME
Anda : mail from:admin@lqman.org
Server : 250 Ok
Anda : rcpt to:user@lqman.org
Server : 250 Ok
Anda : data
Server : 354 End data with .
Anda : Subject:Just for test
This is a test email
. (tanda titik)

Server : 250 Ok: queued as ABC1D1C123
Anda : quit
Server : 221 BYE

Jika respon server seperti tulisan diatas, berarti email dari admin@lqman.org kepada user@lqman.org sudah masuk ke dalam antrian untuk segera dikirimkan oleh postfix (SMTP server).
Lihatlah pada log file yang berada pada /var/log/mail.info
root@bajoel:~#tail -f /var/log/mail/info | ccze
pasti akan kita lihat bagin seperti dibawah ini :
Jul 24 21:48:28 myserver postfix/smtpd[9119]: connect from myserver[127.0.0.1]
Jul 24 21:48:48 myserver postfix/smtpd[9119]: F2C1B47BD: client=myserver[127.0.0.1]
Jul 24 21:48:52 myserver postfix/cleanup[9144]: F2C1B47BD: message-id=
Jul 24 21:48:52 myserver postfix/qmgr[9117]: F2C1B47BD: from=, size=313, nrcpt=1 (queue active)
Jul 24 21:48:52 myserver postfix/virtual[9148]: F2C1B47BD: to=, relay=virtual, delay=10, status=sent (delivered to maildir)

Jika anda melihat “status=sent (delivered to maildir)” maka email yang anda kirimkan sudah berhasil dikirimkan ke dalam Maildir user yang bersangkutan (user@lqman.org). Jalankan perintah find untuk melihat seluruh file dan direktori yang ada dibawah direktori “/home/mail”.
root@bajoel:~#find /home/mail
/home/mail/
/home/mail/lqman.org
/home/mail/lqman.org/user
/home/mail/lqman.org/user/cur
/home/mail/lqman.org/user/new
/home/mail/lqman.org/user/new/1170803794.V805I1c1fbM98807.bajoel
/home/mail/lqman.org/user/new/1170803833.V805I1c1feM87660.bajoel
/home/mail/lqman.org/user/tmp

Semuanya berjalan Lancar? Bagus.. :) Sebagai langkah terakhir, anda harus mencoba login pada email baru nada melalui tampilan web yg telah disediakan oleh squirrelmail. Pada percobaan ini, username yang bisa digunakan adalah “user@lqman.org” dengan password “user”

Step 9: Menambahkan User Baru pada Mail-Server
Pada step yang terakhir ini anda tinggal memasukkan / menambahkan pada database setiap username dan password user baru pada mailserver anda.
Untuk setiap virtual-domain baru, Tambahkan nama virtual-domain tsb pada tabel ‘domains’
Untuk setiap user baru, Tambahkan username (email address) dan password (plain text) pada tabel ‘users’
Untuk setiap forwarding, Tambahkan source dan destination mail address pada tabel ‘forwardings’, jika anda punya banyak destination, pisahkan dengan koma. Tabel ini digunakan untuk me-redirect setiap email pada system anda, termasuk juga anda bisa me-redirect local mail-address.

Contoh :
source destination Effect
test@my.domain philip@my.domain me-redirect emails untuk postmaster kepada philip.
@my.domain @another.domain Ini adalah re-direction thd seluruh domain. Setiap email yang dialamatkan
kpd suatu user pada domain ‘my.domain’ akan di-forward kepada user
yang sama pada domain ‘another.domain’.
Jadi mail kpd lqman@my.domain akan di-redirect kepada
lqman@another.domain.
jesper@my.domain dilbert@my.domain,dilbert@gmail.com mem-forward email yg dialamatkan untuk jesper@my.domain kepada
dilbert@my.domain dan dilbert@gmail.com

Step 10: Interface WebMail dg squirrelmail
Untuk mempermudah user anda dalam menggunakan mailserver yg sdh anda buat, maka tampilan web merupakan interface yang paling mudah. Oleh karena itu paket squirrelmail yang sudah kita install pada step pertama harus dikonfigurasi sesuai dg mailserver yg sdh kita buat.
Untuk menyesuaikan dg konfigurasi mailserver ini, cukup lakukan perintah squirrelmail-configure
root@bajoel:~#squirrelmail-configure
lalu lakukan sesuai dg langkah-langkah yang sudah tersedia. Langkah yang paling penting disini adalah saat menentukan “Server Settings” saja, selain itu tidak ada yang terlalu penting.
Pada saat menentukan “Server Settings”, lakukan perubahan spt dibawah ini

Secure IMAP (TLS) : false
Server software : courier

kemudian save opsi tersebut dg cara menekan tombol “s”, lalu keluar dari configurasi dg menekan tombol “q”.
Step 11: Menjadikan webmail kita sebagai VirtualHost baru
Buatlah file baru pada konfigurasi webserver anda (pada tutorial ini dipakai webserver apache2)
root@bajoel:~#touch /etc/apache2/sites/available/squirrelmail
kemudian tambahkan baris-baris dibawah ini :
NameVirtualHost 10.122.1.22:80

ServerAdmin admin@lqman.org
ServerName mail.lqman.org
DocumentRoot /usr/share/squirrelmail

Options FollowSymLinks
AllowOverride None

Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all

setelah itu, buatlah symbolic link ke direktori /etc/apache2/sites-enable/ dengan cara
root@bajoel:~#ln -s /etc/apache2/sites-available/squirrelmail.conf /etc/apache/sites-enable/001squirrelmail.conf
lalu cek konfigurasi apache2 dg syntax :
root@bajoel:~#apache2ctl configtest
dan jika muncul tulisan Syntax OK, maka restart-lah apache2 dg :
root@bajoel:~#apache2ctl restart


monitoring zimbra menggunakan mailgraph dan thttpd

Juni 22, 2010
Post Pic

Monitoring Traffik Email di Zimbra dengan Mailgraph

Pada 15 Jul 2009, di Seri Tutorial, oleh Cecep Mahbub

Monitoring traffik email keluar masuk dari zimbra menggunakan mailgraph. Selain traffik email keluar masuk, Anda juga bisa melihat traffik spam dan virus yang berhasil di tangani oleh zimbra.

Instal paket mailgraph dan thttpd (web server ringan, bisa juga diganti dengan apache jika Anda mau).

sudo apt-get install mailgraph thttpd

Mengkonfigurasi thttpd

Sunting berkas /etc/thttpd/thttpd.conf

# /etc/thttpd/thttpd.conf: thttpd configuration file
 
port=8888
dir=/var/www
nochroot
 
user=www-data
cgipat=/cgi-bin/*
 
throttles=/etc/thttpd/throttle.conf
logfile=/var/log/thttpd.log

Bisa Anda lihat di konfigurasi berkas di atas, port diganti ke port 8888, karena port 80 seharusnya sudah digunakan oleh webmail zimbra. Setelah itu, Anda restart thttpd.

sudo /etc/init.d/thttpd restart

Mengkonfigurasi Mailgraph

Sunting berkas /etc/default/mailgraph, pastikan isinya seperti yang saya tulis di bawah.

BOOT_START=
MAIL_LOG=/var/log/zimbra.log
IGNORE_LOCALHOST=true

Setelah itu, jangan lupa untuk merestart mailgraph.

sudo /etc/init.d/mailgraph restart

Langkah selanjutnya, saya tinggal menyalin berkas mailgraph.cgi ke lokasi cgi-bin di thttpd.

sudo mkdir /var/www/cgi-bin
sudo cp /usr/lib/cgi-bin/mailgraph.cgi /var/www/cgi-bin/

Sekarang Anda bisa melihat hasil monitoring di web, melalui alamat.

http://nama.atau.ip.server.zimbra.anda:8888/cgi-bin/mailgraph.cgi