پرش به محتوا

سرور ایمیل با Postfix و Dovecot: ارسال امن، IMAP و رکوردهای SPF، DKIM و DMARC

یک سرور ایمیل کامل برای دامنه بسازید. Postfix ایمیل را تحویل می‌گیرد و می‌فرستد، Dovecot صندوق‌ها را با IMAPS در اختیار کاربر می‌گذارد، و رکوردهای DNS کمک می‌کنند ایمیل‌ها در اسپم نیفتند.

Ubuntu 24.04 LTSسطح: پیشرفتهبرای: Ubuntu 24.04 LTS، Ubuntu 26.04 LTS، Ubuntu 22.04 LTSبه‌روزرسانی: ۱۷ آبان ۱۴۰۵
راه‌اندازی سرور ایمیل اینترنتی کار حساسی است. اگر IP سرور reverse DNS (رکورد PTR) درستی نداشته باشد یا در فهرست سیاه باشد، ایمیل‌ها به Gmail و Outlook نمی‌رسند. پیش از شروع، از ارائه‌دهنده‌ی IP بخواهید PTR را روی mail.sahor.ir تنظیم کند.

در این آموزش کاربران ایمیل همان کاربران لینوکسی سرور هستند. این روش برای سازمان کوچک ساده‌ترین است.

۱. DNS

mail.sahor.ir.        A     203.0.113.10
sahor.ir.             MX 10 mail.sahor.ir.
sahor.ir.             TXT   "v=spf1 mx -all"
_dmarc.sahor.ir.      TXT   "v=DMARC1; p=quarantine; rua=mailto:dmarc@sahor.ir"

رکورد DKIM را در مرحله‌ی ۵ می‌سازید.

۲. گواهی

bash
sudo hostnamectl set-hostname mail.sahor.ir
sudo apt install -y certbot
sudo certbot certonly --standalone -d mail.sahor.ir

۳. Postfix

bash
sudo apt install -y postfix   # choose "Internet Site", system mail name: sahor.ir
bash
sudo postconf -e 'myhostname = mail.sahor.ir'
sudo postconf -e 'mydomain = sahor.ir'
sudo postconf -e 'myorigin = $mydomain'
sudo postconf -e 'mydestination = $myhostname, $mydomain, localhost'
sudo postconf -e 'home_mailbox = Maildir/'
sudo postconf -e 'smtpd_tls_cert_file = /etc/letsencrypt/live/mail.sahor.ir/fullchain.pem'
sudo postconf -e 'smtpd_tls_key_file = /etc/letsencrypt/live/mail.sahor.ir/privkey.pem'
sudo postconf -e 'smtpd_tls_security_level = may'
sudo postconf -e 'smtp_tls_security_level = may'
sudo postconf -e 'smtpd_sasl_type = dovecot'
sudo postconf -e 'smtpd_sasl_path = private/auth'
sudo postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination'
sudo postconf -e 'message_size_limit = 26214400'

پورت 587 (submission) برای ارسال از برنامه‌ی ایمیل کاربران است. در /etc/postfix/master.cf بخش submission را از comment خارج کنید و این‌طور تنظیم کنید:

submission inet n       -       y       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject

۴. Dovecot

bash
sudo apt install -y dovecot-imapd dovecot-lmtpd

/etc/dovecot/conf.d/99-sahor.conf:

mail_location = maildir:~/Maildir
ssl = required
ssl_cert = </etc/letsencrypt/live/mail.sahor.ir/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.sahor.ir/privkey.pem
ssl_min_protocol = TLSv1.2
disable_plaintext_auth = yes
auth_mechanisms = plain login

service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }
}

خط service auth همان سوکتی را می‌سازد که Postfix برای احراز هویت کاربران (SASL) از آن استفاده می‌کند. در Dovecot 2.4 (Ubuntu 26.04) نام چند گزینه تغییر کرده است. اگر doveconf -n خطا داد، پیام خطا نام جدید را می‌گوید.

bash
sudo doveconf -n >/dev/null && sudo systemctl restart dovecot postfix
sudo ufw allow 25,587,993/tcp

۵. DKIM با OpenDKIM

bash
sudo apt install -y opendkim opendkim-tools
sudo mkdir -p /etc/opendkim/keys/sahor.ir
sudo opendkim-genkey -b 2048 -d sahor.ir -s mail -D /etc/opendkim/keys/sahor.ir
sudo chown -R opendkim:opendkim /etc/opendkim
sudo cat /etc/opendkim/keys/sahor.ir/mail.txt     # publish as TXT mail._domainkey.sahor.ir

در /etc/opendkim.conf این خطوط را تنظیم کنید. خط Socket قبلی را comment کنید، چون فقط یک Socket مجاز است:

Domain    sahor.ir
Selector  mail
KeyFile   /etc/opendkim/keys/sahor.ir/mail.private
Socket    inet:8891@127.0.0.1
bash
sudo postconf -e 'smtpd_milters = inet:127.0.0.1:8891'
sudo postconf -e 'non_smtpd_milters = $smtpd_milters'
sudo postconf -e 'milter_default_action = accept'
sudo systemctl restart opendkim postfix

۶. کاربر و آزمایش

bash
sudo adduser --shell /usr/sbin/nologin ali
echo "test body" | mail -s "test" ali@sahor.ir     # needs: apt install mailutils
sudo ls /home/ali/Maildir/new/

در برنامه‌ی ایمیل: IMAP روی mail.sahor.ir:993 با SSL/TLS، و SMTP روی mail.sahor.ir:587 با STARTTLS و همان نام کاربری و رمز.

یک ایمیل به یک صندوق Gmail بفرستید و در «Show original» بررسی کنید که SPF، DKIM و DMARC هر سه PASS باشند.

۷. نگهداری

  • لاگ: journalctl -u postfix -f و sudo mailq برای صف ارسال.
  • تمدید گواهی بعد از certbot: echo 'systemctl reload postfix dovecot' | sudo tee /etc/letsencrypt/renewal-hooks/deploy/mail.sh && sudo chmod +x $_.
  • برای فیلتر اسپم ورودی، rspamd را اضافه کنید. یک سرور ایمیل بدون فیلتر اسپم در چند هفته پر از اسپم می‌شود.