Sebelum kita melakukan konfigurasi mail server, pastikan kita sudah mengkonfigurasi MX Record di DNS Server, MX Record ini nantinya kita arahkan ke server email kita contohnya seperti ini
@ IN MX 5 mail.sysidn.id.
mail IN A 172.23.0.151
Tahap pertama kita lakukan installasi MTA (Mail Transfer Agent) yang berfungsi untuk melakukan pengiriman email dengan protokol SMTP. Ada banyak software yang bisa digunakan seperti mailq,sendmail,smtpd. Kali ini kita menggunakan software yang umum digunakan yaitu postfix.
Installasi Postfix
dnf install postfix -y
Menjalankan dan Mengaktifkan Layanan
systemctl start postfix
systemctl enable postfix
Jika kita menggunakan firewalld, tambahkan rule baru untuk mengizinkan protokol smtp
firewall-cmd --add-service=smtp --permanent
firewall-cmd --reload
Konfigurasi Postfix
Sebelum melakukan konfigurasi pastikan hostname server kita sudah berformat FQDN(Fully Qualified Domain). Ubah nama hostname dan tambahkan FQDN ke hosts
[root@mail ~]# vi /etc/hostname
.....
mail
.....
[root@mail ~]# vi /etc/hosts
.....
172.23.0.151 mail.sysidn.id mail
.....
[root@mail ~]# vi /etc/postfix/main.cf
.....
##Ubah beberapa konfigurasi berikut
myhostname = mail.sysidn.id
mydomain = sysidn.id
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
myorigin = $mydomain
inet_interfaces = ipv4
#Masukkan Alamat IP Lokal kita
mynetworks = 127.0.0.0/8, 172.23.0.0/20
home_mailbox = Maildir/
#Limit maksimal ukuran email, misal 10MB
message_size_limit = 10240000
#SMTP-Auth Setting untuk MUA
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_mynetworks, permit_auth_destination, permit_sasl_authenticated, reject
.....
Selanjutnya restart layanan postfix, dan pastikan tidak ada error
[root@mail ~]# systemctl restart postfix
[root@mail ~]# systemctl status postfix
Selanjutnya konfigurasi POP3/IMAP agar server kita bisa menerima email, untuk software yang kita gunakan yaitu Dovecot
Install Dovecot
[root@mail ~]# dnf -y install dovecot
Menjalankan dan Mengaktifkan Layanan
[root@mail ~]# systemctl start postfix
[root@mail ~]# systemctl enable postfix
Menambahkan rule di firewall, agar mengizinkan protokol pop3,imap berjalan
[root@mail ~]# firewall-cmd --add-service={pop3,imap} --permanent
[root@mail ~]# firewall-cmd --reload
Konfigurasi Dovecot
[root@mail ~]# vi /etc/dovecot/dovecot.conf
.....
#Hilangkan komentar listen
listen = *, ::
.....
[root@mail ~]# vi /etc/dovecot/conf.d/10-auth.conf
.....
#Hilangkan komentar dan izinkan plaintext login
disable_plaintext_auth = no
#Tambahkan login auth mechanism
auth_mechanisms = plain login
.....
[root@mail ~]# vi /etc/dovecot/conf.d/10-mail.conf
.....
#Mengubah lokasi direktori mail menjadi Maildir, beri komentar pada konfigurasi lain
mail_location = maildir:~/Maildir
#mail_location = mbox:~/mail:INBOX=/var/mail/%u
#mail_location = mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%n
.....
[root@mail ~]# vi /etc/dovecot/conf.d/10-master.conf
.....
##Hilangkan komentar pada konfigurasi postfix smtp-auth dan tambahkan user dan group postfix
# Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
.....
[root@mail ~]# vi /etc/dovecot/conf.d/10-ssl.conf
.....
#Ubah menjadi yes jika ingin menggunakan SSL
ssl = no
.....
Restart layanan Dovecot
[root@mail ~]# systemctl restart dovecot
Melakukan pengujian dengan menggunakan telnet
Sebelum melakukan pengujian mail server kita buat user terlebih dahulu, disini saya membuat 2 user misal rafi dan andri
[root@mail ~]# adduser rafi
[root@mail ~]# passwd rafi
Changing password for user rafi.
New password: PasswordPalingAman
Retype new password: PasswordPalingAman
passwd: all authentication tokens updated successfully.
[root@mail ~]# adduser andri
[root@mail ~]# passwd andri
Changing password for user andri.
New password: PasswordPalingAman
Retype new password: PasswordPalingAman
passwd: all authentication tokens updated successfully.
Kita lakukan pengiriman email dengan melakukan telnet ke smtp dengan port 25
[root@mail ~]# telnet mail.sysidn.id 25
Trying 172.23.0.151...
Connected to mail.sysidn.id.
Escape character is '^]'.
220 mail.sysidn.id ESMTP
mail from: rafi@sysidn.id
250 2.1.0 Ok
rcpt to: andri@sysidn.id
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
Tes mengirim email
.
250 2.0.0 Ok: queued as CEFEB9CCD
quit
221 2.0.0 Bye
Connection closed by foreign host.
Kemudian kita telnet ke pop3 dengan port 110 untuk melihat apakah email yang kita kirim tadi berhasil diterima atau tidak.
[root@mail ~]# telnet mail.sysidn.id 110
Trying 172.23.0.151...
Connected to mail.sysidn.id.
Escape character is '^]'.
+OK Dovecot ready.
user andri
+OK
pass PasswordPalingAman
+OK Logged in.
list
+OK 1 messages:
1 417
.
retr 1
+OK 417 octets
Return-Path: <rafi@sysidn.id>
X-Original-To: andri@sysidn.id
Delivered-To: andri@sysidn.id
Received: from mail.sysidn.id (mail.sysidn.id [172.23.0.151])
by mail.sysidn.id (Postfix) with SMTP id CEFEB9CCD
for <andri@sysidn.id>; Mon, 4 Jul 2022 13:52:18 +0000 (UTC)
Message-Id: <20220704135225.CEFEB9CCD@mail.sysidn.id>
Date: Mon, 4 Jul 2022 13:52:18 +0000 (UTC)
From: rafi@sysidn.id
Tes mengirim email
.
quit
+OK Logging out.
Connection closed by foreign host.
Email berhasil diterima, konfigurasi mail server yang kita lakukan berhasil! selanjutnya kita akan install Roundcube Webmail untuk memudahkan user dalam pengiriman dan penerimaan email.
Sebelum melakukan installasi Roundcube pastikan sudah menginstall LAMP/LEMP Stack di Artikel sebelumnya
Installasi Roundcube
Pertama download terlebih dahulu roundcube terbaru dari repository yang berada di github
[root@mail ~]# wget https://github.com/roundcube/roundcubemail/releases/download/1.5.3/roundcubemail-1.5.3.tar.gz
Lalu ekstrak file dan pindah ke direktori /var/www
[root@mail ~]# tar xvf roundcubemail-1.5.3.tar.gz
[root@mail ~]# mv roundcubemail-1.5.3 /var/www/roundcube
Install Depedensi PHP yang dibutuhkan
[root@mail ~]# dnf install -y php-ldap php-imagick php-common php-gd php-imap php-json php-curl php-zip php-xml php-mbstring php-bz2 php-intl php-gmp php-pdo php-mysqli
Konfigurasi Database untuk Roundcube
disini kita membuat user ngadmin untuk database roundcube
[root@mail ~]# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 16
Server version: 10.3.28-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> create database roundcube;
Query OK, 1 row affected (0.002 sec)
MariaDB [(none)]> grant all privileges on roundcube.* to 'ngadmin'@'localhost' identified by 'PasswordPalingAman';
Query OK, 0 rows affected (0.003 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.002 sec)
MariaDB [(none)]> exit
Bye
Selanjutnya kita perlu mengimpor contoh database yang digunakan oleh roundcube.
Jalankan perintah berikut
[root@mail ~]# mysql -u root -p roundcube < /var/www/roundcube/SQL/mysql.initial.sql
Enter password: PasswordPalingAman
Buat VirtualHost baru di Apache
[root@mail ~]# vi /etc/httpd/conf.d/roundcube.conf
.....
<VirtualHost *:80>
ServerName mail.sysidn.id
DocumentRoot /var/www/roundcube/
ErrorLog /var/log/httpd/roundcube_error.log
CustomLog /var/log/httpd/roundcube_access.log combined
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/roundcube/>
Options FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>
.....
Restart layanan Apache
[root@mail ~]# systemctl restart httpd
Jalankan installer di web browser
http://mail.yourdomain.com/installer
Jika menggunakan Nginx berikut konfigurasi VirtualHostnya
[root@mail ~]# vi /etc/nginx/conf.d/roundcube.conf
.....
server {
listen 80;
server_name mail.sysidn.id;
root /var/www/roundcube/;
index index.php;
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-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
.....
Test konfigurasi nginx
[root@mail ~]# nginx -t
Jika berhasil lakukan restart pada layanan Nginx
[root@mail ~]# systemctl restart httpd
Akses Installer dari Browser pastikan semua dependensi sudah terinstall

Geser ke paling bawah lalu klik next

Di Halaman Konfigurasi disini saya ubah untuk product name menjadi Mail SysIDN

Geser kebawah di bagian database, isi nama database, username, dan password sesuai dengan yang kita buat tadi

Untuk Konfigurasi SMTP dan IMAP, kita bisa menggunakan port 25 dan 143 Akan tetapi agar lebih aman kita gunakan SMTPS dan IMAPS untuk itu kita perlu membuat sertifikat terlebih dahulu, untuk caranya bisa dilihat di Artikel ini
Konfigurasi SMTPS di Postfix
[root@mail ~]# vi /etc/postfix/main.cf
.....
#Arahkan ke lokasi file sertifikat dan key
smtpd_tls_cert_file = /etc/ssl/sysidn1.crt
smtpd_tls_key_file = /etc/ssl/sysidn1.key
smtp_tls_CAfile = /etc/ssl/cacert.pem
.....
Kemudian aktifkan konfigurasi TLS dan SSL, hilangkan komentar pada submission dan smtps
[root@mail ~]# vi /etc/postfix/master.cf
.....
submission inet n - n - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
-o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=private/auth
smtps inet n - n - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_reject_unlisted_recipient=no
-o smtpd_recipient_restrictions=
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
.....
Lalu restart layanan postfix, dan pastikan port 465&587 sudah aktif
[root@mail ~]# systemctl restart postfix
[root@mail ~]# ss -tulpn | grep master

Konfigurasi IMAPS/POP3S di Dovecot
Konfigurasi SSL/TLS
[root@mail ~]# vi /etc/dovecot/conf.d/10-ssl.conf
.....
ssl = required
ssl_cert = </etc/ssl/sysidn1.crt
ssl_key = </etc/ssl/sysidn1.key
ssl_dh = </etc/dovecot/dh.pem
ssl_prefer_server_ciphers = yes
.....
Simpan file, lalu generate diffie-hilman file(Tunggu agak lama)
[root@mail ~]# openssl dhparam -out /etc/dovecot/dh.pem 4096
Terakhir restart layanan dovecot dan pastikan port 993 & 995 sudah berjalan
[root@mail ~]# systemctl restart dovecot
[root@mail ~]# ss -tulpn | grep dovecot

Oke, kita lanjutkan lagi untuk setup roundcubenya
Isi konfigurasi imap seperti ini

Konfigurasi SMTP

Untuk plugins disini saya centang semua plugin

Terakhir klik create config

Konfigurasi berhasil, kita klik Continue jika ingin melakukan pengetesan konfigurasi


Jangan lupa untuk mendisable menu installer di config.inc.php
[root@mail ~]# vi /var/www/roundcube/config/config.inc.php
.....
$config['enable_installer'] = false;
.....
Lanjut kita uji coba mengirim email menggunakan roundcube

Lalu kita cek di mailbox user andri apakah email yang dikirim tadi sudah ada
