On iki kurulum

Şirket içi barındırılan ve gerçekten gelen kutusuna düşen bir posta sunucusu

Tek bir örnek üzerinde Postfix, Dovecot ve rspamd; SPF, DKIM ve DMARC doğru yapılandırılmış ve alıcı tarafın kendi başlıklarını okuyan bir doğrulama adımı ile.

Bu kılavuz ne inşa eder

Tek bir alan adı için eksiksiz bir posta sunucusu: taşıma için Postfix, IMAP ve yerel teslimat için Dovecot, filtreleme ve DKIM imzalama için rspamd ve büyük alıcıların postanızı gelen kutusuna mı yoksa kimsenin açmadığı bir klasöre mi koyacağına karar veren üç DNS kaydı. Gönderir, alır, kimlik doğrular ve açık bir aktarıcı değildir.

Kendi postanızı çalıştırmak modası geçmiş bir tavsiyedir ve çoğunlukla haklı nedenlerle. Zor olan kısım teslim edilebilirliktir, yazılım değil. DNS'i yanlış yapın, dünyanın en özenle yapılandırılmış Postfix'i mesajları doğrudan boşluğa gönderir.

Başlamadan önce

  • Bir R-8 veya daha büyüğü. Filtreleme CPU sınırlıdır ve rspamd bir spam dalgası sırasında verdiğiniz her çekirdeği mutlu bir şekilde kullanacaktır.
  • DNS'ini kontrol ettiğiniz bir alan adı ve yayılma için sabır.
  • Örnek adresinde posta ana bilgisayar adınıza ters DNS ayarlanmış. Panelden düzenlenebilir ve zorunludur: alıcılar çözümlenemeyen gönderenleri reddeder.
  • Dışa dönük 25. bağlantı noktanızın örneğinizde açık olup olmadığını soran desteğe bir bilet. İnşa etmeden önce sorun, sonra değil.
  • mail.example.com boyunca. Kendinizinkini kullanın.

1. Ana bilgisayar adı ve DNS

hostnamectl set-hostname mail.example.com
apt update && apt full-upgrade -y

Bu kayıtları şimdi yayınlayın, çünkü sertifika adımı A kaydına ve imzalama adımı bir anahtar koyacak bir yere ihtiyaç duyar. Tablodaki değerler her kaydın ne yaptığıdır, yapıştırılacak değerler değil.

KayıtAdİçerik
A / AAAAmailPaneldeki örnek adresleri
MX@10 mail.example.com.
TXT@v=spf1 mx -all
TXT_dmarcv=DMARC1; p=none; rua=mailto:[email protected]; adkim=s; aspf=s
PTRörnek adresmail.example.com — panelde ayarlanır

SPF kaydı şunu söyler: MX ana bilgisayarlarım postamı gönderir, diğer her şey sahtedir. Yumuşak hata yerine sert hata, çünkü ~all alıcıları kendi kararlarını vermeye davet eder ve kararları cömert olmayacaktır. DMARC p=none ile başlar, böylece sizin adınıza hiçbir şey reddedilmeden önce bir hafta boyunca rapor toplarsınız.

2. Sertifikalar

apt install -y certbot
certbot certonly --standalone -d mail.example.com

80 numaralı bağlantı noktasında henüz hiçbir şey dinlemiyor, bu yüzden bağımsız (standalone) mod en basit yoldur. Yenileme kancaları, yeniden yüklenecek arka plan süreçleri var olduğunda en sona gelir.

3. Postfix

DEBIAN_FRONTEND=noninteractive apt install -y postfix postfix-pcre dovecot-imapd dovecot-lmtpd rspamd redis-server

Şimdi taşıma yapılandırmasını ayarlayın. Aşağıdaki her satır bilinçlidir; postconf yerine yazar, böylece yanlış yapılabilecek bir düzenleyici yoktur:

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"

En önemli satır smtpd_relay_restrictions'dir. reject_unauth_destination ile biter ve bu, tüm internetin makinenizi kullanarak posta göndermesini engelleyen şeydir. Açık bir aktarıcı saatler içinde kara listeye alınmanıza neden olur ve kabul edilebilir kullanım politikasının ihlalidir.

Kendi istemcilerinizin gönderebilmesi için gönderim bağlantı noktasını etkinleştirin, kimlik doğrulama zorunlu ve anonim erişim yok:

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

Posta kutularını tek bir sistem kullanıcısı altında Maildir formatında tutmak bu kurulumu küçük tutar. Kullanıcıyı ve depolamayı oluşturun:

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

/etc/dovecot/conf.d/99-local.conf dosyasını yazın:

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
  }
}

Bir posta kutusu oluşturun. Komut iki kez sorar ve bir karma yazar, asla parolanın kendisini değil:

echo -n "[email protected]:" >> /etc/dovecot/users
doveadm pw -s ARGON2ID >> /etc/dovecot/users
chmod 640 /etc/dovecot/users
chgrp dovecot /etc/dovecot/users

5. rspamd ve DKIM

İmzalama anahtarını üretin, ardından genel yarısını yayınlayın:

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

Bu komut standart çıktıya bir DNS kaydı yazar. Bunu, DNS sağlayıcınızın beklediği şekilde tırnaklı bölümleri birleştirilmiş olarak, mail._domainkey.example.com adresine bir TXT kaydı olarak yayınlayın. Ardından rspamd'a anahtarın nerede olduğunu söyleyin, /etc/rspamd/local.d/dkim_signing.conf içinde:

path = "/var/lib/rspamd/dkim/$domain.$selector.key";
selector = "mail";
allow_username_mismatch = true;
use_domain = "header";
sign_authenticated = true;
sign_local = true;

Milter'i bağlayın ve web arayüzü için bir parola belirleyin:

echo "bind_socket = \"127.0.0.1:11332\";" > /etc/rspamd/local.d/worker-proxy.inc
rspamadm pw

Ortaya çıkan karmayı /etc/rspamd/local.d/worker-controller.inc içine password = "..." olarak yapıştırın. 11334 numaralı bağlantı noktasını dünyaya açmak yerine arayüze bir SSH tüneli ile erişin.

6. Her şeyi başlatın

systemctl enable --now redis-server rspamd dovecot postfix
postfix check
systemctl --no-pager --failed

Yeni bir sertifikanın her iki arka plan sürecine ulaşması için bir yenileme kancası ekleyin:

echo "systemctl reload postfix dovecot" > /etc/letsencrypt/renewal-hooks/deploy/reload-mail.sh
chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-mail.sh

Doğrulayın

Üç test. İlki yereldir, ikincisi önemli olandır, üçüncüsü sizi kara listelerden uzak tutandır.

echo | openssl s_client -starttls smtp -connect mail.example.com:25 -servername mail.example.com 2>/dev/null | grep -E "subject=|Verify return"

Ardından yeni sunucunuzdan büyük bir web posta sağlayıcısında sahip olduğunuz bir posta kutusuna bir mesaj gönderin, alınan mesajı açın ve ham başlıklarını okuyun. Tek bir satır arıyorsunuz:

Authentication-Results: mx.receiver.example;
  dkim=pass [email protected];
  spf=pass smtp.mailfrom=example.com;
  dmarc=pass (p=NONE) header.from=example.com

Üç geçiş ve işiniz bitti. dkim=none, rspamd'ın imzalamadığı anlamına gelir, bu yüzden rspamadm configdump dkim_signing kontrol edin. spf=fail neredeyse her zaman mesajın IPv6 üzerinden gönderildiği ve SPF kaydınızın yalnızca v4 MX adresini kapsadığı anlamına gelir.

Son olarak, bir aktarıcı olmadığınızı kanıtlayın. Başka herhangi bir makineden bağlanın ve sahibi olmadığınız iki alan adı arasında posta göndermeyi deneyin:

apt install -y swaks
swaks --to [email protected] --from [email protected] --server mail.example.com

Doğru sonuç, alıcı aşamasında bir reddetmedir: 554 5.7.1 Relay access denied. Başka herhangi bir şey, aynı gün içinde kötüye kullanılacak bir makine yapılandırdığınız anlamına gelir ve durup üçüncü adımı yeniden okumalısınız.

Sonrasında

DMARC'ı bir hafta p=none'da bırakın ve toplu raporları okuyun. Yalnızca kendi sunucunuzun kendi postanızı imzaladığını gösterdiklerinde, p=quarantine'a geçin ve iki hafta sonra p=reject. Bu arada /var/vmail için düğüm dışı yedekleme ekleyin, çünkü posta kullanıcıların asla ikinci bir kopyasına sahip olmadığı tek şeydir ve yedekleme eklentimiz örnekten farklı bir siteye yazar.

Hazır olduğunda

Bir şehir seç. Bir boyut seç. Kripto ile öde.

Kim olduğunuzla ilgili formlar yok, onay için insan bekleme yok, doğrulama için telefon görüşmesi yok. Ödeme onaylanır ve kimlik bilgileri gelen kutunuza düşer.