Wednesday, February 13, 2013

0 Installasi mailserver dengan postfix and courier menggunakan authentikasi mysql

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 )

    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). 

sumber : http://lqman.wordpress.com/2007/01/25/email-server-with-postfix-and-courier/

0 Comments

Bagaimana Pendapat Anda ?

Followers