Membangun layanan email dengan OpenSMTPD, mail server native OpenBSD: menyusun /etc/mail/smtpd.conf, memilih antara maildir dan mbox, mengatur relay dan virtual users, mengamankan dengan STARTTLS, serta mempertimbangkan DKIM dan SPF untuk deliverability.

Di episode 16 sebelumnya, kalian membangun frontend web dengan relayd. Sekarang kita menjalankan layanan yang lebih tua dari web itu sendiri: email. Dan di OpenBSD, email berarti OpenSMTPD — mail server native yang ringan, aman, dan sangat mudah dikonfigurasi.
Email adalah protokol yang rumit dan sering disalahpahami: ada pengiriman (SMTP), penerimaan (SMTP + POP/IMAP), autentikasi, dan anti-spam. OpenSMTPD menangani sisi SMTP dengan elegan, sambil menerapkan prinsip OpenBSD yang sudah kalian kenal: default aman, konfigurasi minimal, dan pledge/unveil.
rcctl enable smtpd
rcctl start smtpd
rcctl status smtpdKonfigurasi ada di /etc/mail/smtpd.conf. Setelah mengubah, validasi dan reload:
smtpd -n
rcctl reload smtpdStruktur smtpd.conf terdiri dari listen (menerima mail) dan action/match (menentukan perlakuan):
listen on egress
action "local" mbox alias <aliases>
match from any for domain example.com action "local"listen on egress menerima mail di semua antarmuka.action "local" mbox menyimpan mail sebagai mbox di user lokal.match ... for domain example.com mengarahkan mail untuk domain itu ke action lokal.OpenSMTPD mendukung dua format penyimpanan:
| Format | Deskripsi | Cocok untuk |
|---|---|---|
mbox | Satu file per user (/var/mail/user) | Sederhana, default |
maildir | Direktori cur/, new/, tmp/ per user | Lebih andal untuk akses banyak klien |
Untuk maildir, action ditulis:
action "local" maildir "/home/%{user}/Maildir" alias <aliases>Keuntungan maildir: tidak ada penguncian file, lebih tahan terhadap crash. Banyak administrator memilih maildir untuk server dengan banyak pengguna.
Untuk mengirim email (bukan hanya menerima), definisikan action relay:
action "outbound" relay
match from any mail-from any for any action "outbound"Baris match ... relay meneruskan mail ke internet. Untuk autentikasi ke relay eksternal (misalnya provider SMTP), gunakan:
action "relay" relay host smtp://mail.example.com:587 auth <secrets>Detail autentikasi disimpan di file terpisah (/etc/mail/secrets) yang dibaca OpenSMTPD — jangan pernah menaruh password di smtpd.conf.
Untuk melayani banyak domain/user tanpa akun sistem, gunakan virtual users. Database-nya bisa berupa file teks atau database:
table aliases db:/etc/mail/aliases.db
table virtuals db:/etc/mail/virtuals.db
action "vmail" maildir "/var/vmail/%{dest.domain}/%{dest.user}" virtual <virtuals>
match from any for any action "vmail"virtuals.db berisi pemetaan alamat ke user virtual. Semua mail virtual disimpan di /var/vmail, terpisah dari akun sistem — cara standar untuk hosting mail.
Warning
File database untuk table (misalnya aliases.db dan virtuals.db) harus dihasilkan dari file teks sumber dengan makemap. Jika kalian mengedit file teks langsung tanpa makemap, perubahan tidak akan terlihat oleh smtpd.
Encrypted mail memerlukan STARTTLS. Memakai sertifikat dari episode 10:
listen on egress tls pki example.comKonfigurasi ini mengenkripsi trafik SMTP. Sertifikat dikelola dengan acme-client seperti biasa, dan rcctl reload smtpd setelah renewal.
Email yang tidak memakai DKIM/SPF akan masuk spam. Dua mekanisme yang perlu kalian pahami:
dkimproxy sebagai package untuk menandatangani mail keluar.Instal dan aktifkan dkimproxy:
pkg_add dkimproxy
rcctl enable dkimproxy_out
rcctl start dkimproxy_outKemudian arahkan smtpd untuk melewati proxy:
action "outbound" relay host smtp://127.0.0.1:10027DKIM bekerja sebagai filter SMTP: mail keluar lewat dkimproxy yang menandatanganinya, lalu diteruskan. SPF cukup dengan menambah record TXT di DNS zone kalian.
Mail adalah sistem yang harus terus diawasi:
rcctl status smtpd
tail -f /var/log/maillog
smtpctl show queue
smtpctl show sessions/var/log/maillog mencatat setiap transaksi mail. smtpctl show queue menampilkan antrian yang menunggu — jika panjang, ada masalah pengiriman. smtpctl show sessions menunjukkan koneksi aktif.
Info
Sebelum menyala di produksi, uji mail kalian dari layanan eksternal dan periksa maillog untuk kesalahan relay atau TLS. Email yang gagal mengirim menumpuk di queue — dan queue yang membengkak adalah tanda pertama masalah.
Di episode 17 ini kalian membangun layanan email dengan OpenSMTPD: mengaktifkan smtpd, menyusun /etc/mail/smtpd.conf, memilih antara maildir dan mbox, mengatur relay dan virtual users, mengamankan dengan STARTTLS, serta menangani DKIM, SPF, dan pemantauan.
Inti yang harus dibawa pulang:
listen dan action/match adalah jantung smtpd.conf.makemap.Di episode 18 selanjutnya, kita akan menjalankan virtualisasi dengan vmm dan vmd — hypervisor tipe 1 bawaan OpenBSD, mengelola VM dengan vmctl, membangun networking berbasis tap, dan mengambil snapshot untuk lingkungan pengujian.