Apa yang dibangun
Server email satu domain lengkap: Postfix untuk transport, Dovecot untuk IMAP dan pengiriman lokal, rspamd untuk filtering dan penandatanganan DKIM, serta tiga catatan DNS yang menentukan apakah penerima besar menaruh email Anda di inbox atau di folder yang tidak dibuka siapa pun. Server ini mengirim, menerima, melakukan autentikasi, dan bukan relay terbuka.
Menjalankan email sendiri adalah saran yang tidak populer dan sebagian besar karena alasan yang tepat. Pengiriman adalah bagian yang sulit, bukan perangkat lunaknya. Jika DNS salah, Postfix yang dikonfigurasi paling hati-hati sekalipun akan mengirim pesan langsung ke kehampaan.
Sebelum memulai
- R-8 atau lebih besar. Filtering terikat CPU dan rspamd akan dengan senang memakai semua inti yang Anda berikan selama gelombang spam.
- Domain yang DNS-nya Anda kontrol, dan kesabaran untuk propagasi.
- Reverse DNS diatur pada alamat instance ke hostname email Anda. Ini dapat diedit dari panel dan wajib: penerima menolak pengirim yang tidak dapat diselesaikan.
- Satu tiket ke dukungan untuk menanyakan apakah port 25 keluar terbuka di instance Anda. Tanyakan sebelum membangun, bukan setelahnya.
mail.example.comsepanjang panduan. Ganti dengan milik Anda sendiri.
1. Hostname dan DNS
hostnamectl set-hostname mail.example.com
apt update && apt full-upgrade -yPublikasikan catatan ini sekarang, karena langkah sertifikat membutuhkan catatan A dan langkah penandatanganan membutuhkan tempat untuk meletakkan kunci. Nilai dalam tabel adalah fungsi setiap catatan, bukan yang perlu ditempel.
| Catatan | Nama | Isi |
|---|---|---|
| A / AAAA | mail | Alamat instance dari panel |
| MX | @ | 10 mail.example.com. |
| TXT | @ | v=spf1 mx -all |
| TXT | _dmarc | v=DMARC1; p=none; rua=mailto:[email protected]; adkim=s; aspf=s |
| PTR | alamat instance | mail.example.com — atur di panel |
Catatan SPF menyatakan: host MX saya mengirim email saya, yang lainnya dipalsukan. Hard fail daripada soft fail, karena ~all mengundang penerima untuk membuat keputusan sendiri dan keputusan mereka tidak akan yang murah hati. DMARC dimulai pada p=none agar Anda mengumpulkan laporan selama seminggu sebelum ada yang ditolak atas nama Anda.
2. Sertifikat
apt install -y certbot
certbot certonly --standalone -d mail.example.comTidak ada yang mendengarkan pada port 80 saat ini, jadi mode standalone adalah jalur paling sederhana. Hook perpanjangan datang di akhir, setelah daemon ada untuk dimuat ulang.
3. Postfix
DEBIAN_FRONTEND=noninteractive apt install -y postfix postfix-pcre dovecot-imapd dovecot-lmtpd rspamd redis-serverSekarang atur konfigurasi transport. Setiap baris di bawah ini disengaja; postconf menulisnya langsung sehingga tidak ada editor yang salah:
postconf -e "myhostname = mail.example.com"
postconf -e "mydestination = localhost"
postconf -e "smtpd_banner = \$myhostname ESMTP"
postconf -e "inet_interfaces = all"
postconf -e "smtpd_tls_cert_file = /etc/letsencrypt/live/mail.example.com/fullchain.pem"
postconf -e "smtpd_tls_key_file = /etc/letsencrypt/live/mail.example.com/privkey.pem"
postconf -e "smtpd_tls_security_level = may"
postconf -e "smtp_tls_security_level = dane"
postconf -e "smtpd_tls_mandatory_protocols = >=TLSv1.2"
postconf -e "smtpd_sasl_type = dovecot"
postconf -e "smtpd_sasl_path = private/auth"
postconf -e "smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination"
postconf -e "smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated reject_unknown_recipient_domain reject_unauth_destination"
postconf -e "virtual_transport = lmtp:unix:private/dovecot-lmtp"
postconf -e "virtual_mailbox_domains = example.com"
postconf -e "smtpd_milters = inet:127.0.0.1:11332"
postconf -e "non_smtpd_milters = inet:127.0.0.1:11332"
postconf -e "milter_default_action = accept"Baris paling penting adalah smtpd_relay_restrictions. Baris ini diakhiri dengan reject_unauth_destination, yang menghentikan seluruh internet menggunakan mesin Anda untuk mengirim email. Relay terbuka akan membuat Anda masuk daftar hitam dalam hitungan jam dan selain itu melanggar kebijakan penggunaan yang dapat diterima.
Aktifkan port submission agar klien Anda sendiri dapat mengirim, dengan autentikasi wajib dan tanpa akses anonim:
postconf -M submission/inet="submission inet n - y - - smtpd"
postconf -P "submission/inet/syslog_name=postfix/submission"
postconf -P "submission/inet/smtpd_tls_security_level=encrypt"
postconf -P "submission/inet/smtpd_sasl_auth_enable=yes"
postconf -P "submission/inet/smtpd_client_restrictions=permit_sasl_authenticated,reject"4. Dovecot
Kotak surat dalam Maildir di bawah satu pengguna sistem menjaga build ini tetap sederhana. Buat pengguna dan penyimpanan:
groupadd -g 5000 vmail
useradd -g vmail -u 5000 -d /var/vmail -m vmail
install -d -o vmail -g vmail -m 700 /var/vmail/example.comTulis /etc/dovecot/conf.d/99-local.conf:
mail_location = maildir:/var/vmail/%d/%n
mail_uid = vmail
mail_gid = vmail
ssl = required
ssl_cert = </etc/letsencrypt/live/mail.example.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.example.com/privkey.pem
ssl_min_protocol = TLSv1.2
auth_mechanisms = plain login
disable_plaintext_auth = yes
passdb {
driver = passwd-file
args = scheme=ARGON2ID username_format=%u /etc/dovecot/users
}
userdb {
driver = static
args = uid=vmail gid=vmail home=/var/vmail/%d/%n
}
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
mode = 0600
user = postfix
group = postfix
}
}
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}
}Buat kotak surat. Perintah ini meminta dua kali dan menulis hash, tidak pernah kata sandi itu sendiri:
echo -n "[email protected]:" >> /etc/dovecot/users
doveadm pw -s ARGON2ID >> /etc/dovecot/users
chmod 640 /etc/dovecot/users
chgrp dovecot /etc/dovecot/users5. rspamd dan DKIM
Buat kunci penandatanganan, lalu publikasikan bagian publiknya:
install -d -o _rspamd -g _rspamd -m 750 /var/lib/rspamd/dkim
rspamadm dkim_keygen -s mail -b 2048 -d example.com -k /var/lib/rspamd/dkim/example.com.mail.key
chown _rspamd:_rspamd /var/lib/rspamd/dkim/example.com.mail.key
chmod 400 /var/lib/rspamd/dkim/example.com.mail.keyPerintah itu mencetak catatan DNS pada output standar. Publikasikan sebagai catatan TXT di mail._domainkey.example.com, persis seperti dicetak, dengan segmen yang dikutip digabungkan sesuai yang diharapkan penyedia DNS Anda. Kemudian beri tahu rspamd di mana kunci berada, di /etc/rspamd/local.d/dkim_signing.conf:
path = "/var/lib/rspamd/dkim/$domain.$selector.key";
selector = "mail";
allow_username_mismatch = true;
use_domain = "header";
sign_authenticated = true;
sign_local = true;Bind milter dan atur kata sandi untuk antarmuka web:
echo "bind_socket = \"127.0.0.1:11332\";" > /etc/rspamd/local.d/worker-proxy.inc
rspamadm pwTempel hash yang dihasilkan ke /etc/rspamd/local.d/worker-controller.inc sebagai password = "...". Akses antarmuka melalui tunnel SSH daripada membuka port 11334 ke publik.
6. Mulai semuanya
systemctl enable --now redis-server rspamd dovecot postfix
postfix check
systemctl --no-pager --failedTambahkan hook perpanjangan agar sertifikat baru menjangkau kedua daemon:
echo "systemctl reload postfix dovecot" > /etc/letsencrypt/renewal-hooks/deploy/reload-mail.sh
chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-mail.shVerifikasi
Tiga pengujian. Yang pertama lokal, yang kedua yang paling penting, yang ketiga yang membuat Anda tidak masuk daftar blokir.
echo | openssl s_client -starttls smtp -connect mail.example.com:25 -servername mail.example.com 2>/dev/null | grep -E "subject=|Verify return"Lalu kirim pesan dari server baru Anda ke kotak surat yang Anda miliki di penyedia webmail besar, buka pesan yang diterima dan baca header mentahnya. Cari satu baris:
Authentication-Results: mx.receiver.example;
dkim=pass [email protected];
spf=pass smtp.mailfrom=example.com;
dmarc=pass (p=NONE) header.from=example.comTiga lolos dan selesai. dkim=none berarti rspamd tidak menandatangani, jadi periksa rspamadm configdump dkim_signing. spf=fail hampir selalu berarti pesan keluar melalui IPv6 sementara catatan SPF Anda hanya mencakup alamat MX v4.
Terakhir, buktikan Anda bukan relay. Dari mesin lain, sambungkan dan coba kirim email antara dua domain yang tidak Anda miliki:
apt install -y swaks
swaks --to [email protected] --from [email protected] --server mail.example.comHasil yang benar adalah penolakan pada tahap penerima: 554 5.7.1 Relay access denied. Yang lain berarti Anda telah mengonfigurasi mesin yang akan disalahgunakan dalam sehari, dan Anda harus berhenti dan baca ulang langkah tiga.
Setelahnya
Biarkan DMARC pada p=none selama seminggu dan baca laporan agregat. Setelah laporan menunjukkan hanya server Anda sendiri yang menandatangani email Anda, pindah ke p=quarantine, lalu p=reject dua minggu kemudian. Tambahkan backup di luar node untuk /var/vmail sekalian, karena email adalah satu hal yang pengguna tidak pernah memiliki salinan kedua, dan add-on backup kami menulis ke situs yang berbeda dari instance.