Oke agan2 sekalian jumpa lagi kita hari ini ^_^.
Kali ini kita akan membahas cara membuat mailserver
berbasiskan posfix dan courier dengan memanfaatkan mysql sebagai penyimpan data
username & password bagi tiap-tiap user.
Tetapi terlebih dahulu seperti biasa saya akan menjelaskan sedikit kepada agan2
sekalian mengenai posfix. Posfix adalah mail transfer agent bebas dan terbuka.
Posfix merupakan mail transfer agent default untuk sejumlah sistem operasi
bertipe unix.
Posfix pada awalnya dibuat oleh Wietse Venema sewaktu ia bekerja
di IBM Thomas J. Watson Research Center, dan sampai sekarang masih aktif
dikembangkan. Posfix pertama kali dirilis pada pertengahan 1999.
Posfix dibuat
dengan sistem jaringan daemon dimana setiap daemon hanya mengerjakan satu tugas
dengan menggunakan akses minimum ke sistem. Dengan begitu, jika ada satu daemon
yang bermasalah maka hanya akan memengaruhi daemon tersebut.
Beberapa Fitur yang dimiliki oleh Posfix, yaitu :
- Performance. Posfix mampu melayani sejuta
email dalam sehari.
- Kompatibilitas. Posfix sangat kompatibel
dengan sendmail (yang banyak digunakan orang sebagai MTA di UNIX).
- Terdiri dari beberapa program kecil yang
saling tidak percaya. Jika sendmail hanya mempunyai satu program besar dan satu
file konfigurasi besar, maka Posfix memiliki program-program kecil yang
menjalankan tugasnya secara spesifik.
- Keamanan. Posfix dijalankan dengan proteksi
bertingkat, oleh program-program kecil yang saling tidak percaya. Masing-masing
program dijalankan oleh user khusus (bukan setuid).
- Multiple Transport. Posfix dapat mengirim
surat dengan modus SMTP (Simple Mail Transfer Protocol) dan UUCP (Unix to Unix
Copy Protocol) sekaligus.
- Mendukung format maildir. Maildir adalah
format boks penyimpanan surat dalam bentuk folder dari pada berbentuk satu fila
(mbox).
- Kemudahan konfigurasi. Meskipun posfix
terdiri dari banyak program kecil, namun hanya memiliki satu file konfigurasi
yang mudah untuk diseting yakni /etc/postfix/main.cfg
Oke agan2 sekalian langsung aja ya kita mulai, berikut yang
harus dilakukan agan2 sekalian :
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
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';
Membuat file2 baru
sebagai penunjuk ke database mysql
Buat file baru dg nama mysql-virtual_domains.cf yg berisi :
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:~#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:~#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:~#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
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
Mengkonfigurasi
postfix sbg server SMTP
Edit file main.cf (ini adalah file konfigurasi utama dari postfix) menjadi :
root@bajoel:~#mcedit
/etc/postfix/main.cf
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
root@bajoel:~#/etc/init.d/postfix
restart
root@bajoel:~#postfix check
Jika
tidak muncul suatu pesan kesalahan, berarti anda sukses…….
Coba mengakses port 25 (SMTP) dengan telnet
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
Mengaktifkan
fasilitas authentikasi pada postfix (Auth-SMTP)
Menyuruh Postfix untuk menggunakan SASL/MySQL, dg cara buat file konfigurasi baru
dg nama /etc/postfix/sasl/smtpd.conf yang berisi :
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 dan 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.*
Mengkonfigurasi
courier sebagai server POP3 / IMAP
Edit file /etc/courier/authdaemonrc, ubah parameter authmodulelist menjadi
root@bajoel:~#mcedit
/etc/courier/authdaemonrc
authmodulelist="authmysql"
Lalu
edit file /etc/courier/authmysqlrc, ubah beberapa parameter menjadi seperti di
bawah ini :
root@bajoel:~#mcedit
/etc/courier/authmysqlrc
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
root@bajoel:~#/etc/init.d/courier-authdaemon
restart
Jika
tidak muncul suatu pesan kesalahan, berarti anda sukses…….
Coba mengakses port 110 (POP3) dengan telnet
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 Alhamdulillah 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.
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 (Mail eXchange) 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 port 25 (SMTP) sebagai berikut :
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 yg di bold 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”
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
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”.
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 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
Dan
silakan menikmati mail server anda melalui squirrelmail (wab based mail
client).