Webmail dengan 2 domain

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

Konfigurasi Mail Server multi-domain pada Debian 12 membutuhkan pengaturan DNS lokal (BIND9), Mail Transfer Agent (Postfix), Mail Delivery Agent (Dovecot), database MariaDB, dan Webmail Client (Roundcube) dengan Apache2.

1.Konfigurasi IP Address dan Hostname:Pastikan memiliki akses root sebelum mengubah interface.

Atur IP address statis 192.168.10.10/24 pada interface jaringan dan tentukan FQDN server.
  1. Buka file konfigurasi interface:

Bash

nano /etc/network/interfaces
Tambahkan/sesuaikan baris berikut (sesuaikan nama interface, misal 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
  1. Terapkan perubahan jaringan:

Bash

systemctl restart networking
  1. Konfigurasi /etc/hosts dan /etc/hostname:

Bash

hostnamectl set-hostname mail.sekolah.web.id
Buka /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.

  1. Install paket BIND9 dan tools DNS:

Bash

apt update
apt install -y bind9 bind9utils dnsutils
  1. 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";
};
  1. 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
  1. 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
  1. 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.
  1. 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.

  1. 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
Saat dialog Postfix muncul: pilih Internet Site dan isi System mail name dengan mail.sekolah.web.id.
  1. 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.

  1. 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
  1. 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/
  1. 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.

  1. Edit /etc/dovecot/conf.d/10-mail.conf:

Plaintext

mail_location = maildir:/var/mail/vhosts/%d/%n
mail_uid = 5000
mail_gid = 5000
  1. Edit /etc/dovecot/conf.d/10-auth.conf:

Plaintext

disable_plaintext_auth = no
auth_mechanisms = plain login
!include auth-passwdfile.conf.ext
(Pastikan baris !include auth-system.conf.ext dinonaktifkan dengan tanda # jika hanya menggunakan virtual users).
  1. 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
}
  1. Edit /etc/dovecot/conf.d/10-master.conf (aktifkan socket autentikasi untuk Postfix):
    Cari blok service auth dan ubah menjadi:

Plaintext

service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }
}
  1. Buat akun email dan password di /etc/dovecot/users:
    Generate password hash (misal password: Password123):

Bash

doveadm pw -s SHA512-CRYPT
Masukkan output hash ke dalam /etc/dovecot/users:

Plaintext

guru@sekolah.web.id:{SHA512-CRYPT}hasil_hash_password_guru::::
siswa@belajar.web.id:{SHA512-CRYPT}hasil_hash_password_siswa::::
Set permission file:

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.

  1. Buat Database MariaDB untuk Roundcube:

Bash

mysql -u root -p
Jalankan query SQL:

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;
  1. 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
  1. Konfigurasi file /var/www/roundcube/config/config.inc.php:
PHP
  1. 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

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

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

  1. Buka browser pada client yang DNS-nya mengarah ke 192.168.10.10.
  2. Akses [http://webmail.sekolah.web.id](http://webmail.sekolah.web.id) dan login menggunakan user guru@sekolah.web.id.
  3. Buka tab baru / browser lain, akses [http://mail.belajar.web.id](http://mail.belajar.web.id) dan login menggunakan siswa@belajar.web.id.
  4. Kirim email dari guru@sekolah.web.id ke siswa@belajar.web.id, lalu lakukan reply sebaliknya.
  5. Pantau log transaksi mail server secara real-time di terminal:
journalctl -u postfix -u dovecot -f
Agar server mail bisa menjalankan ssl silahkan lakukan konfigurasi berikut

1.Generate Sertifikat SSL/TLS Self-Signed:Membuat sertifikat x509 yang mencakup subdomain mail.

Buat pasangan private key dan certificate menggunakan OpenSSL untuk mengamankan seluruh layanan mail dan webmail:
  1. 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
  1. 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)
  2. 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).

  1. Edit file /etc/postfix/main.cf dan 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
  1. 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).

  1. Edit file /etc/dovecot/conf.d/10-ssl.conf:

Plaintext

ssl = required
ssl_cert = 
  1. 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.

  1. Aktifkan modul SSL Apache:

Bash

a2enmod ssl headers
  1. 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

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

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

  1. Muat ulang seluruh layanan:

Bash

systemctl restart postfix dovecot apache2
  1. Periksa apakah port terenkripsi sudah berstatus LISTEN:

Bash

ss -tulpn | grep -E ':(443|465|587|993|995)'
  1. Uji koneksi TLS pada Postfix (SMTP submission):

Bash

openssl s_client -connect localhost:587 -starttls smtp
  1. Uji koneksi SSL pada Dovecot (IMAPS):

Bash

openssl s_client -connect localhost:993
Integrasi Anti-Spam (SpamAssassin) dan Anti-Virus (ClamAV) ke Postfix pada Debian 12 paling stabil menggunakan Amavisd-new sebagai content filter proxy.

1.Instalasi Paket SpamAssassin, ClamAV, dan Amavis:Mengunduh amavisd-new, clamav-daemon, spamassassin, dan dependensi arsip.

  1. 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
  1. Update database virus ClamAV (pastikan service freshclam dihentikan sementara jika bentrok):

Bash

systemctl stop clamav-freshclam
freshclam
systemctl start clamav-freshclam
  1. Masukkan user clamav ke grup amavis dan 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.

  1. Buka file /etc/amavis/conf.d/15-content_filter_mode:

Bash

nano /etc/amavis/conf.d/15-content_filter_mode
Hapus tanda komentar (#) 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
  1. Tentukan domain yang dipindai di /etc/amavis/conf.d/50-user:

Bash

nano /etc/amavis/conf.d/50-user
Tambahkan baris berikut di dalam blok 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.

  1. Buka file /etc/default/spamassassin:

Bash

nano /etc/default/spamassassin
Pastikan opsi berikut aktif:

Plaintext

ENABLED=1
CRON=1
  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
  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.

  1. Buka /etc/postfix/main.cf dan 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
  1. Buka /etc/postfix/master.cf dan 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
  1. Restart daemon Postfix:

Bash

systemctl restart postfix

5.Pengujian Anti-Virus dan Anti-Spam:Memverifikasi pemindaian header X-Virus-Scanned dan X-Spam-Status.

  1. Buka terminal untuk memantau log secara langsung:

Bash

journalctl -u amavis -u postfix -f
  1. Uji Anti-Spam (GTUBE String):
    Kirim email melalui Roundcube dari guru@sekolah.web.id ke siswa@belajar.web.id dengan menyertakan string penguji GTUBE pada isi body email:

Plaintext

XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
Hasil yang diharapkan: Subjek email di inbox penerima otomatis berubah menjadi ***SPAM*** [Subject Asli], serta memiliki header X-Spam-Flag: YES.
  1. 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*
Hasil yang diharapkan: Email langsung ditolak atau diblokir oleh Amavis/ClamAV sebelum masuk ke inbox pengguna dengan status log Blocked INFECTED (Eicar-Signature).