Email - Instalasi dan Konfigurasi Mail Server dengan Postfix, Dovecot dan Roundcube
Pada artikel ini saya akan melakukan instalasi dan konfigurasi untuk mail server menggunakan Postfix, Dovecot dan Roundcube
Arman Dwi Pangestu
23 Agustus 2023•1 menit baca
Pendahuluan
Postfix adalah sebuah service untuk Mail Transfer Agent (MTA) untuk me-routing atau mengarahkan dan mengirim surat elektronik (email), Postfix menggunakan protocol SMTP (Simple Mail Transfer Protocol). Dovecot meruapakan sebuah service untuk Mail Delivery Agent (MDA), Dovecot menggunakan protocol IMAP dan POP3. Sedangkan Roundcube adalah sebuah service untuk Mail User Agent (MUA).
Kedua open-souce aplikasi tersebut (Postfix dan Dovecot) dapat berjalan dengan baik dengan Roundcube, sebuah email client yang terkenal
karena penggunaan Ajax yang cerdas. Dalam artikel kali ini, saya akan menginstal dan melakukan konfigurasi untuk Postfix, Dovecot dan Roundcube di Sistem Operasi Ubuntu 22.04. Artikel ini menggunakan nama domain example.com
, ip public 112.16.21.20
dan nama server mail.example.com
Persyaratan
Sebelum melakukan eksekusi, terdapat beberapa hal yang perlu disiapkan, diantaranya adalah:
- DNS Record
Untuk persiapan ini, kita harus membuat beberapa DNS record diantaranya adalah
Catatan:
Perhatikan value
IP Public
dannama domain
, sesuaikan dengan konfigurasi kalian. Apabila kalian tidak dapat menambahkan reverse zone (sepertiip_public.in-addr.arpa
), maka kalian harus meminta ke ISP (Internet Service Provider) yang kalian gunakan untuk menambahkannyaOptional:
Anda dapat menambahkan record subdomain untuk masing-masing service seperti
smtp.example.com
,pop.example.com
,imap.example.com
Zone Name Type TTL Value eaxmple.com smtp CNAME 3600 mail.example.com pop CNAME 3600 mail.example.com imap CNAME 3600 mail.example.com atau
Zone Name Type TTL Value eaxmple.com smtp A 3600 112.16.21.20 pop A 3600 112.16.21.20 imap A 3600 112.16.21.20
Install dan Konfigurasi Postfix
Untuk melakukan install Postfix, kalian bisa menjalankan perintah berikut ini
sudo apt install -y postfix
maka akan muncul Postfix Configuration seperti gambar dibawah ini, tekan TAB
dan ENTER
untuk melanjutkan
Pada menu selanjutnya, pilih Internet Site
kemudian tekan TAB
dan ENTER
Selanjutnya masukan nama email sistem, yang merupakan nama domain anda. Misalnya, nama servernya adalah email.example.com
, jadi masukan example.com
di sini.
langkah selanjutnya adalah melakukan backup konfigurasi postfix di PATH /etc/postfix/main.cf
dengan cara
sudo mv /etc/postfix/main.cf /etc/postfix/main.cf.orig
selanjutnya buat konfigurasi baru
sudo vim /etc/postfix/main.cf
kemudian isikan konfigurasi dibawah ini
Catatan:
Ganti
example.com
dengan domain anda dan pastikan value darismtpd_tls_cert_file
dansmtpd_tls_key_file
diarahkan ke SSL anda
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
append_dot_mydomain = no
readme_directory = no
compatibility_level = 3.6
# TLS parameters
smtp_use_tls=yes
smtp_tls_security_level=may
smtp_tls_CApath=/etc/ssl/certs
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_use_tls=yes
smtpd_tls_security_level=may
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_tls_cert_file=/etc/letsencrypt/live/example.com/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/example.com/privkey.pem
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
virtual_transport = lmtp:unix:private/dovecot-lmtp
virtual_mailbox_domains = /etc/postfix/virtual_mailbox_domains
myhostname = mail.example.com
myorigin = /etc/mailname
mydestination = $myhostname, mail.example.com, localhost.example.com, localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
Membuat Virtual Mail Box Domains
- Pada file konfigurasi
main.cf
diatas, terdapat value darivirtual_mailbox_domains
untuk menginstruksikan postfix untuk mencari domain email di file/etc/postfix/virtual_mailbox_domains
. Maka buat file tersebut dengan cara
sudo vim /etc/postfix/virtual_mailbox_domains
- Isikan konfigurasi berikut ke dalam file tersebut dan ganti
example.com
dengan nama domain anda
example.com
- Gunakan perintah
postmap
untuk mengubah/etc/postfix/virtual_mailbox_domains
ke format yang dapat dikenali oleh Postfix. Jalankan perintah ini setiap Anda mengedit file, misalnya setelah menambahkan lebih banyak nama domain ke file tersebut.
sudo postmap /etc/postfix/virtual_mailbox_domains
- Ubah konfigurasi file
/etc/postfix/master.cf
untuk enable SMTP Service
sudo vim /etc/postfix/master.cf
- Cari entri dibawah ini
...
#submission inet n - y - - smtpd
...
- Hapus symbol
#
atau comment-nan pada awal baris, sehingga menjadi
...
submission inet n - y - - smtpd
...
Install dan Konfigurasi Dovecot
- Untuk melakukan install Dovecot dan semua dependency package nya agar bisa menjalankan imap, pop3, dan lmtp service, kalian bisa menjalankan perintah berikut ini
sudo apt install -y dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd
- edit file konfigurasi
/etc/dovecot/conf.d/10-mail.conf
untuk menginstruksikan Dovecot pada direktori untuk mencari email.
sudo vim /etc/dovecot/conf.d/10-mail.conf
- Cari entri dibawah ini
...
mail_location = mbox:~/mail:INBOX=/var/mail/%u
...
- ubah menjadi
...
mail_location = maildir:/var/mail/vhosts/%d/%n
...
Simpan dan tutup file. %d
mewakili nama domain, dan %n
mewakili nama pengguna atau user. Ini berarti Anda harus membuat subdirektori
di /var/mail/vhost
untuk setiap domain yang menerima email dari server anda.
- Membuat sub-direktori dan ganti example.com dengan nama domain anda
Catatan
Ulangi perintah dibawah ini untuk setiap nama domain lain yang ingin anda terima emailnya di server anda. Misalkan jika ingin menerima email untuk domain example.net jalankan perintah berikut ini
sudo mkdir -p /var/mail/vhosts/example.net
sudo mkdir -p /var/mail/vhosts/example.com
- Membuat Vmail user dan group untuk keperluan service dovecot
Membuat vmail group
sudo groupadd -g 5000 vmail
Membuat vmail user kemudian masukan ke dalam vmail group
sudo useradd -r -g vmail -u 5000 vmail -d /var/mail/vhosts -c "virtual mail user"
Ganti ownership folder /var/mail/vhosts
agar menjadi milik vmail user dan group
sudo chown -R vmail:vmail /var/mail/vhosts/
- Ubah konfigurasi dovecot pada file
10-master.conf
sudo vim /etc/dovecot/conf.d/10-master.conf
- Temukan entri dibawah ini
...
inet_listener imaps {
#port = 993
#ssl = yes
}
...
Hapus tanda #
sebelum entri port dan ssl, seperti yang ditunjukan dibawah ini, untuk memungkinkan dovecot menggunakan port 993 dan
SSL untuk secure IMAP.
...
inet_listener imaps {
port = 993
ssl = yes
}
...
- Kemudian temukan juga entri dibawah ini
...
inet_listener pop3s {
#port = 995
#ssl = yes
}
...
Hapus tanda #
sebelum port dan ssl
...
inet_listener pop3s {
port = 995
ssl = yes
}
...
- Enable lmtp service, temukan entri dibawah ini
...
service lmtp {
unix_listener lmtp {
#mode = 0666
}
# Create inet listener only if you can't use the above UNIX socket
#inet_listener lmtp {
# Avoid making LMTP visible for the entire internet
#address =
#port =
#}
}
...
- Ubah menjadi seperti berikut ini
...
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
mode = 0600
user = postfix
group = postfix
}
}
...
- Temukan entri dovecot authentication socket
...
# Postfix smtp-auth
#unix_listener /var/spool/postfix/private/auth {
# mode = 0666
#}
...
- Ubah menjadi seperti berikut ini
...
#Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
...
Simpan dan tutup file
Konfigurasi dovecot untuk menggunakan secure authentication. Ubah konfigurasi dovecot pada file
10-auth.conf
sudo vim /etc/dovecot/conf.d/10-auth.conf
- Temukan entri dibawah ini
# disable_plaintext_auth = yes
Uncomment atau hapus tanda #
disable_plaintext_auth = yes
- Temukan entri dibawah ini
auth_mechanisms = plain
Ubah mekanisme authentication dari plain menjadi plain login
auth_mechanisms = plain login
- Disable dovecot default authentication behavior yang mengharuskan pengguna memiliki akun sistem untuk menggunakan layanan email. Cari entri dibawah ini
!include auth-system.conf.ext
berikan komentar atau simbol #
di awal baris
#!include auth-system.conf.ext
- cari juga entri dibawah ini
#!include auth-passwdfile.conf.ext
hapus simbol #
di awal baris untuk enable Dovecot menggunakan password file
!include auth-passwdfile.conf.ext
Simpan dan tutup file.
Mengubah dovecot password file auth-passwdfile.conf.ext
sudo vim /etc/dovecot/conf.d/auth-passwdfile.conf.ext
Isi dalam file kurang lebih mirip seperti dibawah ini
passdb {
driver = passwd-file
args = scheme=CRYPT username_format=%u /etc/dovecot/users
}
userdb {
driver = passwd-file
args = username_format=%u /etc/dovecot/users
}
Ubah isian file tersebut, seperti berikut ini
passdb {
driver = passwd-file
args = scheme=PLAIN username_format=%u /etc/dovecot/dovecot-users
}
userdb {
driver = static
args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
}
Simpan dan tutup file
- Membuat /etc/dovecot/dovecot-users password file. File ini adalah plain text database untuk menampung email user di server anda.
sudo vim /etc/dovecot/dovecot-users
Tambahkan user yang ingin anda gunakan untuk email service dengan mengikuti format seperti dibawah ini. Ganti EXAMPLE_PASSWORD dengan kata sandi yang kuat. Dan juga, ganti example.com dengan nama domain anda.
admin@example.com:{plain}EXAMPLE_PASSWORD
info@example.com:{plain}EXAMPLE_PASSWORD
billing@example.com:{plain}EXAMPLE_PASSWORD
Simpan dan tutup file
- Konfigurasi Dovecot user untuk menggunakan SSL certificate. Buka file
/etc/dovecot/conf.d/10-ssl.conf
sudo vim /etc/dovecot/conf.d/10-ssl.conf
temukan entri berikut
ssl = yes
ubah value dari ssl dari yes
menjadi required
ssl = required
Temukan dua entri berikut ini
#ssl_cert = </etc/dovecot/dovecot.pem
#ssl_key = </etc/dovecot/private/dovecot.pem
ubah kedua entri diatas dan pastikan mengarah ke SSL certificate untuk domain anda. Misalnya, jika Anda menggunakan sertifikat Let's Encrypt, entri Anda akan serupa dengan yang ditunjukan dibawah ini. Ganti `example.com`` dengan nama domain anda.
ssl_cert = </etc/letsencrypt/live/example.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/example.com/privkey.pem
Simpan dan tutup file
Restart service postfix dan dovecot agar menggunakan konfigurasi terbaru
sudo systemctl restart postfix dovecot
Install dan Konfigurasi Roundcube
Untuk dapat mengakses Postfix dan Dovecot server, kita perlu sebuah mail client. Contohnya disini menggunakan roundcube
sudo apt install -y roundcube
Tekan ENTER
untuk konfigurasi database untuk menggunakan roundcube
Pada menu selanjutnya, masukan MySQL password untuk menggunakan roundcube
Tekan TAB
dan ENTER
Ulangi dengan password yang sama kemudian tekan TAB
dan ENTER
untuk melanjutkan.
Buat konfigurasi nginx untuk virtual host roundcube
sudo vim /etc/nginx/conf.d/mail.example.com.conf
Isikan konfigurasi seperti dibawah ini, sesuaikan dengan nama domain anda
server {
listen 80;
listen [::]:80;
server_name mail.example.com;
root /var/www/roundcube/;
index index.php index.html index.htm;
error_log /var/log/nginx/roundcube.error;
access_log /var/log/nginx/roundcube.access;
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /.well-known/acme-challenge {
allow all;
}
location ~ ^/(README|INSTALL|LICENSE|CHANGELOG|UPGRADING)$ {
deny all;
}
location ~ ^/(bin|SQL)/ {
deny all;
}
# A long browser cache lifetime can speed up repeat visits to your page
location ~* \.(jpg|jpeg|gif|png|webp|svg|woff|woff2|ttf|css|js|ico|xml)$ {
access_log off;
log_not_found off;
expires 360d;
}
}
Simpan dan tutup file, kemudian test Nginx konfigurasi.
sudo nginx -t
Jika test berhasil, restart service nginx untuk menerapkan konfigurasi terbaru
sudo systemctl reload nginx
Sekarang anda dapat membuka Roundcube dengan web-base di URL http://mail.example.com
Mengaktifkan HTTPS
Sangat disarankan agar anda menggunakan TLS untuk enkripsi email web anda. Kita dapat mengaktifkan HTTPS dengan memasang sertifikat TLS gratis yang dikeluarkan dari Let's Encrypt. Jalankan perintah berikut untuk menginstall Let's Encrypt
sudo apt install certbot -y
Jika menggunakan nginx, anda juga perlu menginstall cerbot nginx plugin
sudo apt install python3-certbot-nginx -y
Selanjutnya, jalankan perintah berikut ini untuk mendapatkan dan menginstal sertifikat TLS
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email admin@example.comf -d mail.example.com
Jika menggunakan apache, install certbot apache plugin
sudo apt install python3-certbot-apache -y
Dan jalankan perintah berikut ini untuk mendapatkan dan menginstal sertifikat TLS
sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email admin@example.comf -d mail.example.com
Test Email Service
Untuk login email server menggunakan Roundcube, masukan URL pada web browser anda seperti berikut
https://mail.example.com
Anda dapat melihat tampilan yang sama seperti ini. Masukan username dan password yang telah di definisikan pada file /etc/dovecot/dovecot-users