Membuat mail server pada linux debian 12 berbasis cli dengan ketentuan sebagai berikut:
1. ip address server 192.168.10.10/24
2. install apache2, postfix dan dovecot
3. konfigurasi apache, posfix dan dovecot agar bisa mengirim email dan terima email.
4. install bind9 dan konfigurasi domain sekolah.web.id dan belajar.web.id
5. kedua domain bisa saling berkirim email
6. buatkan sub domain untuk masing-masing dengan nama webmai.sekolah.web.id dan mail.belajar.web.id
7. install dan konfigurasi roundcube untuk kedua domain tersebut
Penyelesaian
1.Konfigurasi IP Address dan Hostname:Pastikan memiliki akses root sebelum mengubah interface.
192.168.10.10/24 pada interface jaringan dan tentukan FQDN server.-
Buka file konfigurasi interface:
Bash
nano /etc/network/interfaces
eth0 atau enp0s3):Plaintext
auto eth0
iface eth0 inet static
address 192.168.10.10/24
gateway 192.168.10.1
dns-nameservers 192.168.10.10
-
Terapkan perubahan jaringan:
Bash
systemctl restart networking
-
Konfigurasi
/etc/hostsdan/etc/hostname:
Bash
hostnamectl set-hostname mail.sekolah.web.id
/etc/hosts dan tambahkan mapping:Plaintext
192.168.10.10 mail.sekolah.web.id sekolah.web.id webmail.sekolah.web.id belajar.web.id mail.belajar.web.id
2.Instalasi dan Konfigurasi DNS Server (BIND9):Diperlukan agar kedua domain dan record MX dapat di-resolve.
-
Install paket BIND9 dan tools DNS:
Bash
apt update
apt install -y bind9 bind9utils dnsutils
-
Daftarkan zona domain di
/etc/bind/named.conf.local:
Plaintext
zone "sekolah.web.id" {
type master;
file "/etc/bind/db.sekolah";
};
zone "belajar.web.id" {
type master;
file "/etc/bind/db.belajar";
};
zone "10.168.192.in-addr.arpa" {
type master;
file "/etc/bind/db.192";
};
-
Buat file zona forward untuk
sekolah.web.id(/etc/bind/db.sekolah):
Plaintext
$TTL 604800
@ IN SOA mail.sekolah.web.id. root.sekolah.web.id. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS mail.sekolah.web.id.
@ IN A 192.168.10.10
@ IN MX 10 mail.sekolah.web.id.
mail IN A 192.168.10.10
webmail IN A 192.168.10.10
-
Buat file zona forward untuk
belajar.web.id(/etc/bind/db.belajar):
Plaintext
$TTL 604800
@ IN SOA mail.belajar.web.id. root.belajar.web.id. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS mail.belajar.web.id.
@ IN A 192.168.10.10
@ IN MX 10 mail.belajar.web.id.
mail IN A 192.168.10.10
-
Buat file zona reverse (
/etc/bind/db.192):
Plaintext
$TTL 604800
@ IN SOA mail.sekolah.web.id. root.sekolah.web.id. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS mail.sekolah.web.id.
10 IN PTR mail.sekolah.web.id.
10 IN PTR mail.belajar.web.id.
-
Restart service dan uji resolusi DNS:
Bash
systemctl restart named
nslookup mail.sekolah.web.id 127.0.0.1
nslookup mail.belajar.web.id 127.0.0.1
3.Instalasi Paket Mail Server dan Database:Pilih ‘Internet Site’ saat instalasi Postfix.
-
Install Postfix, Dovecot, Apache, MariaDB, dan dependensi PHP:
Bash
apt install -y postfix postfix-pcre dovecot-core dovecot-imapd dovecot-pop3d \
apache2 mariadb-server php php-cli php-mysql php-intl php-mbstring \
php-xml php-curl php-zip php-gd php-imagick
mail.sekolah.web.id.-
Buat user dan direktori virtual mailbox:
Bash
groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /var/mail/vhosts -m
mkdir -p /var/mail/vhosts/sekolah.web.id
mkdir -p /var/mail/vhosts/belajar.web.id
chown -R vmail:vmail /var/mail/vhosts
4.Konfigurasi Postfix Multi-Domain:Mengatur virtual domain routing dan SASL autentikasi.
-
Edit file
/etc/postfix/main.cf, sesuaikan/tambahkan parameter berikut:
Plaintext
myhostname = mail.sekolah.web.id
mydestination = localhost.$mydomain, localhost
inet_interfaces = all
inet_protocols = ipv4
# Virtual Mailbox Settings
virtual_mailbox_domains = sekolah.web.id, belajar.web.id
virtual_mailbox_base = /var/mail/vhosts
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_minimum_uid = 100
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
# SASL Authentication via Dovecot
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
-
Buat daftar akun email pada
/etc/postfix/vmailbox:
Plaintext
guru@sekolah.web.id sekolah.web.id/guru/
siswa@belajar.web.id belajar.web.id/siswa/
-
Generate hash database file untuk Postfix:
Bash
postmap /etc/postfix/vmailbox
systemctl restart postfix
5.Konfigurasi Dovecot (IMAP/POP3 & Maildir):Menghubungkan autentikasi Dovecot dengan virtual mailbox.
-
Edit
/etc/dovecot/conf.d/10-mail.conf:
Plaintext
mail_location = maildir:/var/mail/vhosts/%d/%n
mail_uid = 5000
mail_gid = 5000
-
Edit
/etc/dovecot/conf.d/10-auth.conf:
Plaintext
disable_plaintext_auth = no
auth_mechanisms = plain login
!include auth-passwdfile.conf.ext
!include auth-system.conf.ext dinonaktifkan dengan tanda # jika hanya menggunakan virtual users).-
Edit
/etc/dovecot/conf.d/auth-passwdfile.conf.ext:
Plaintext
passdb {
driver = passwd-file
args = scheme=CRYPT username_format=%u /etc/dovecot/users
}
userdb {
driver = static
args = uid=5000 gid=5000 home=/var/mail/vhosts/%d/%n
}
-
Edit
/etc/dovecot/conf.d/10-master.conf(aktifkan socket autentikasi untuk Postfix):Cari blokservice authdan ubah menjadi:
Plaintext
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
}
-
Buat akun email dan password di
/etc/dovecot/users:Generate password hash (misal password:Password123):
Bash
doveadm pw -s SHA512-CRYPT
/etc/dovecot/users:Plaintext
guru@sekolah.web.id:{SHA512-CRYPT}hasil_hash_password_guru::::
siswa@belajar.web.id:{SHA512-CRYPT}hasil_hash_password_siswa::::
Bash
chmod 600 /etc/dovecot/users
chown vmail:vmail /etc/dovecot/users
systemctl restart dovecot
6.Instalasi dan Konfigurasi Roundcube:Membuat database dan VirtualHost Apache untuk masing-masing subdomain.
-
Buat Database MariaDB untuk Roundcube:
Bash
mysql -u root -p
SQL
CREATE DATABASE roundcubemail DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER 'roundcubeuser'@'localhost' IDENTIFIED BY 'db_password_123';
GRANT ALL PRIVILEGES ON roundcubemail.* TO 'roundcubeuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
-
Download dan install Roundcube:
Bash
wget https://github.com/roundcube/roundcubemail/releases/download/1.6.6/roundcubemail-1.6.6-complete.tar.gz
tar -xvzf roundcubemail-1.6.6-complete.tar.gz -C /var/www/
mv /var/www/roundcubemail-1.6.6 /var/www/roundcube
chown -R www-data:www-data /var/www/roundcube/temp /var/www/roundcube/logs
mysql -u roundcubeuser -p db_password_123 roundcubemail < /var/www/roundcube/SQL/mysql.initial.sql
-
Konfigurasi file
/var/www/roundcube/config/config.inc.php:
-
Buat VirtualHost Apache untuk
webmail.sekolah.web.id(/etc/apache2/sites-available/webmail.sekolah.web.id.conf):
Apache
ServerName webmail.sekolah.web.id
DocumentRoot /var/www/roundcube
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
ErrorLog ${APACHE_LOG_DIR}/webmail_sekolah_error.log
CustomLog ${APACHE_LOG_DIR}/webmail_sekolah_access.log combined
-
Buat VirtualHost Apache untuk
mail.belajar.web.id(/etc/apache2/sites-available/mail.belajar.web.id.conf):
Apache
ServerName mail.belajar.web.id
DocumentRoot /var/www/roundcube
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
ErrorLog ${APACHE_LOG_DIR}/mail_belajar_error.log
CustomLog ${APACHE_LOG_DIR}/mail_belajar_access.log combined
-
Aktifkan modul dan virtual host Apache:
Bash
a2enmod rewrite
a2ensite webmail.sekolah.web.id.conf
a2ensite mail.belajar.web.id.conf
systemctl restart apache2
7.Pengujian Kirim dan Terima Email Antar Domain:Uji konektivitas dan pertukaran pesan dari kedua interface webmail.
-
Buka browser pada client yang DNS-nya mengarah ke
192.168.10.10. -
Akses
[http://webmail.sekolah.web.id](http://webmail.sekolah.web.id)dan login menggunakan userguru@sekolah.web.id. -
Buka tab baru / browser lain, akses
[http://mail.belajar.web.id](http://mail.belajar.web.id)dan login menggunakansiswa@belajar.web.id. -
Kirim email dari
guru@sekolah.web.idkesiswa@belajar.web.id, lalu lakukan reply sebaliknya. -
Pantau log transaksi mail server secara real-time di terminal:
journalctl -u postfix -u dovecot -f
1.Generate Sertifikat SSL/TLS Self-Signed:Membuat sertifikat x509 yang mencakup subdomain mail.
-
Buat folder dan generate certificate:
Bash
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/mailserver.key \
-out /etc/ssl/certs/mailserver.crt
-
Isi data isian saat diminta (atau sesuaikan Common Name dengan FQDN utama):
-
Country Name:
ID -
State/Province:
Jakarta -
Common Name:
mail.sekolah.web.id(atau wildcard*.sekolah.web.id)
-
-
Batasi permission private key demi keamanan:
Bash
chmod 600 /etc/ssl/private/mailserver.key
2.Konfigurasi SSL/TLS pada Postfix:Mengaktifkan STARTTLS dan port submission (587/465).
-
Edit file
/etc/postfix/main.cfdan arahkan sertifikat SSL:
Plaintext
# TLS parameters
smtpd_tls_cert_file = /etc/ssl/certs/mailserver.crt
smtpd_tls_key_file = /etc/ssl/private/mailserver.key
smtpd_tls_security_level = may
smtpd_tls_auth_only = yes
smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_security_level = may
-
Buka port submission (587) dan smtps (465) pada
/etc/postfix/master.cf:Hapus tanda komentar (#) pada baris berikut:
Plaintext
submission inet n - y - - 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
smtps inet n - y - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
3.Konfigurasi SSL/TLS pada Dovecot:Mengaktifkan IMAPS (port 993) dan POP3S (port 995).
-
Edit file
/etc/dovecot/conf.d/10-ssl.conf:
Plaintext
ssl = required
ssl_cert =
-
Aktifkan penolakan autentikasi teks polos tanpa enkripsi di
/etc/dovecot/conf.d/10-auth.conf:
Plaintext
disable_plaintext_auth = yes
4.Konfigurasi HTTPS Apache2 dan Roundcube:Mengaktifkan port 443 HTTPS dan update koneksi backend webmail.
-
Aktifkan modul SSL Apache:
Bash
a2enmod ssl headers
-
Perbarui konfigurasi Apache
/etc/apache2/sites-available/webmail.sekolah.web.id.conf:
Apache
ServerName webmail.sekolah.web.id
Redirect permanent / https://webmail.sekolah.web.id/
ServerName webmail.sekolah.web.id
DocumentRoot /var/www/roundcube
SSLEngine on
SSLCertificateFile /etc/ssl/certs/mailserver.crt
SSLCertificateKeyFile /etc/ssl/private/mailserver.key
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
ErrorLog ${APACHE_LOG_DIR}/webmail_ssl_error.log
CustomLog ${APACHE_LOG_DIR}/webmail_ssl_access.log combined
-
Perbarui konfigurasi Apache
/etc/apache2/sites-available/mail.belajar.web.id.conf:
Apache
ServerName mail.belajar.web.id
Redirect permanent / https://mail.belajar.web.id/
ServerName mail.belajar.web.id
DocumentRoot /var/www/roundcube
SSLEngine on
SSLCertificateFile /etc/ssl/certs/mailserver.crt
SSLCertificateKeyFile /etc/ssl/private/mailserver.key
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
ErrorLog ${APACHE_LOG_DIR}/mail_belajar_ssl_error.log
CustomLog ${APACHE_LOG_DIR}/mail_belajar_ssl_access.log combined
-
Sesuaikan parameter koneksi backend di
/var/www/roundcube/config/config.inc.php:
PHP
$config['imap_host'] = 'ssl://localhost:993';
$config['imap_conn_options'] = [
'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true,
],
];
$config['smtp_host'] = 'tls://localhost:587';
$config['smtp_conn_options'] = [
'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true,
],
];
5.Restart Service dan Uji Enkripsi:Restart seluruh daemon dan cek validitas handshake SSL.
-
Muat ulang seluruh layanan:
Bash
systemctl restart postfix dovecot apache2
-
Periksa apakah port terenkripsi sudah berstatus
LISTEN:
Bash
ss -tulpn | grep -E ':(443|465|587|993|995)'
-
Uji koneksi TLS pada Postfix (SMTP submission):
Bash
openssl s_client -connect localhost:587 -starttls smtp
-
Uji koneksi SSL pada Dovecot (IMAPS):
Bash
openssl s_client -connect localhost:993
1.Instalasi Paket SpamAssassin, ClamAV, dan Amavis:Mengunduh amavisd-new, clamav-daemon, spamassassin, dan dependensi arsip.
-
Jalankan instalasi seluruh paket pendukung:
Bash
apt update
apt install -y amavisd-new spamassassin clamav-daemon clamav-freshclam \
libnet-dns-perl libmail-spf-perl pyzor razor arj bzip2 cabextract \
cpio file gzip nomarch pax unrar-free unzip zoo p7zip-full
-
Update database virus ClamAV (pastikan service freshclam dihentikan sementara jika bentrok):
Bash
systemctl stop clamav-freshclam
freshclam
systemctl start clamav-freshclam
-
Masukkan user
clamavke grupamavisdan sebaliknya agar ClamAV memiliki izin membaca file karantina/pemindaian:
Bash
adduser clamav amavis
adduser amavis clamav
systemctl restart clamav-daemon
2.Konfigurasi Amavisd-new:Mengaktifkan scanner virus dan spam pada direktif amavis.
-
Buka file
/etc/amavis/conf.d/15-content_filter_mode:
Bash
nano /etc/amavis/conf.d/15-content_filter_mode
#) pada blok filter virus dan spam agar menjadi aktif:Perl
use strict;
# You can modify this and to have wd-style bypass
@bypass_virus_checks_maps = (
\%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);
@bypass_spam_checks_maps = (
\%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
1; # insure a defined value
-
Tentukan domain yang dipindai di
/etc/amavis/conf.d/50-user:
Bash
nano /etc/amavis/conf.d/50-user
use strict; dan sebelum 1;:Perl
$myhostname = "mail.sekolah.web.id";
@local_domains_maps = ( [".$mydomain", "sekolah.web.id", "belajar.web.id"] );
# Tag level: Tambahkan header X-Spam jika skor >= 2.0
$sa_tag_level_deflt = 2.0;
# Tag2 level: Tambahkan label SPAM pada subjek jika skor >= 5.0
$sa_tag2_level_deflt = 5.0;
# Kill level: Tolak atau karantina email jika skor >= 6.31
$sa_kill_level_deflt = 6.31;
$sa_spam_subject_tag = '***SPAM*** ';
3.Konfigurasi SpamAssassin:Mengaktifkan update signature otomatis dan scoring rules.
-
Buka file
/etc/default/spamassassin:
Bash
nano /etc/default/spamassassin
Plaintext
ENABLED=1
CRON=1
-
Konfigurasi skor dasar di
/etc/spamassassin/local.cf:
Plaintext
rewrite_header Subject *****SPAM*****
required_score 5.0
use_bayes 1
bayes_auto_learn 1
-
Aktifkan dan restart layanan SpamAssassin serta Amavis:
Bash
systemctl enable --now spamassassin
systemctl restart amavis
4.Integrasi Amavis dengan Postfix:Mengarahkan email masuk ke port 10024 dan menerima kembali di port 10025.
-
Buka
/etc/postfix/main.cfdan tambahkan parameter content filter:
Plaintext
# Content Filter Amavis (Anti-Spam & Anti-Virus)
content_filter = amavis:[127.0.0.1]:10024
receive_override_options = no_address_mappings
-
Buka
/etc/postfix/master.cfdan tambahkan service Amavis di akhir baris file:
Plaintext
amavis unix - - n - 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
-o max_use=20
127.0.0.1:10025 inet n - n - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_delay_reject=no
-o smtpd_client_restrictions=permit_mynetworks,reject
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o smtpd_data_restrictions=reject_unauth_pipelining
-o smtpd_end_of_data_restrictions=
-o mynetworks=127.0.0.0/8
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
-o smtpd_client_connection_count_limit=0
-o smtpd_client_connection_rate_limit=0
-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_milters
-
Restart daemon Postfix:
Bash
systemctl restart postfix
5.Pengujian Anti-Virus dan Anti-Spam:Memverifikasi pemindaian header X-Virus-Scanned dan X-Spam-Status.
-
Buka terminal untuk memantau log secara langsung:
Bash
journalctl -u amavis -u postfix -f
-
Uji Anti-Spam (GTUBE String):Kirim email melalui Roundcube dari
guru@sekolah.web.idkesiswa@belajar.web.iddengan menyertakan string penguji GTUBE pada isi body email:
Plaintext
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
***SPAM*** [Subject Asli], serta memiliki header X-Spam-Flag: YES.-
Uji Anti-Virus (EICAR Test String):Kirim email dengan menyertakan string standar pengujian virus EICAR di badan email atau sebagai file lampiran teks:
Plaintext
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
Blocked INFECTED (Eicar-Signature).