Anda di halaman 1dari 16

How To Configure a Mail Server Using

Postfix, Dovecot, MySQL, and SpamAssassin


PENDAHULUAN
Dalam tutorial ini, kita akan mengkonfigurasi server email menggunakan Postfix, Dovecot,
MySQL dan SpamAssassin di Ubuntu 12.04.

Dengan mengikuti tutorial ini, Anda dapat menambahkan domain virtual domains, users, and
aliases .Selain itu, server virtual Anda akan aman dari spam hub.

PERSYARATAN
Sebelum mengatur server surat Anda, perlu VPS Anda memiliki yang berikut:

* Domain meneruskan ke server Anda (setup domain)

* MySQL diinstal dan dikonfigurasi (setup mysql)

* User dengan hak akses root (setup user baru- hilangkan langkah 5)

* Konfigurasikan dan identifikasi FQDN Anda (setup FQDN)

Opsi : SSL certificate (setup free signed ssl certificate)

Opsi : (Log in as root user)

Menginstal paket sebagai pengguna root berguna karena Anda memiliki semua hak akses.

sudo -i

Masukkan kata sandi user Anda. Setelah berhasil, Anda akan melihat bahwa $ simbol berubah
menjadi #.

LANGKAH 1 : INSTALL PACKAGE

apt-get install postfix postfix-mysql dovecot-core dovecot-imapd dovecot-


lmtpd dovecot-mysql

Ketika konfigurasi Postfix diminta pilih Situs Internet:


Konfigurasi postfix akan meminta tentang system mail name - Anda dapat menggunakan FDQN
atau domain utama Anda.

LANGKAH 2 : MEMBUAT DATABASE MYSQL, VIRTUAL DOMAINS, USERS AND


ALIASES

Setelah instalasi selesai, kita akan membuat database MySQL untuk mengkonfigurasi tiga tabel
berbeda: satu untuk domain, satu untuk user dan yang terakhir untuk aliases.

Kami akan memberi nama servermail database, tetapi Anda dapat menggunakan nama apa pun
yang Anda inginkan.
Buat servermail database :

mysqladmin -p create servermail

Login di MySQL root user

mysql -u root -p

Masukkan kata sandi root MySQL; jika berhasil Anda akan melihat:

mysql >

Pertama-tama kita perlu membuat user baru, khusus untuk otentikasi email, dan kami akan
memberikan SELECT permission.

mysql > GRANT SELECT ON servermail.* TO 'usermail'@'127.0.0.1' IDENTIFIED


BY 'mailpassword';

Setelah itu, kita perlu memuat ulang hak akses MySQL untuk memastikan izin itu berhasil
diterapkan

mysql > FLUSH PRIVILEGES;

Akhirnya kita perlu menggunakan database untuk membuat tabel dan memasukkan data

mysql> USE servermail;

Kami akan membuat tabel untuk spesifict domain yang dikenali sebagai official domain.

CREATE TABLE `virtual_domains` (


`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Kita akan membuat tabel untuk memasukkan user. Di sini Anda akan menambahkan alamat
email dan kata sandi. Penting untuk mengaitkan setiap user dengan domain.

CREATE TABLE `virtual_users` (


`id` INT NOT NULL AUTO_INCREMENT,
`domain_id` INT NOT NULL,
`password` VARCHAR(106) NOT NULL,
`email` VARCHAR(120) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`),
FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Akhirnya kita akan membuat tabel virtual aliases untuk menentukan semua email yang akan
Anda teruskan ke email lainnya.

CREATE TABLE `virtual_aliases` (


`id` INT NOT NULL AUTO_INCREMENT,
`domain_id` INT NOT NULL,
`source` varchar(100) NOT NULL,
`destination` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Virtual Domain

Di sini kita akan memperkenalkan domain Anda di dalam tabel virtual_domains. Anda dapat
menambahkan semua domain yang Anda inginkan, tetapi dalam tutorial ini kami akan
memperkenalkan hanya domain utama (example.com) dan FQDN Anda
(hostname.example.com).

INSERT INTO `servermail`.`virtual_domains`


(`id` ,`name`)
VALUES
('1', 'example.com'),
('2', 'hostname.example.com');

Virtual Email

Kita akan memasukkan alamat email dan kata sandi yang terkait untuk setiap domain. Pastikan
Anda mengubah semua info dengan informasi spesifik Anda.

INSERT INTO `servermail`.`virtual_users`


(`id`, `domain_id`, `password` , `email`)
VALUES
('1', '1', ENCRYPT('firstpassword', CONCAT('$6$', SUBSTRING(SHA(RAND()), -
16))), 'email1@example.com'),
('2', '1', ENCRYPT('secondpassword', CONCAT('$6$', SUBSTRING(SHA(RAND()),
-16))), 'email2@example.com');
Virtual Aliases

Kami akan memasukkan alamat email (source) yang akan kami teruskan ke alamat email lain
(destination).

INSERT INTO `servermail`.`virtual_aliases`


(`id`, `domain_id`, `source`, `destination`)
VALUES
('1', '1', 'alias@example.com', 'email1@example.com');

Keluar dari MySQL

mysql > exit

LANGKAH 3 : KONFIGURASI POSTFIX

Kita akan mengkonfigurasi Postfix untuk menghandle koneksi SMTP dan mengirim pesan setiap
user memasukkan database MySQL.

Pertama, kita perlu membuat salinan file default, jika Anda ingin kembali ke konfigurasi default.

cp /etc/postfix/main.cf /etc/postfix/main.cf.orig

Buka main.cf file untuk memodifikasi :

nano /etc/postfix/main.cf

Pertama kita perlu mengomentari Parameter TLS dan menambahkan parameter lainnya. Dalam
tutorial ini, kami menggunakan sertifikat SSL Gratis dan jalur yang disarankan dalam tutorial
(link), tetapi Anda dapat memodifikasi tergantung konfigurasi pribadi Anda.

# TLS parameters
#smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
#smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
#smtpd_use_tls=yes
#smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
#smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_tls_cert_file=/etc/ssl/certs/dovecot.pem
smtpd_tls_key_file=/etc/ssl/private/dovecot.pem
smtpd_use_tls=yes
smtpd_tls_auth_only = yes

Kemudian kita akan menambahkan parameter berikut di bawah pengaturan TLS yang telah kita
ubah pada langkah sebelumnya:
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions =
permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination

Kita perlu mengomentari pengaturan default mydestination dan menggantinya dengan localhost.
Perubahan ini memungkinkan VPS Anda untuk menggunakan domain virtual di dalam tabel
MySQL.

#mydestination = example.com, hostname.example.com, localhost.example.com,


localhost
mydestination = localhost

Verifikasi bahwa parameter myhostname diatur dengan FQDN Anda.

myhostname = hostname.example.com

Tambahkan baris berikut untuk pengiriman local mail ke semua virtual domain yang terdaftar di
dalam tabel MySQL.

virtual_transport = lmtp:unix:private/dovecot-lmtp

Terakhir, kita perlu menambahkan tiga parameter ini untuk menunjukkan Postfix untuk
mengkonfigurasi domain virtual, user, dan aliases.

virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-
domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf

Catatan: Bandingkan perubahannya dengan file berikut untuk mendeteksi kesalahan

https://www.dropbox.com/s/x9fpm9v1dr86gkw/etc-postfix-main.cf.txt

Kita akan membuat tiga file terakhir yang kita tambahkan di file main.cf untuk menunjukkan
Postfix bagaimana terhubung dengan MySQL.

Pertama kita perlu membuat file mysql-virtual-mailbox-domains.cf. Penting untuk mengubah


nilai tergantung konfigurasi pribadi Anda.

nano /etc/postfix/mysql-virtual-mailbox-domains.cf
user = usermail
password = mailpassword
hosts = 127.0.0.1
dbname = servermail
query = SELECT 1 FROM virtual_domains WHERE name='%s'

Restart Postfix

service postfix restart

Kita perlu memastikan bahwa Postfix menemukan domain Anda, jadi kita perlu mengujinya
dengan perintah berikut. Jika berhasil, itu harus return 1:

postmap -q example.com mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf

Maka kita perlu membuat file mysql-virtual-mailbox-maps.cf.

nano /etc/postfix/mysql-virtual-mailbox-maps.cf

user = usermail
password = mailpassword
hosts = 127.0.0.1
dbname = servermail
query = SELECT 1 FROM virtual_users WHERE email='%s'

Restart Postfix lagi

service postfix restart

Saat ini kita akan memastikan Postfix menemukan alamat email pertama Anda dengan perintah
berikut. Ini harus return 1 jika berhasil:

postmap -q email1@example.com mysql:/etc/postfix/mysql-virtual-mailbox-


maps.cf

Kita akan buat file terakhir untuk mengkonfigurasi koneksi antara Postfix dan MySQL.

nano /etc/postfix/mysql-virtual-alias-maps.cf

user = usermail
password = mailpassword
hosts = 127.0.0.1
dbname = servermail
query = SELECT destination FROM virtual_aliases WHERE source='%s'
Restart Postfix

service postfix restart

Kita perlu memverifikasi Postfix dapat menemukan aliases Anda. Masukkan perintah berikut dan
itu akan mengembalikan mail yang diteruskan ke aliases:

postmap -q alias@example.com mysql:/etc/postfix/mysql-virtual-alias-


maps.cf

Jika Anda ingin mengaktifkan port 587 untuk terhubung dengan aman dengan klien email, Anda
perlu memodifikasi file /etc/postfix/master.cf

nano /etc/postfix/master.cf

Kita perlu menghapus tanda komentar pada baris ini dan menambahkan parameter lainnya:

submission inet n - - - - smtpd


-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject

Dalam beberapa kasus, kita perlu me-restart Postfix untuk memastikan port 587 terbuka.

service postfix restart

LANGKAH 4 : KONFIGURASI DOVECOT

Kita akan menyalin 7 file yang akan dimodifikasi, sehingga Anda dapat mengembalikannya ke
default jika perlu. Masukkan perintah berikut satu per satu:

cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig
cp /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.orig
cp /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.orig
cp /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/dovecot-
sql.conf.ext.orig
cp /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-
master.conf.orig
cp /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf.orig

Edit konfigurasi file dengan dovecot

nano /etc/dovecot/dovecot.conf
SpamAssassin akan menilai setiap mail dan jika ia menentukan email ini lebih besar dari 5.0
pada cek spamnya, maka secara otomatis akan dianggap sebagai spam. Anda bisa menggunakan
parameter berikut untuk mengonfigurasi aturan anti-spam:

rewrite_header Subject ***** SPAM _SCORE_ *****


report_safe 0
required_score 5.0
use_bayes 1
use_bayes_rules 1
bayes_auto_learn 1
skip_rbl_checks 0
use_razor2 0
use_dcc 0
use_pyzor 0

Kita perlu mengubah file /etc/postfix/master.cf Postfix untuk memberi tahu bahwa setiap email
akan diperiksa dengan SpamAssassin.

nano /etc/postfix/master.cf

Maka kita perlu menemukan baris berikut dan menambahkan filter spamassassin:

!include conf.d/*.conf

Kita akan mengaktifkan protokol (tambahkan pop3 jika Anda mau) di bawah! Include_try

/usr/share/dovecot/protocols.d/*.protocol line .

!include_try /usr/share/dovecot/protocols.d/*.protocol
protocols = imap lmtp

Catatan: Bandingkan perubahannya dengan file berikut untuk mendeteksi error :

https://www.dropbox.com/s/wmbe3bwy0vcficj/etc-dovecot-dovecot.conf.txt

Kemudian kita akan mengedit file konfigurasi email:

nano /etc/dovecot/conf.d/10-mail.conf

Temukan baris mail_location, batalkan komentarnya, dan masukkan parameter berikut:


mail_location = maildir:/var/mail/vhosts/%d/

Temukan baris mail_privileged_group, batalkan komentarnya, dan tambahkan parameter email


seperti ini:

mail_privileged_group = mail

Catatan: Bandingkan perubahannya dengan file berikut untuk mendeteksi error:

https://www.dropbox.com/s/hnfeieuy77m5b0a/etc.dovecot.conf.d-10-
mail.conf.txt

IZIN VERIFIKSI

Enter command

ls -ld /var/mail

Pastikan izinnya seperti ini:

drwxrwsr-x 3 root vmail 4096 Jan 24 21:23 /var/mail

Kita akan membuat folder untuk setiap domain yang kami daftarkan di tabel MySQL:

mkdir -p /var/mail/vhosts/example.com

Buat pengguna dan grup vmail dengan id 5000

groupadd -g 5000 vmail


useradd -g vmail -u 5000 vmail -d /var/mail

Kita perlu mengubah pemilik folder / var / mail ke vmail user

chown -R vmail:vmail /var/mail

Maka kita perlu mengedit file /etc/dovecot/conf.d/10-auth.conf:

nano /etc/dovecot/conf.d/10-auth.conf

Uncomment teks biasa dan tambahkan baris ini:

disable_plaintext_auth = yes

Ubah parameter auth_mechanisms:

auth_mechanisms = plain login


Comment garis ini :

#!include auth-system.conf.ext

Catatan: Bandingkan perubahannya dengan file berikut untuk mendeteksi error:

https://www.dropbox.com/s/4h472nqrj700pqk/etc.dovecot.conf.d.10-
auth.conf.txt

Kita perlu membuat file /etc/dovecot/dovecot-sql.conf.ext dengan informasi Anda untuk


otentikasi:

nano /etc/dovecot/conf.d/auth-sql.conf.ext

Masukkan kode berikut dalam file:

passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
driver = static
args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
}

Kita perlu memodifikasi file /etc/dovecot/dovecot-sql.conf.ext dengan informasi khusus MySQL


kita:

nano /etc/dovecot/dovecot-sql.conf.ext

Uncomment pada parameter driver dan atur mysql sebagai parameter:

driver = mysql

Uncomment pada garis sambungkan dan perkenalkan informasi spesifik MySQL Anda:

connect = host=127.0.0.1 dbname=servermail user=usermail


password=mailpassword

Uncomment pada baris default_pass_scheme dan ubah menjadi SHA-512.

default_pass_scheme = SHA512-CRYPT

Uncomment pada baris password_query dan tambahkan informasi ini:


password_query = SELECT email as user, password FROM virtual_users WHERE
email='%u';

Catatan: Bandingkan perubahannya dengan file berikut untuk mendeteksi error:

https://www.dropbox.com/s/48a5r0mtgdz25cz/etc.dovecot.dovecot-
sql.conf.ext.txt

Ubah owner dan grup folder dovecot ke vmail user:

chown -R vmail:dovecot /etc/dovecot


chmod -R o-rwx /etc/dovecot

Buka dan modifikasi file /etc/dovecot/conf.d/10-master.conf (hati-hati karena parameter yang


berbeda akan diubah).

nano /etc/dovecot/conf.d/10-master.conf

##Uncomment inet_listener_imap and modify to port 0


service imap-login {
inet_listener imap {
port = 0
}

#Create LMTP socket and this configurations


service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
mode = 0600
user = postfix
group = postfix
}
#inet_listener lmtp {
# Avoid making LMTP visible for the entire internet
#address =
#port =
#}
}

Ubah parameter unix_listener ke service_auth seperti ini:


service auth {

unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}

unix_listener auth-userdb {
mode = 0600
user = vmail
#group =
}

#unix_listener /var/spool/postfix/private/auth {
# mode = 0666
#}

user = dovecot
}

Modifikasi servis auth_worker seperti berikut ?

service auth-worker {
# Auth worker process is run as root by default, so that it can access
# /etc/shadow. If this isn't necessary, the user should be changed to
# $default_internal_user.
user = vmail
}

Catatan: Bandingkan perubahannya dengan file berikut untuk mendeteksi error:

https://www.dropbox.com/s/g0vnt233obh6v2h/etc.dovecot.conf.d.10-
master.conf.txt

Kita akan memodifikasi file konfigurasi SSL dari Dovecot (lewati langkah ini jika Anda akan
menggunakan konfigurasi default).
# nano /etc/dovecot/conf.d/10-ssl.conf

Ubah parameter ssl menjadi diperlukan:

ssl = required

Dan modifikasi path untuk ssl_cert dan ssl_key:

ssl_cert = </etc/ssl/certs/dovecot.pem

ssl_key = </etc/ssl/private/dovecot.pem

Restart Dovecot

service dovecot restart

Anda harus memeriksa bahwa port 993 terbuka dan berfungsi (jika Anda mengaktifkan pop3;
Anda juga harus memeriksa port 995).

telnet example.com 993

- Username: email1@example.com
- Password: email1's password
- IMAP: example.com
- SMTP: example.com

LANGKAH 5 : KONFIGUSASI SPAMASSASSIN

Pertama , kita butuh install SpamAssassin

apt-get install spamassassin spamc

Kemudian kita harus membuat akun user untuk spamassassin

adduser spamd --disabled-login

Untuk berhasil mengkonfigurasi SpamAssassin, perlu untuk membuka dan mengubah


pengaturan konfigurasi.

nano /etc/default/spamassassin

Kita perlu mengubah parameter ENABLED untuk mengaktifkan daemon SpamAssassin.

ENABLED=1

Kita perlu mengkonfigurasi parameter home dan options.


SPAMD_HOME="/home/spamd/"
OPTIONS="--create-prefs --max-children 5 --username spamd --helper-home-
dir ${SPAMD_HOME} -s ${SPAMD_HOME}spamd.log"

Maka kita perlu menentukan parameter PID_File seperti ini:

PIDFILE="${SPAMD_HOME}spamd.pid"

Terakhir,Kita perlu menentukan bahwa aturan SpamAssassin akan diperbarui secara otomatis.

CRON=1

Catatan: Bandingkan perubahannya dengan file berikut untuk mendeteksi error:

https://www.dropbox.com/s/ndvpgc2jipdd4bk/etc.default.spamassassin.txt

Kita perlu membuka /etc/spamassassin/local.cf untuk mengatur aturan anti-spam.

nano /etc/spamassassin/local.cf

SpamAssassin akan menilai setiap mail dan jika ia menentukan email ini lebih besar dari 5.0
pada cek spamnya, maka secara otomatis akan dianggap sebagai spam. Anda bisa menggunakan
parameter berikut untuk mengonfigurasi aturan anti-spam:

rewrite_header Subject ***** SPAM _SCORE_ *****


report_safe 0
required_score 5.0
use_bayes 1
use_bayes_rules 1
bayes_auto_learn 1
skip_rbl_checks 0
use_razor2 0
use_dcc 0
use_pyzor 0

Kita perlu mengubah file /etc/postfix/master.cf Postfix untuk memberi tahu bahwa setiap email
akan diperiksa dengan SpamAssassin.

nano /etc/postfix/master.cf

Maka kita perlu menemukan baris berikut dan menambahkan filter spamassassin:

smtp inet n - - - - smtpd


-o content_filter=spamassassin
Kita perlu menambahkan parameter berikut:

spamassassin unix - n n - - pipe


user=spamd argv=/usr/bin/spamc -f -e
/usr/sbin/sendmail -oi -f ${sender} ${recipient}

Penting untuk memulai SpamAssassin dan memulai kembali Postfix untuk mulai memverifikasi
spam dari email.

service spamassassin start


service postfix restart

Anda mungkin juga menyukai