Mengamankan semua jalur email dengan TLS: mengambil sertifikat Let's Encrypt via certbot, mengonfigurasi smtpd_tls_cert_file dan smtpd_tls_key_file di Postfix, ssl_cert dan ssl_key di Dovecot, enforce TLS pada submission dan IMAP, plus auto-renew sertifikat agar tidak kedaluwarsa.

DNS di episode 5 sudah menentukan ke mana email pergi. Sekarang kita memastikan email itu sampai dalam keadaan terenkripsi. Tanpa TLS, password dan isi email melintasi internet sebagai teks terbuka — setara mengirim kartu kredit lewat pos kartu pos.
Episode ini membahas tiga hal: mengambil sertifikat Let's Encrypt dengan certbot, memasangnya di Postfix dan Dovecot, lalu mengunci layanan agar TLS benar-benar wajib. Kita juga menyiapkan auto-renew agar sertifikat tidak pernah kedaluwarsa.
Ada tiga titik yang butuh TLS di mail server:
Tanpa TLS, email tetap "terkirim" — tapi siapa pun di jalur bisa membaca dan mengubahnya. Di era provider besar yang menolak koneksi tanpa TLS, ini bukan lagi pilihan.
Kita memakai sertifikat dari Let's Encrypt via certbot — gratis, otomatis, dan dipercaya semua klien. Pastikan port 80 terbuka untuk challenge HTTP-01:
sudo apt install -y certbot
sudo certbot certonly --standalone -d mail.example.comSertifikat akan tersimpan di:
/etc/letsencrypt/live/mail.example.com/fullchain.pem — rantai sertifikat lengkap./etc/letsencrypt/live/mail.example.com/privkey.pem — private key.Akses file ini harus dibatasi: sudo chmod 640 /etc/letsencrypt/live/mail.example.com/privkey.pem memastikan hanya service yang berjalan sebagai root yang membacanya. Dovecot berjalan dengan user dovecot, sehingga perlu dibuka aksesnya — kita akan bahas di bagian Dovecot.
Postfix mengenal tiga parameter utama untuk sertifikat: smtpd_tls_cert_file, smtpd_tls_key_file, dan smtpd_tls_security_level. Untuk server penerima (port 25) dan submission, konfigurasinya:
sudo postconf -e 'smtpd_tls_cert_file = /etc/letsencrypt/live/mail.example.com/fullchain.pem'
sudo postconf -e 'smtpd_tls_key_file = /etc/letsencrypt/live/mail.example.com/privkey.pem'
sudo postconf -e 'smtpd_tls_security_level = may'
sudo postfix reloadNilai may berarti TLS ditawarkan tapi tidak wajib — tepat untuk port 25 agar tetap menerima server lama. Untuk submission (port 587), kita akan menaikkannya ke encrypt di bagian enforce nanti. Cek bahwa TLS aktif dengan:
postconf smtpd_tls_security_level smtpd_tls_cert_file
openssl s_client -connect mail.example.com:25 -starttls smtp -servername mail.example.comJika openssl s_client menampilkan baris Verify return code: 0, sertifikat valid dan TLS berfungsi.
Dovecot mengelola sertifikat lewat ssl_cert dan ssl_key di conf.d/10-ssl.conf. Edit file tersebut dengan editor kesayangan kalian dan pastikan baris berikut aktif:
ssl = yes
ssl_cert = </etc/letsencrypt/live/mail.example.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.example.com/privkey.pemPerhatikan tanda < di awal path — di syntax Dovecot itu berarti "baca isi file", bukan sekadar memakai string. Langkah yang sering terlewat: beri user dovecot akses ke direktori sertifikat, karena Let's Encrypt membuat direktori dengan permission root saja:
sudo mkdir -p /etc/letsencrypt/live/mail.example.com
sudo setfacl -m u:dovecot:rX /etc/letsencrypt /etc/letsencrypt/live /etc/letsencrypt/live/mail.example.com
sudo dovecot reloadRestart dan verifikasi:
systemctl restart dovecot
openssl s_client -connect mail.example.com:993 -servername mail.example.comVerify return code: 0 berarti IMAPS siap digunakan.
Sampai di sini TLS tersedia. Sekarang kita mewajibkannya di titik yang berisiko — submission dan IMAP:
sudo postconf -e 'smtpd_tls_security_level = encrypt'
sudo postconf -e 'smtpd_tls_loglevel = 1'
sudo postfix reloadencrypt menolak koneksi yang menolak STARTTLS, sehingga password tidak pernah melintas tanpa enkripsi. Di Dovecot, pastikan ssl = required — bukan sekadar yes:
ssl = requiredKombinasi ini memaksa semua klien memakai TLS. Sisa yang perlu diatur: cipher modern. Batasi ke TLS 1.2 ke atas agar protokol lama yang lemah tidak digunakan:
sudo postconf -e 'smtpd_tls_protocols = !SSLv2 !SSLv3 !TLSv1 !TLSv1.1'
sudo postconf -e 'smtpd_tls_mandatory_protocols = !SSLv2 !SSLv3 !TLSv1 !TLSv1.1'
sudo postfix reloadCek ssl_* yang serupa di Dovecot (ssl_min_protocol = TLSv1.2).
Sertifikat Let's Encrypt berlaku 90 hari. Satu-satunya cara aman adalah mengotomatiskan renewal. Certbot menyediakan --deploy-hook untuk me-reload service setelah perpanjangan:
sudo certbot renew --dry-runJika dry-run sukses, buat hook reload. Karena SMTP tidak bisa restart saat ada email di antrian, kita hanya reload. Buat /etc/letsencrypt/renewal-hooks/deploy/reload-mail:
#!/bin/bash
postfix reload
dovecot reloadJadikan executable, lalu cek systemctl list-timers untuk melihat timer certbot.timer yang berjalan dua kali sehari — certbot hanya memperpanjang saat tersisa kurang dari 30 hari, jadi aman.
Episode 6 selesai. Inti yang harus dibawa pulang:
certbot certonly dan tersimpan di /etc/letsencrypt/live/.smtpd_tls_cert_file / smtpd_tls_key_file; Dovecot memakai ssl_cert / ssl_key dengan prefix <.encrypt / ssl = required; port 25 cukup may.openssl s_client.Semua jalur kini terenkripsi. Di episode 7 kita mengganti user sistem dengan virtual users yang dikelola database — fondasi multi-domain dan autentikasi terpusat untuk Postfix dan Dovecot. Sampai jumpa di episode 7!