Stalwart: Server Email Lengkap di VPS
Kenali pengganti Postfix, Dovecot, dan Rspamd dalam satu binary Rust Stalwart, batas perbaikannya, serta kapan mailcow tetap lebih tepat dipilih.
Hal yang disatukan Stalwart dalam satu binary
Stalwart adalah server email yang dapat Anda jalankan pada satu VPS sebagai satu binary Rust. Stalwart menangani SMTP, IMAP, POP3, JMAP, CalDAV, CardDAV, dan WebDAV dari proses yang sama. Stalwart juga memiliki spam filter, message store, dan ACME client sendiri. Stack konvensional menjalankan fungsi yang sama dengan Postfix, Dovecot, Rspamd, database untuk akun, dan tool sertifikat terpisah. Stalwart menggantikan semuanya dengan satu service unit dan satu file konfigurasi di /etc/stalwart/config.json.
Setiap angka, nama pengaturan, dan perintah di bawah ini dikutip dari dokumentasi, halaman rilis, dan install script Stalwart sendiri. Pemeriksaan pertama dilakukan pada 28 August 2026 terhadap rilis v0.16.19 (diterbitkan pada 24 August 2026). Pemeriksaan ulang dilakukan pada 12 October 2026, ketika rilis terbaru adalah v0.16.26 (diterbitkan pada 11 October 2026). Perintah-perintah ini harus Anda jalankan pada server Anda sendiri. Setiap perintah diikuti pemeriksaan untuk memastikan apakah perintah tersebut berhasil.
Stalwart memiliki lisensi ganda berdasarkan GNU Affero General Public License v3.0 (AGPL-3.0) dan Stalwart Enterprise License v2. Beberapa fitur hanya tersedia untuk edisi enterprise. Daftar endpoint HTTP yang didokumentasikan menandai /scim/v2/* sebagai fitur enterprise. Baca ketentuan lisensi sebelum merencanakan deployment berdasarkan fitur yang belum Anda jalankan sendiri.
Satu binary benar-benar mengurangi jumlah komponen yang perlu dikelola. Namun, hal itu tidak mengatasi dua faktor yang menentukan apakah email Anda dapat diterima.
Port 25 dan reputasi DNS tidak bergantung pada software yang Anda jalankan
Port TCP outbound 25 adalah gerbang pertama. Banyak penyedia VPS memblokirnya secara default pada akun baru. Port 25 yang diblokir berarti server Anda tidak dapat mengirimkan email secara langsung ke server email milik pihak lain. Uji port tersebut sebelum menginstal apa pun.
sudo apt update && sudo apt install -y netcat-openbsd
nc -vz -w 5 alt1.aspmx.l.google.com 25Hasil yang normal menampilkan Connection to alt1.aspmx.l.google.com ... 25 port [tcp/smtp] succeeded! dalam waktu sekitar satu detik. Pemblokiran muncul dalam salah satu dari dua bentuk. Jika paket dibuang di jaringan upstream, tidak ada reset yang dikirim kembali kepada Anda. Karena itu, nc menunggu selama lima detik penuh lalu menampilkan nc: connect to alt1.aspmx.l.google.com port 25 (tcp) failed: Connection timed out. Jika firewall menolak paket tersebut, firewall mengirim error ICMP kembali (reject pada netfilter mengirim port unreachable, kecuali dikonfigurasi untuk mengirim jenis lain, seperti administratively prohibited). Karena itu, kegagalan biasanya langsung muncul sebagai Connection refused atau No route to host. Dalam kedua kasus tersebut, buat tiket kepada penyedia Anda.
Jika penyedia tidak bersedia membuka port tersebut, satu-satunya cara adalah menggunakan relay. Stalwart dapat meneruskan semua email outbound ke smarthost melalui rute Relay. Port rute ini secara default adalah 25, tetapi menerima nilai apa pun dari 1 hingga 65535. Rute tersebut menyediakan switch implicitTls serta field authUsername dan authSecret untuk relay terautentikasi pada port 465 atau 587. Email Anda kemudian dikirim menggunakan reputasi relay, bukan reputasi Anda sendiri.
Gerbang kedua adalah penilaian jaringan penerima terhadap alamat IP dan domain Anda. Hal ini mencakup reverse DNS pada IP, SPF, DKIM, DMARC, serta riwayat pengiriman dari blok alamat tempat Anda berada. Halaman penyiapan DNS Stalwart, sebagaimana kami membacanya pada 28 August 2026, menjelaskan dengan tegas di mana pekerjaan tersebut dilakukan: catatan reverse DNS “biasanya dikonfigurasi oleh penyedia hosting, bukan oleh Stalwart sendiri”. Hal yang sama berlaku untuk komponen lainnya. Konfigurasi tersebut berada di zona DNS dan panel kontrol penyedia Anda, bukan di mail server.
Karena itu, halaman ini tidak menjelaskan ulang catatan tersebut. Kami memiliki panduan yang membahasnya: Penyiapan SPF, DKIM, dan DMARC sekali untuk semua pengirim email. Jika Anda belum memutuskan apakah akan menjalankan mail sendiri, mulai dengan ulasan jujur kami tentang apakah email yang di-host sendiri masih layak digunakan. Memilih Stalwart tidak mengubah perhitungan tersebut.
Kebutuhan VPS kecil untuk menjalankan server email Stalwart
Halaman persyaratan sistem Stalwart, yang dibaca pada 12 October 2026, mencantumkan angka-angka berikut. Penggunaan memori saat idle sekitar 100 MB. Deployment kecil untuk 5 hingga 10 pengguna dapat berjalan dengan RAM 1 GB. Konfigurasi dengan sekitar 5 pengguna dan trafik rendah dapat berjalan pada satu core CPU. Halaman tersebut menambahkan bahwa "seiring meningkatnya konkurensi dan aktivitas, lebih banyak core CPU akan diperlukan untuk mempertahankan latensi rendah dan throughput tinggi". Batas defaultnya adalah 8,192 koneksi konkuren di seluruh service dan batas ini dapat dikonfigurasi.
Halaman tersebut tidak mencantumkan ukuran disk minimum. Oleh karena itu, tentukan ukuran disk berdasarkan email yang diperkirakan akan disimpan, ditambah ruang cadangan agar store dapat melakukan compact.
Tiga jalur outbound harus berfungsi. Jika tidak, server dapat terlihat rusak dengan cara yang tidak berkaitan dengan email. Server mengambil bundle antarmuka web dari https://github.com/stalwartlabs/webui/releases/latest/. Server mengakses https://acme-v02.api.letsencrypt.org/directory untuk memperoleh sertifikat. Server memerlukan DNS melalui port UDP dan TCP 53 untuk pencarian MX dan record autentikasi. Firewall egress yang dikunci ketat dan memblokir jalur pertama akan menghasilkan server email yang berjalan tanpa antarmuka admin.
Instal rilis yang dipatok versinya, bukan "latest"
Installer resmi berupa shell script. Baca script tersebut sebelum menjalankannya.
curl --proto '=https' --tlsv1.2 -sSf https://get.stalw.art/install.sh -o install.sh
less install.sh
sudo sh install.shMembaca script tersebut pada 12 October 2026 menunjukkan dengan tepat tindakan yang dilakukannya. Script membuat service account stalwart dan direktori yang diperlukan. Setelah itu, script mengunduh dari https://github.com/stalwartlabs/stalwart/releases/latest/download. Binary ditempatkan di /usr/local/bin/stalwart dengan mode 0755. Konfigurasi ditempatkan di /etc/stalwart/config.json, data di /var/lib/stalwart, dan log di /var/log/stalwart. Ketiga direktori tersebut menggunakan mode 0750 dan dimiliki oleh stalwart. File environment ditulis ke /etc/stalwart/stalwart.env dengan mode 0640 dan dimiliki oleh root:stalwart. Script menerima satu install prefix opsional dan flag --fdb untuk build FoundationDB. Script tidak menerima argumen versi.
Poin terakhir tersebut penting. Script selalu mengambil rilis terbaru. Akibatnya, dua server yang dibuat dengan jeda satu minggu dapat menjalankan code yang berbeda. Segera tetapkan versi binary secara manual setelah instalasi. Ini juga merupakan jalur upgrade yang diberikan dalam catatan rilis v0.16.26: "Jika Anda melakukan upgrade dari v0.16.x, ganti binary (atau jalankan docker pull)." Tujuh patch release dirilis antara 24 August dan 11 October 2026, dan beberapa di antaranya berisi perbaikan keamanan. Karena itu, tetapkan rilis terbaru dan ubah penetapan versi hanya secara sengaja.
STALWART_TAG=v0.16.26
curl -fsSLO "https://github.com/stalwartlabs/stalwart/releases/download/${STALWART_TAG}/stalwart-x86_64-unknown-linux-gnu.tar.gz"
tar zxf stalwart-x86_64-unknown-linux-gnu.tar.gz
sudo systemctl stop stalwart
sudo install -m 0755 -o root -g root stalwart /usr/local/bin/stalwart
sudo systemctl start stalwart
systemctl is-active stalwartsystemctl is-active stalwart seharusnya mencetak active. Jika hasilnya berbeda, baca journalctl -u stalwart -n 50. Setiap aset rilis disertai bundle .sigstore.json yang sesuai. Dengan demikian, signature unduhan dapat diverifikasi sebelum instalasi.
Unit yang ditulis oleh script berjalan sebagai User=stalwart dan menetapkan AmbientCapabilities=CAP_NET_BIND_SERVICE. Capability tersebut memungkinkan account tanpa hak istimewa mengikat port 25, 443, 465, dan 993. Jika nanti Anda menulis unit sendiri dan menghilangkan baris tersebut, service gagal saat start karena user biasa tidak dapat mengikat port di bawah 1024.
Lokasi pencetakan kata sandi admin pertama
Stalwart dimulai dalam mode bootstrap dan menulis kata sandi sementara sepanjang 16 karakter ke log service satu kali.
sudo journalctl -u stalwart -n 200 | grep -A8 'bootstrap mode'Wizard penyiapan menggunakan HTTP biasa pada port 8080. Karena itu, jangan mengekspos port tersebut. Buat tunnel dari laptop melalui SSH:
ssh -N -L 8080:127.0.0.1:8080 you@your-vpsKemudian buka http://127.0.0.1:8080/admin dan masuk sebagai admin menggunakan kata sandi dari log. Wizard akan meminta hostname server, domain mail default, TLS, penyimpanan, direktori akun, logging, dan penanganan DNS. Restart service setelah proses selesai, lalu gunakan https://<your-host>/admin sejak saat itu.
Jika kata sandi sudah tidak terlihat karena tertimpa entri log baru, tetapkan kata sandi tetap. /etc/stalwart/stalwart.env menyediakan entri yang dikomentari khusus untuk keperluan ini, termasuk STALWART_RECOVERY_ADMIN=admin:changeme, STALWART_RECOVERY_MODE=true, dan STALWART_RECOVERY_MODE_PORT (default 8080). Hapus tanda komentar, restart, lalu masuk. Setelah itu, tambahkan kembali tanda komentar. Halaman hardening Stalwart menyarankan agar kredensial tersebut hanya disimpan untuk keadaan darurat. Jangan pernah masuk ke IMAP, JMAP, atau WebDAV menggunakan akun administrator.
Halaman yang sama mencantumkan listener yang perlu dipertahankan: port 25 untuk SMTP masuk, 465 untuk submission dengan TLS implisit, 993 untuk IMAPS, dan 443 untuk seluruh layanan HTTP. Port 587, 143, 4190, 110, 995, dan 8080 dianggap tidak esensial. Nonaktifkan 8080 setelah penyiapan selesai.
Menjalankannya dengan Docker menggunakan tag yang ditetapkan
Image yang didokumentasikan adalah stalwartlabs/stalwart. Tag v0.16.26 tersedia di Docker Hub pada 12 Oktober 2026, bersama varian -alpine. Halaman Docker Stalwart menyarankan tag minor v0.16 untuk produksi. Gunakan versi patch secara eksplisit, dengan alasan yang sama seperti pada binary di atas.
services:
stalwart:
image: stalwartlabs/stalwart:v0.16.26
container_name: stalwart
restart: unless-stopped
ports:
- "25:25"
- "465:465"
- "993:993"
- "443:443"
- "127.0.0.1:8080:8080"
volumes:
- stalwart-etc:/etc/stalwart
- stalwart-data:/var/lib/stalwart
volumes:
stalwart-etc:
stalwart-data:File tersebut berisi perintah docker run yang didokumentasikan dalam format Compose, dengan listener yang tidak esensial dihilangkan dan port setup di-bind ke localhost. Jalankan lalu baca baris bootstrap yang sama:
docker compose up -d
docker compose logs stalwart 2>&1 | grep -A8 'bootstrap mode'Halaman Docker juga mendokumentasikan -e STALWART_RECOVERY_ADMIN=admin:mySecretPass sebagai cara untuk menetapkan kredensial tetap saat startup. Dalam Compose, ini adalah key environment: jika Anda memilih cara tersebut daripada membaca log.
Daftar port lengkap yang didokumentasikan dan alasan file ini lebih singkat
Halaman Docker Stalwart mencantumkan 443, 8080, 25, 587, 465, 143, 993, 110, 995, dan 4190. Halaman hardening menyebut 587, 143, 110, 995, dan 4190 tidak esensial, serta menyarankan agar 8080 dinonaktifkan setelah setup. Tambahkan kembali hanya port yang benar-benar diminta oleh client Anda. Jika ponsel mengharuskan submission dengan STARTTLS, publikasikan 587. Jika pengguna Anda menulis aturan Sieve dari client desktop, publikasikan 4190.
Jika Compose masih baru bagi Anda, panduan Docker Compose kami untuk VPS menjelaskan tata letak file dan model named volume yang digunakan di sini. Perhatikan hal berikut, terutama untuk mail server: Docker memublikasikan port dengan menulis aturan firewall-nya sendiri. Aturan tersebut dicocokkan sebelum aturan ufw, sehingga ufw deny 8080 tidak menutup port yang dipublikasikan oleh Compose. Mem-bind ke 127.0.0.1 dalam pemetaan port adalah cara yang benar-benar menutupnya. Karena itu, file di atas menggunakan cara tersebut dan SSH tunnel tetap berlaku.
TLS tanpa certbot dan konsekuensinya
Stalwart mengimplementasikan ACME (automatic certificate management environment) secara langsung, sehingga tidak memerlukan certbot maupun renewal hook. Dokumentasinya mencantumkan empat metode validasi. HTTP-01 menjawab request challenge pada port 80. TLS-ALPN-01 menyajikan sertifikat khusus pada port 443 menggunakan protokol ALPN khusus ACME. DNS-01 menerbitkan record TXT sementara dan merupakan salah satu dari dua metode yang dapat menerbitkan sertifikat wildcard. DNS-PERSIST-01 menggunakan record TXT otorisasi yang berumur panjang, bukan menulis record baru pada setiap renewal.
Konsekuensinya, Stalwart ingin mengelola TLS handshake. TLS-ALPN-01 bekerja dengan menyelesaikan handshake itu sendiri, sehingga tidak dapat berjalan di belakang reverse proxy yang melakukan TLS termination untuk Anda. Jika nginx atau Caddy sudah menggunakan port 443 pada server tersebut, ada tiga pilihan. Panduan nginx milik Stalwart menjalankan nginx sebagai TCP passthrough, dengan listen 443; proxy_pass 127.0.0.1:10443; proxy_protocol on;, sehingga koneksi TLS sampai ke Stalwart tanpa perubahan. Dengan demikian, setiap koneksi pada port 443 diserahkan kepada Stalwart. Konfigurasi ini sesuai untuk server yang tidak menjalankan layanan lain melalui nginx pada port tersebut. Jika tidak, pindahkan Stalwart ke DNS-01 atau HTTP-01, atau berikan alamat IP tersendiri untuk Stalwart.
DANE dan MTA-STS serta default yang perlu diketahui
Keduanya dikonfigurasi per strategi TLS pada objek MtaTlsStrategy, di bagian Settings, MTA, Outbound, TLS Strategies pada antarmuka web. Kolom dane secara default bernilai optional. Nilai ini mencoba melakukan validasi DANE saat penerima menerbitkan record TLSA, lalu menggunakan STARTTLS biasa jika penerima tidak menerbitkannya. Jika diatur ke require, pengiriman hanya dilanjutkan jika terdapat record TLSA yang dapat diverifikasi. Kolom mtaSts berperilaku sama dan secara default bernilai optional. Timeout terkait adalah tlsTimeout (default 3 menit) dan mtaStsTimeout (default 5 menit).
Pada sisi inbound, Stalwart dapat menerbitkan kebijakan MTA-STS Anda sendiri di https://mta-sts.<domain>/.well-known/mta-sts.txt. Port 443 harus terbuka. Singleton MtaSts memiliki mode (default testing), maxAge (default 7 hari), dan mxHosts. Jika kosong, nilai ini menggunakan hostname dalam sertifikat TLS Anda. Anda harus menyediakan dua record DNS: record CNAME mta-sts yang mengarah ke host email, dan record TXT _mta-sts yang memuat pengidentifikasi kebijakan.
dig +short TXT _mta-sts.example.org
curl -s https://mta-sts.example.org/.well-known/mta-sts.txtPencarian TXT harus mengembalikan string v=STSv1; id=..., dan curl harus mengembalikan isi kebijakan. Jika curl tidak mengembalikan apa pun, port 443 tertutup atau sertifikat untuk mta-sts.example.org belum pernah diterbitkan.
Biarkan mode tetap pada testing sampai kedua pemeriksaan tersebut berhasil. Kebijakan dalam mode enforce dengan sertifikat yang bermasalah akan menghentikan server lain mengirimkan email kepada Anda. Anda akan mengetahui masalah ini dari pengguna, bukan dari log. DANE memiliki jebakan serupa: DANE memerlukan zone yang ditandatangani DNSSEC, dan record TLSA yang melakukan pinning terhadap sertifikat leaf harus diterbitkan ulang setiap kali ACME memperbarui sertifikat. Lakukan pinning terhadap CA penerbit, atau terima pekerjaan pembaruan tersebut.
Enkripsi saat data tersimpan bukan enkripsi end-to-end
Fitur ini paling sering disalahpahami. Berikut penjelasan persis seperti yang dinyatakan dalam dokumentasi. Pesan teks biasa setiap pengguna dienkripsi secara otomatis menggunakan sertifikat OpenPGP atau S/MIME mereka sebelum pesan ditulis ke disk. encryptAtRest diaktifkan secara default dan berlaku untuk pesan yang masuk melalui SMTP atau LMTP, selama penerima telah mendaftarkan kunci enkripsi. encryptOnAppend secara default bernilai false, “yang membiarkan pesan tambahan tetap tidak berubah agar klien tetap memegang kendali penuh atas konten yang mereka simpan”. OpenPGP menggunakan PGP/MIME, bukan PGP/Inline yang lebih lama, dengan AES-256 atau AES-128. Stalwart tidak membuat kunci. Pengguna mengekspor kunci publik berformat ASCII-armored dan mendaftarkannya sebagai objek PublicKey di bawah Account, Public Keys.
Dengan demikian, fitur ini melindungi image disk yang dicuri, backup yang dicuri, dan penyimpanan yang dibaca operator setelah pesan diterima. Tanpa kunci privat, byte yang tersimpan tidak dapat dibaca. Administrator juga tidak dapat mendekripsinya.
Fitur ini tidak melindungi pesan saat transit. Pesan melintasi Internet menggunakan TLS yang disepakati oleh kedua server, tiba dalam bentuk teks biasa, lalu Stalwart mengenkripsinya pada saat itu. Pengirim, penyedia layanan pengirim, dan setiap hop yang menghapus TLS sudah dapat melihat teks biasa tersebut.
Tiga batasan lain perlu dinyatakan dengan jelas. Folder Sent dan Drafts ditulis oleh klien Anda, yaitu melalui operasi append, sedangkan encryptOnAppend secara default bernilai false. Oleh karena itu, folder tersebut tetap dalam bentuk teks biasa kecuali Anda mengubah pengaturan tersebut. Dokumentasi yang saya baca ulang pada 12 October 2026 hanya menjelaskan isi pesan dan tidak menyatakan bahwa data envelope, header, atau entri indeks dienkripsi. Jadi, jangan berasumsi bahwa data tersebut terenkripsi. Dokumentasi itu juga tidak menyatakan bahwa pesan yang sudah tersimpan sebelum Anda mengunggah kunci akan dienkripsi ulang. Jadi, anggap pesan tersebut tidak dienkripsi ulang dan lakukan pemeriksaan. Dokumentasi juga tidak menjelaskan apakah pencarian teks lengkap tetap berfungsi pada isi pesan yang terenkripsi. Uji hal ini pada akun sementara sebelum menjanjikannya kepada siapa pun.
Jika pengguna kehilangan kunci privatnya, email mereka hilang. Tidak ada mekanisme pemulihan, sesuai desain.
WKD adalah tugas web server, bukan tugas mail server
WKD (Web Key Directory) merupakan bagian lain dari OpenPGP dan menyelesaikan masalah yang berbeda. WKD menerbitkan public key Anda pada URL HTTPS tetap di bawah domain Anda agar mail client pengirim dapat menemukannya dan mengenkripsi pesan sebelum pesan tersebut meninggalkan perangkat pengirim. Inilah end-to-end encryption. Enkripsi at-rest milik Stalwart berlaku untuk salinan yang tersimpan di disk Anda. Menyiapkan salah satunya tidak otomatis menyediakan yang lain.
Stalwart tidak menyajikan WKD. Endpoint HTTP yang didokumentasikan, berdasarkan pemeriksaan pada 12 October 2026, mencantumkan path well-known untuk jmap, caldav, carddav, oauth-authorization-server, openid-configuration, acme-challenge, mta-sts.txt, mail-v1.xml, dan autoconfig. Tidak ada path openpgpkey. Sajikan WKD dari static web server biasa.
Spesifikasi tersebut mendefinisikan dua layout. Metode advanced menggunakan https://openpgpkey.example.org/.well-known/openpgpkey/example.org/hu/iy9q119eutrkn8s1mk4r39qejnbu3n5q?l=Joe.Doe. Metode direct menggunakan https://example.org/.well-known/openpgpkey/hu/iy9q119eutrkn8s1mk4r39qejnbu3n5q?l=Joe.Doe. String sepanjang 32 karakter tersebut merupakan SHA-1 dari local part yang diubah menjadi huruf kecil lalu dikodekan dalam z-base-32. Karena itu, jangan pernah membuat nama file ini secara manual. GnuPG akan membuatnya untuk Anda.
gpg --export --armor you@example.org > you.asc
gpg-wks-client --print-wkd-url you@example.org
gpg-wks-client --install-key you.asc you@example.org--print-wkd-url menampilkan URL yang akan diambil oleh client, menggunakan bentuk subdomain. --install-key menulis key ke local directory tree yang mencerminkan layout WKD, di bawah top-level directory bernama openpgpkey secara default dan dapat diubah dengan -C dir. Salin tree tersebut ke web root Anda, tambahkan file policy yang diperlukan di samping directory hu (file kosong juga valid), lalu ambil URL Anda sendiri dengan curl untuk memastikan URL tersebut mengembalikan key bytes, bukan 404.
Penyimpanan pada satu VPS
Stalwart membagi penyimpanan menjadi empat peran: data store untuk data terstruktur seperti status mailbox, blob store untuk byte pesan mentah dan lampiran, search store untuk pengindeksan teks lengkap, serta in-memory store untuk pembatas laju, token autentikasi, dan data sesi. Masing-masing dapat menggunakan backend yang berbeda. Daftar yang didukung mencakup RocksDB, FoundationDB, PostgreSQL, MySQL, SQLite, penyimpanan objek yang kompatibel dengan S3, Azure Blob Storage, Redis, ElasticSearch, dan Meilisearch.
Pada satu VPS, jawabannya singkat. Dokumentasi menyebut RocksDB sebagai “backend yang direkomendasikan untuk instalasi Stalwart node tunggal karena kecepatan dan keandalannya”. Redis hanya didukung sebagai in-memory store dan tidak dapat digunakan sebagai data store atau blob store, sehingga Anda tidak perlu menjalankan container Redis terpisah untuk memulai. Pindahkan blob store ke S3 nanti jika mailbox melebihi kapasitas disk.
Pencadangan mengikuti backend yang digunakan. Untuk database eksternal, gunakan prosedur bawaan database tersebut. Untuk backend tertanam, FAQ menyarankan penyalinan direktori /var/lib/stalwart. Lakukan penyalinan saat service berhenti, atau dari snapshot filesystem atau volume. Penyalinan pada tingkat file dari key-value store yang sedang berjalan dapat menangkap data ketika proses penulisan belum selesai, dan masalah ini baru akan diketahui saat Anda mencoba memulihkannya.
Filter spam pengganti Rspamd
Pemfilteran berjalan di dalam proses yang sama, sehingga tidak ada daemon kedua yang harus dipastikan tetap aktif. Classifier dikonfigurasi pada singleton SpamClassifier melalui Settings, Spam Filter, Classifier. Classifier ini menggunakan algoritme FTRL-Proximal dengan feature hashing. FtrlFh adalah default yang direkomendasikan untuk sebagian besar deployment. FtrlCcfh mengganti feature hashing dengan cuckoo feature hashing untuk mengurangi collision hash dan ditujukan untuk deployment berskala besar. Classifier ini dilatih secara berkelanjutan: ketika pengguna menandai pesan sebagai spam atau ham, label tersebut langsung digunakan untuk keputusan berikutnya.
Di sekitar classifier terdapat DNS blocklist, greylisting, deteksi phishing, spam trap, dan Pyzor. Anda juga dapat memanggil SpamAssassin melalui milter jika ada aturan yang tetap ingin digunakan.
Kapan mailcow masih menjadi pilihan yang tepat
Stalwart tidak memiliki webmail. Ini adalah kekurangan terbesar, dan belum ada tanda-tanda bahwa kekurangan tersebut akan segera teratasi. Dokumentasi mailcow yang dibaca pada 12 October 2026 mencantumkan 16 komponen, termasuk SOGo, yang menyediakan inbox berbasis browser serta antarmuka CalDAV dan CardDAV bagi pengguna Anda sejak awal. Posting roadmap Stalwart tertanggal 20 June 2025 menyatakan bahwa webmail bawaan "in our plans, but it's not currently our immediate priority". Fitur tersebut akan dibuat dalam Rust dengan Dioxus setelah versi 1.0, "most likely sometime in 2026". Hingga 12 October 2026, blog proyek tersebut belum memuat posting yang mengumumkan webmail. Jadi, dengan Stalwart, Anda harus men-deploy Roundcube sendiri atau meminta setiap pengguna mengonfigurasi mail client.
Stalwart memang memiliki antarmuka administrasi web. Jadi, itu bukan kekurangan yang biasanya dimaksud. Kekurangan kedua adalah kematangan versi. FAQ menyatakan bahwa Stalwart masih berada pada versi 0.x dan tata letak data serta konfigurasi dapat berubah sebelum v1.0, sehingga migrasi mungkin diperlukan. Posting proyek tersebut pada June 2026 berjudul "Zero open bug reports: The road to Stalwart 1.0". Judul itu menunjukkan statusnya: sudah dekat, tetapi belum sampai. Hingga 12 October 2026, rilis terbaru masih v0.16.26.
Kekurangan ketiga adalah hal yang tidak tercantum dalam daftar fitur. Postfix, Dovecot, dan Rspamd memiliki jawaban tertulis selama satu dekade. Pada pukul dua pagi, ketika mail masih berada dalam antrean dan pengguna menunggu, hasil pencarian yang memuat string error yang sama lebih berharga daripada arsitektur yang elegan. Jika itu situasi Anda, panduan instalasi mailcow kami membahas seluruh stack dari awal hingga akhir, dan malam Anda akan lebih singkat.
Pilih Stalwart jika Anda menginginkan satu binary, satu file konfigurasi, dan JMAP, serta nyaman menggunakan teknologi yang masih baru. Pilih mailcow jika Anda membutuhkan webmail sekarang dan ingin memanfaatkan banyak jawaban yang sudah tersedia.
Memindahkan email yang sudah ada
Metode umum adalah IMAP ke IMAP menggunakan imapsync, yang tidak bergantung pada software yang dijalankan di kedua sisi. Lakukan dry run terlebih dahulu.
imapsync --dry \
--host1 old.example.org --user1 you@example.org --passfile1 /root/.old.pw \
--host2 mail.example.org --user2 you@example.org --passfile2 /root/.new.pw--dry membuat imapsync “tidak melakukan perubahan apa pun; perintah ini hanya menampilkan tindakan yang akan dilakukan”, jadi baca output tersebut sebelum menghapus flag itu. Setiap file kata sandi menyimpan kata sandi pada baris pertamanya, jadi chmod 600 keduanya lalu hapus file tersebut.
Stalwart juga merilis tool yang lebih baru, tetapi sebagian besar panduan pihak ketiga belum memperbaruinya. Blog Stalwart mendokumentasikan Vandelay, importer dan exporter JMAP (29 May 2026), serta migration proxy untuk upgrade tanpa downtime (10 June 2026). Baca keduanya sebelum merencanakan pemindahan besar, karena informasinya lebih baru daripada hampir semua dokumentasi lain yang tersedia.
Mode kegagalan dan string yang akan Anda lihat
Antarmuka admin tidak pernah dimuat. FAQ menyebutkan masalah ini secara langsung: bundle antarmuka web diunduh dari GitHub saat pertama kali dijalankan. Jadi, server yang tidak memiliki akses HTTPS keluar ke github.com akan menjalankan service, tetapi semua route antarmuka web mengembalikan 404. Periksa dari server dengan curl -sI https://github.com/stalwartlabs/webui/releases/latest/. Penyebab umum lain yang tercantum adalah skema HTTP atau HTTPS yang tidak cocok dan reverse proxy yang tidak meneruskan IP klien.
Password bootstrap tidak ada di log. Password tersebut dicetak satu kali saat startup, dalam mode bootstrap. Jika service sudah restart, perluas rentang pencarian dengan sudo journalctl -u stalwart --since today | grep -A8 'bootstrap mode'. Jika password benar-benar sudah tidak tersedia, tetapkan STALWART_RECOVERY_ADMIN di /etc/stalwart/stalwart.env lalu restart.
Relay melalui proxy lokal ditolak. Catatan rilis v0.16.19 mencatat perbaikan untuk route relay yang ditolak dengan host resolves loopback address. Jika Anda menemukan string tersebut secara persis, berarti Anda menjalankan build yang lebih lama. Gunakan versi yang lebih baru dan jangan mencari workaround.
Service tidak mau start setelah Anda menulis unit sendiri. Tanpa AmbientCapabilities=CAP_NET_BIND_SERVICE, user stalwart tidak dapat melakukan bind pada port 25, 443, 465, atau 993, sehingga startup gagal pada listener pertama. Salin baris capability dari unit yang dibuat oleh installer.
Sertifikat tidak pernah diterbitkan. HTTP-01 memerlukan port 80 agar dapat dijangkau dan tidak sedang digunakan. TLS-ALPN-01 memerlukan Stalwart untuk menjawab TLS handshake pada port 443. Jika ada proses lain pada server yang menggunakan salah satu port tersebut, ACME akan terus gagal tanpa pesan yang jelas, sementara bagian lain tampak normal.
FAQ
Apakah Stalwart menggantikan Postfix, Dovecot, dan Rspamd pada satu VPS?
Ya. Satu binary Rust menangani SMTP, IMAP, POP3, JMAP, CalDAV, CardDAV, dan WebDAV. Binary tersebut juga menyertakan filter spam, penyimpanan pesan, dan klien ACME. Hanya ada satu unit systemd dan satu file konfigurasi di /etc/stalwart/config.json, bukan empat daemon beserta integrasinya. Yang tidak digantikannya adalah zona DNS Anda atau kebijakan port 25 dari provider Anda. Faktor-faktor tersebut menentukan berhasil atau tidaknya pengoperasian mail server secara mandiri.
Berapa banyak RAM yang dibutuhkan mail server Stalwart?
Halaman persyaratan sistem Stalwart, yang dibaca pada 12 October 2026, menyebut penggunaan sekitar 100 MB saat idle. Halaman tersebut juga menyatakan bahwa RAM 1 GB sesuai untuk deployment kecil dengan 5 hingga 10 pengguna. Setup dengan sekitar 5 pengguna dan trafik rendah dapat berjalan pada satu core CPU. Batas defaultnya adalah 8,192 koneksi serentak untuk semua service dan batas ini dapat dikonfigurasi. Karena itu, batas penggunaan lebih banyak meningkat mengikuti jumlah koneksi dan volume mail, bukan hanya jumlah pengguna. Tidak ada ukuran disk minimum yang dipublikasikan. Tentukan ukuran disk berdasarkan mail yang akan Anda simpan.
Apakah migrasi ke Stalwart akan meningkatkan deliverability email saya?
Tidak. Deliverability ditentukan oleh terbuka atau tidaknya TCP port 25 outbound pada VPS Anda, reverse DNS pada IP Anda, serta SPF, DKIM, dan DMARC pada domain Anda. Stalwart mendukung DANE, MTA-STS, dan pelaporan SMTP TLS. Stalwart juga dapat memublikasikan kebijakan MTA-STS untuk Anda. Namun, fitur-fitur tersebut mengatur keamanan transportasi, bukan menentukan apakah jaringan penerima memercayai alamat Anda. Uji port 25 dengan nc -vz -w 5 alt1.aspmx.l.google.com 25 sebelum menginstal apa pun.
Apakah Stalwart menyertakan webmail?
Belum, per 12 October 2026. Stalwart menyertakan antarmuka administrasi web, tetapi itu berbeda dari webmail. Artikel roadmap proyek tertanggal 20 June 2025 menyatakan bahwa klien webmail direncanakan setelah versi 1.0. Klien tersebut akan dibuat dengan Rust dan Dioxus, "kemungkinan besar pada suatu waktu di 2026". Blog proyek juga belum memuat pengumuman tentang klien tersebut. Jika pengguna Anda memerlukan inbox berbasis browser sekarang, deploy Roundcube bersamanya atau gunakan stack yang menyertakan SOGo.
Apa yang dilindungi oleh enkripsi Stalwart saat data tersimpan?
Stalwart mengenkripsi pesan setiap pengguna dengan public key OpenPGP atau S/MIME milik pengguna tersebut sebelum menulisnya ke disk. Dengan demikian, isi pesan tidak dapat dipulihkan dari disk yang dicuri, backup yang dicuri, atau store yang dibaca administrator. Ini bukan enkripsi end-to-end. Pesan tiba dalam bentuk plain text dan dienkripsi saat disimpan, sehingga setiap hop sebelumnya dapat melihatnya. encryptOnAppend default-nya adalah false. Karena itu, pesan Sent dan Drafts yang ditulis oleh client Anda tetap tidak terenkripsi kecuali Anda mengubahnya. Dokumentasi hanya membahas isi pesan. Dokumentasi tersebut tidak menjelaskan metadata, entri indeks, atau enkripsi ulang mail yang disimpan sebelum key diunggah. Verifikasi sendiri aspek-aspek tersebut, bukan menganggapnya sudah tercakup.