در این آموزش، به‌صورت گام‌به‌گام یاد می‌گیرید چطور یک سرور ایمیل کامل روی Ubuntu راه‌اندازی کنید که با Gmail، Outlook و سایر سرویس‌ها به‌درستی کار کند و امتیاز کامل از سایت‌هایی مثل mail-tester.com بگیرد.

توجه: فرض می‌کنیم دامنه‌ pyler.ir و hostname سرور mail.pyler.ir و آی پی ثابت سرور 91.91.91.91 است — در مثال‌ها آن‌ها را با نام دامنهٔ خودت جایگزین کن.


🔹 مفاهیم پایهٔ امنیت ایمیل (درک قبل از تنظیم)

وقتی شما ایمیلی از info@pyler.ir برای کسی (مثلاً Gmail) می‌فرستید، آن گیرنده باید بتواند تشخیص دهد که آیا واقعاً این ایمیل از دامنه pyler.ir آمده یا از یک شخص جعل‌کننده (spoofed sender).

برای این تشخیص، سه فناوری اصلی وجود دارد:

فناوری هدف بررسی در کجا مثال نتیجه در Gmail
SPF (Sender Policy Framework) تعیین اینکه چه سرورهایی مجاز به ارسال ایمیل از طرف دامنه هستند DNS TXT رکورد spf=pass
DKIM (DomainKeys Identified Mail) امضا دیجیتال محتوا برای جلوگیری از جعل یا تغییر ایمیل هدر ایمیل dkim=pass
DMARC (Domain-based Message Authentication, Reporting & Conformance) تعیین سیاست نهایی: اگر SPF و DKIM رد شدند چه شود + ارسال گزارش‌ها DNS TXT رکورد dmarc=pass

🧩 SPF چیست و چگونه کار می‌کند؟

SPF مثل یک «لیست سفید» در DNS است که می‌گوید چه IPهایی اجازه دارند از طرف دامنه شما ایمیل بفرستند.

مثلاً:

pyler.ir. TXT "v=spf1 mx ip4:91.91.91.91 -all" 

توضیح:

  • v=spf1 → نسخه SPF

  • mx → تمام سرورهایی که در رکورد MX هستند مجازند

  • ip4:91.91.91.91 → این IP مجاز است

  • -all → هر چیز دیگری ممنوع است (reject)

📘 وقتی Gmail ایمیل شما را دریافت می‌کند، آدرس IP فرستنده را نگاه می‌کند و با SPF دامنه مقایسه می‌کند:

اگر IP در لیست باشد → spf=pass
اگر نباشد → spf=fail (و ممکن است ایمیل اسپم یا رد شود)


🔐 DKIM چیست و چرا مهم است؟

DKIM (DomainKeys Identified Mail) ایمیل شما را دیجیتالی امضا می‌کند تا گیرنده بداند که:

  1. ایمیل واقعاً از سرور مجاز شما آمده است.

  2. محتوای ایمیل در مسیر تغییر نکرده است.

نحوه کار به زبان ساده:

  1. در سرور خود یک کلید خصوصی (Private Key) تولید می‌کنی — فقط سرور تو آن را دارد.

  2. یک کلید عمومی (Public Key) در DNS دامنه منتشر می‌کنی.

  3. هنگام ارسال ایمیل، سرور شما با کلید خصوصی بخشی از ایمیل را امضا می‌کند.

  4. گیرنده (مثل Gmail) امضا را می‌گیرد و با کلید عمومی از DNS بررسی می‌کند.

اگر امضا درست باشد → dkim=pass

نمونهٔ رکورد DNS:  

mail._domainkey.pyler.ir. TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkq..." 

در اینجا:

  • mail = نام Selector (می‌گوید از کدام کلید استفاده شده)

  • p= = کلید عمومی

  • v=DKIM1; k=rsa = نسخه و نوع الگوریتم

در هدر ایمیل شما خطی مشابه این دیده می‌شود:  

DKIM-Signature: v=1; a=rsa-sha256; d=pyler.ir; s=mail; bh=...; b=... 

📊 DMARC چیست و چرا لازم است؟

DMARC در واقع ترکیبی از SPF و DKIM است، اما با «قانون» و «گزارش‌گیری».

DMARC در DNS نوشته می‌شود و به سرویس‌های گیرنده (مثل Gmail, Outlook) می‌گوید:

اگر SPF و DKIM هر دو رد شدند، با ایمیل چه کنیم؟
و گزارش‌های خطا را به کجا بفرستیم؟

نمونه رکورد:

"dmarc.pyler.ir. TXT "v=DMARC1; p=quarantine; rua=mailto:postmaster@pyler.ir; pct=100" 

توضیح:

  • v=DMARC1 → نسخه پروتکل

  • p=quarantine → سیاست (می‌تواند یکی از اینها باشد):

    • none → فقط گزارش بده، کاری نکن

    • quarantine → ایمیل مشکوک را اسپم کن

    • reject → کاملاً رد کن

  • rua= → آدرس ایمیل برای دریافت گزارش‌های Aggregate (خلاصهٔ روزانه از سرورهای گیرنده)

  • pct= → درصد اجرای سیاست (۱۰۰٪ یعنی برای همهٔ ایمیل‌ها)

✅ اگر SPF یا DKIM یکی پاس شود و با دامنهٔ فرستنده هم‌خوان باشد → dmarc=pass


🧠 ارتباط بین SPF، DKIM و DMARC (مثال عملی)

فرض کنیم از info@pyler.ir ایمیلی به Gmail می‌فرستید:

سیستم بررسی چه چیزی نتیجه
SPF IP فرستنده در رکورد DNS هست؟ ✅ Pass
DKIM امضا معتبر است؟ کلید در DNS وجود دارد؟ ✅ Pass
DMARC SPF/DKIM یکی Pass و دامنه‌اش با From یکی است؟ ✅ Pass

در این حالت Gmail در هدر ایمیل نشان می‌دهد:

Authentication-Results: spf=pass; dkim=pass; dmarc=pass 

و ایمیل شما به Inbox می‌رود، نه Spam.

اما اگر SPF و DKIM fail شوند:  

spf=fail; dkim=fail; dmarc=fail (p=reject) 

ایمیل به Spam می‌رود یا کلاً رد می‌شود.


🧰 OpenDKIM و OpenDMARC چیستند؟

OpenDKIM

  • برنامه‌ای است که در سرور نصب می‌کنی تا امضاهای DKIM را تولید (در حالت ارسال) و بررسی (در حالت دریافت) کند.

  • Postfix هنگام ارسال هر ایمیل، پیام را به OpenDKIM می‌فرستد (از طریق پورت 8891).

  • OpenDKIM با کلید خصوصی امضا را اضافه می‌کند.

OpenDMARC

  • برنامه‌ای است که پیام‌های دریافتی را بررسی می‌کند تا بفهمد آیا SPF/DKIM معتبرند و DMARC باید چه سیاستی اعمال کند.

  • Postfix ایمیل را بعد از دریافت به OpenDMARC می‌دهد (پورت 8893).

  • می‌تواند گزارش‌های DMARC را برایتان ارسال کند تا ببینید چه کسی از دامنهٔ شما جعل کرده است.


💡 معرفی SMTP

SMTP مخفف Simple Mail Transfer Protocol است، یعنی پروتکل انتقال ساده‌ی ایمیل. این پروتکل یکی از استانداردهای اصلی برای ارسال ایمیل در اینترنت است. وظیفه‌ی SMTP این است که ایمیل‌ها را از کلاینت (فرستنده) به سرور ایمیل یا از یک سرور ایمیل به سرور دیگر منتقل کند.

به‌طور خلاصه:

  • SMTP پروتکلی است که برای ارسال ایمیل‌ها استفاده می‌شود.

  • معمولاً روی پورت 25، 465 (با SSL) یا 587 (با TLS) کار می‌کند.

  • کلاینت‌های ایمیل مثل Outlook یا سرویس‌های ارسال ایمیل در وب از SMTP برای فرستادن پیام‌ها به سرور استفاده می‌کنند.

مثلاً وقتی با جیمیل یک ایمیل می‌فرستی، جیمیل از پروتکل SMTP برای تحویل آن به سرور مقصد استفاده می‌کند.


🖥 معرفی SMTPD

smtpd در واقع به معنی SMTP Daemon است، یعنی برنامه‌ای که به عنوان سرور دریافت‌کننده‌ی SMTP عمل می‌کند.
به زبان ساده، وقتی SMTP فرستنده است، smtpd گیرنده است.

  • smtpd روی سرور اجرا می‌شود و منتظر می‌ماند تا درخواست‌های SMTP از کلاینت‌ها را دریافت کند.

  • وظیفه‌ی آن دریافت و پردازش ایمیل‌های ورودی است، مثلاً از یک فرستنده‌ی خارجی یا از یک کاربر داخلی.

  • معمولاً به عنوان بخشی از نرم‌افزارهایی مثل Postfix، Exim، Sendmail یا OpenSMTPD استفاده می‌شود.

به عبارت دیگر:

  • SMTP = پروتکل ارتباطی برای ارسال ایمیل

  • smtpd = برنامه (سرور) که از آن پروتکل استفاده می‌کند تا ایمیل‌ها را دریافت و پردازش کند


🔁 تفاوت خلاصه

ویژگی SMTP SMTPD
نوع پروتکل سرویس/برنامه (Daemon)
نقش فرستنده گیرنده
استفاده برای ارسال ایمیل برای دریافت ایمیل
اجرا می‌شود در کلاینت یا سرور ارسال‌کننده سرور دریافت‌کننده
مثال‌ها کلاینت جیمیل، Outlook Postfix smtpd، OpenSMTPD

اگر بخواهیم با مثالی توضیح دهیم:
وقتی شما ایمیلی از کامپیوترتان می‌فرستید، برنامه‌ی شما از SMTP استفاده می‌کند تا پیام را بفرستد. در سمت دیگر، سرور گیرنده یک smtpd دارد که منتظر است تا آن پیام را دریافت کند.


🧱 سایر مفاهیم مهم در مقاله

1️⃣ MTA (Mail Transfer Agent)

سرویسی که وظیفه ارسال و دریافت ایمیل‌ها را بین سرورها دارد.
در اینجا: Postfix

2️⃣ MDA (Mail Delivery Agent)

ایمیلی که دریافت شده را تحویل mailbox محلی می‌دهد.
در اینجا: Postfix خودش یا Dovecot (در حالت virtual users)

3️⃣ IMAP / POP3

پروتکل‌هایی برای خواندن ایمیل توسط کلاینت‌ها (Outlook, Thunderbird, موبایل)

  • IMAP: همیشه با سرور sync است.

  • POP3: ایمیل‌ها را دانلود می‌کند و معمولاً حذف می‌کند.

4️⃣ SASL Authentication

روش احراز هویت کاربر هنگام ارسال ایمیل (مثلاً از طریق پورت 587).
Dovecot معمولاً backend آن را فراهم می‌کند تا Postfix بتواند کاربران را چک کند.

5️⃣ TLS / STARTTLS

رمزنگاری ارتباط ایمیل برای جلوگیری از شنود.
Let’s Encrypt گواهی TLS رایگان برای mail.pyler.ir می‌دهد.


🔍 خلاصهٔ ساده برای حفظ کردن

نام نقش محل تنظیم نکته کلیدی
SPF مجوز IP برای ارسال DNS TXT فقط IP مجازها را بگذار
DKIM امضای دیجیتال ایمیل OpenDKIM + DNS لازم برای اعتبار محتوا
DMARC سیاست و گزارش‌گیری DNS TXT SPF/DKIM را enforce می‌کند
OpenDKIM امضاکنندهٔ ایمیل‌ها سرور (پورت 8891) کلید خصوصی را نگه می‌دارد
OpenDMARC بررسی‌کنندهٔ ورودی‌ها سرور (پورت 8893) لاگ و گزارش تولید می‌کند

فهرست مطالب 

  1. مقدمه و معماری کلی

  2. پیش‌نیازها و برنامه‌ریزی DNS

  3. نصب بسته‌های پایه (Postfix, Dovecot, OpenDKIM, OpenDMARC, Rspamd)

  4. پیکربندی Postfix (main.cf و master.cf) — توضیح پارامترها

  5. پیکربندی Dovecot (auth، mail_location، TLS)

  6. راه‌اندازی SASL (Dovecot auth / SMTP auth)

  7. انتخاب Maildir یا mbox و مهاجرت

  8. تنظیم OpenDKIM (تولید کلیدها، KeyTable، SigningTable)

  9. تنظیم OpenDMARC (قوانین، ignore hosts)

  10. اتصال Milterها به Postfix و ترتیب پردازش (Rspamd, OpenDKIM,

  11. TLS: گواهی Let’s Encrypt، تنظیمات ارسال و دریافت امن

  12. DNS عملی: A, MX, PTR, SPF, DKIM TXT, DMARC TXT (نمونه رکوردها برای Cloudflare)

  13. تست‌ها: openssl, swaks, dig, mail-tester، بررسی headerها

  14. امنیت و نگهداری (Fail2Ban، بک‌آپ، چرخش کلید DKIM، مانیتورینگ)

  15. نکات نهایی و چک‌لیست تکمیلی


1 — مقدمه و معماری کلی

یک Mail Server واقعی چند جزء دارد:

  • MTA (Mail Transfer Agent) — ارسال/دریافت ایمیل، معمولاً Postfix.

  • MDA (Mail Delivery Agent) — تحویل محلی، یا Postfix خودش.

  • IMAP/POP3 server — برای کلاینت‌ها، معمولاً Dovecot.

  • Milterها — برای امضا/بررسی/اسکن (OpenDKIM, OpenDMARC, Rspamd)

  • SMTP Submission — پورت 587 (مشتریان باید از آن استفاده کنند با SMTP AUTH + STARTTLS)

  • TLS — رمزنگاری انتقال با Let’s Encrypt

  • DNS — A, MX, PTR, SPF, DKIM, DMARC

  • (اختیاری) Webmail — Roundcube/RainLoop

هدف: ایمیل‌هایی که از سرور شما می‌روند، توسط گیرنده‌ها (Gmail/Outlook) معتبر شناخته شوند (SPF/DKIM/DMARC PASS) و مسیر انتقال با TLS امن باشد.


2 — پیش‌نیازها و برنامه‌ریزی DNS

قبل از نصب:

  • یک سرور Ubuntu (22.04 یا 24.04) با IP استاتیک IPv4 (و اختیاری IPv6).

  • دسترسی root یا sudo.

  • کنترل پنل DNS دامنه (Cloudflare/Registrar).

  • پورت‌های لازم باز و قابل دسترسی:

    • ورودی: 25 (SMTP), 587 (Submission), 465 (SMTPS optional), 993 (IMAPS), 995 (POP3S optional)

    • خروجی: پورت 25 باید باز باشد تا سایر سرویس‌ها به شما ایمیل تحویل دهند — توجه به محدودیتهای دیتاسنتر.

برنامه‌ریزی DNS اولیه (قبل از چیزهای دیگر)

  • A record:  

    mail.pyler.ir. A 91.91.91.91
  • MX record:

    pyler.ir. MX 10 mail.pyler.ir. 
  • PTR (reverse DNS): در پنل دیتاسنتر/ISP برای IP، PTR را به mail.pyler.ir ست کن. (حیاتی برای Gmail)

  • SPF (موقتی): یک TXT:  

    v=spf1 mx ip4:91.91.91.91 -all 
  • (بعد از تولید) DKIM TXT و DMARC TXT را اضافه خواهیم کرد.


3 — نصب بسته‌ها   

sudo apt update sudo apt install -y postfix dovecot-core dovecot-imapd dovecot-pop3d opendkim opendkim-tools opendmarc rspamd swaks 
  • هنگام نصب Postfix: انتخاب Internet Site و mail.pyler.ir به عنوان system mail name.

  • Rspamd اختیاری است ولی برای ضداسپم مفید است.


4 — پیکربندی Postfix (main.cf و master.cf) 

فایل: /etc/postfix/main.cf — نمونه کامل (توضیحات پس از آن):  

# Basic identity
myhostname = mail.pyler.ir
mydomain = pyler.ir
myorigin = /etc/mailname
mail_name = Postfix

# Interfaces
inet_interfaces = all
inet_protocols = ipv4

# Destinations
mydestination = $myhostname, pyler.ir, localhost.pyler.ir, localhost

# Mailbox
home_mailbox = Maildir/
mailbox_size_limit = 0
recipient_delimiter = +

# Networks
mynetworks = 127.0.0.0/8 [::1]/128

# SASL via Dovecot
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination

# TLS for incoming
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.pyler.ir/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.pyler.ir/privkey.pem
smtpd_tls_security_level = may
smtpd_tls_auth_only = yes
smtpd_tls_loglevel = 1

# TLS for outgoing
smtp_use_tls = yes
smtp_tls_security_level = may
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtp_tls_loglevel = 1

# Milters (OpenDKIM, OpenDMARC, Rspamd)
milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:127.0.0.1:11332, inet:127.0.0.1:8891, inet:127.0.0.1:8893
non_smtpd_milters = $smtpd_milters

# Misc
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases


توضیح کلیدها 

  • inet_protocols = ipv4 — اگر نمی‌خواهی IPv6 استفاده شود؛ اگر استفاده می‌کنی حتماً PTR و DNS IPv6 را ست کن.

  • home_mailbox = Maildir/ — توصیه می‌شود Maildir برای سازگاری با Dovecot استفاده شود.

  • smtpd_sasl_* — Postfix را وادار به استفاده از Dovecot برای احراز هویت می‌کند.

  • smtpd_tls_auth_only = yes — فقط با TLS اجازهٔ AUTH بده. خوب برای امنیت.

  • smtp_tls_security_level = may — اگر مقصد STARTTLS داشته باشد از TLS استفاده می‌کند. encrypt اجباری می‌کند و ممکن است باعث عدم تحویل به سرویس‌های قدیمی شود.

  • smtpd_milters — ترتیب مهم است: معمولاً Rspamd (11332) قبل از OpenDKIM (8891) یا بعد؟ معمولاً Rspamd به‌عنوان content filter قبل از DKIM پیکربندی می‌شود یا به‌صورت جداگانه؛ اما مهم این است که milterها در main.cf فهرست شده باشند تا Postfix به آنها وصل شود.

بعد از ویرایش:

sudo postmap /etc/aliases 
sudo systemctl restart postfix 

همچنین در /etc/postfix/master.cf مطمئن شو که submission فعال است (پورت 587):

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

5 — پیکربندی Dovecot (auth و mail_location)

فایل‌های کلیدی:

  • /etc/dovecot/conf.d/10-mail.conf

  • /etc/dovecot/conf.d/10-auth.conf

  • /etc/dovecot/conf.d/10-master.conf

  • /etc/dovecot/conf.d/10-ssl.conf

نمونه‌های مهم

/etc/dovecot/conf.d/10-mail.conf

mail_location = maildir:~/Maildir 

/etc/dovecot/conf.d/10-auth.conf

disable_plaintext_auth = no
auth_mechanisms = plain login
!include auth-system.conf.ext
auth_username_format = %n

/etc/dovecot/conf.d/10-master.conf (برای Postfix auth socket)

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

/etc/dovecot/conf.d/10-ssl.conf

ssl = required ssl_cert = </etc/letsencrypt/live/mail.pyler.ir/fullchain.pem ssl_key = </etc/letsencrypt/live/mail.pyler.ir/privkey.pem 

بعد:

sudo systemctl restart dovecot

6 — SASL/Auth (Dovecot برای Postfix)

  • اطمینان حاصل کن که کاربر ایمیل وجود دارد:

sudo adduser info 
  • یا اگر از virtual users / SQL استفاده می‌کنی، باید passwd و userdb تنظیم شوند.

  • برای تست auth:

doveadm auth test info 
  • برای تست از بیرون (swaks):

swaks --to someone@example.com --from postmaster@pyler.ir --server mail.pyler.ir --port 587 --auth LOGIN --auth-user postmaster@pyler.ir --auth-password YOUR_PASS --tls 

7 — Maildir vs mbox — کدام بهتر است؟

  • Maildir: هر ایمیل یک فایل است، مناسب IMAP و Dovecot، کمتر در معرض corruption است. پیشنهاد می‌شود.

  • mbox: همه ایمیل‌ها در یک فایل، ساده‌تر برای برخی ابزارها، ولی خطرناک در concurrency.

برای Maildir:

  • در main.cf: home_mailbox = Maildir/

  • برای کاربر جدید:

sudo mkdir -p /home/info/Maildir/{cur,new,tmp} 
sudo chown -R info:info /home/info/Maildir 

8 — OpenDKIM: تولید کلید، KeyTable، SigningTable، TrustedHosts

تولید کلید:

sudo mkdir -p /etc/opendkim/keys/pyler.ir 
cd /etc/opendkim/keys/pyler.ir 
sudo opendkim-genkey -s mail -d pyler.ir 
sudo chown opendkim:opendkim mail.private 
sudo chmod 600 mail.private 

فایل‌های تولیدشده: mail.private (private key) و mail.txt (رکورد DNS public key)

KeyTable (/etc/opendkim/KeyTable)

mail._domainkey.pyler.ir pyler.ir:mail:/etc/opendkim/keys/pyler.ir/mail.private 

SigningTable (/etc/opendkim/SigningTable)

*@pyler.ir mail._domainkey.pyler.ir 

TrustedHosts (/etc/opendkim/TrustedHosts)

127.0.0.1 localhost mail.pyler.ir

opendkim.conf (نمونه)

Syslog                  yes
SyslogSuccess           yes
Canonicalization        relaxed/simple
OversignHeaders         From
UserID                  opendkim
UMask                   007
Socket                  inet:8891@127.0.0.1
PidFile                 /run/opendkim/opendkim.pid
KeyTable                /etc/opendkim/KeyTable
SigningTable            /etc/opendkim/SigningTable
TrustedHosts            /etc/opendkim/TrustedHosts

پس از تنظیم:

sudo systemctl restart opendkim 

لاگ opendkim در /var/log/mail.log یا syslog ثبت می‌شود. به دنبال پیام‌هایی مانند:

opendkim[PID]: DKIM-Signature field added (s=mail, d=pyler.ir) 

9 — OpenDMARC تنظیم و ignore hosts

/etc/opendmarc.conf — نمونه:

AuthservID mail.pyler.ir
PidFile /run/opendmarc/opendmarc.pid
Socket inet:8893@127.0.0.1
Syslog true
TrustedAuthservIDs mail.pyler.ir
IgnoreHosts /etc/opendmarc/ignore.hosts

محتوای /etc/opendmarc/ignore.hosts:

127.0.0.1 localhost mail.pyler.ir 91.91.91.91 

سپس:

sudo systemctl restart opendmarc 

OpenDMARC بیشتر برای لاگ و گزارش DMARC استفاده می‌شود. اگر از localhost ایمیل می‌آید و خودت خودت را می‌فرستی، معمولاً می‌خواهی اینها را ignore کنی تا false positive نداشته باشی.


10 — اتصال Milters به Postfix (ترتیب، نکات)

در main.cf:

smtpd_milters = inet:127.0.0.1:11332, inet:127.0.0.1:8891, inet:127.0.0.1:8893
non_smtpd_milters = $smtpd_milters 
milter_default_action = accept 
  • ترتیب می‌تواند مهم باشد — معمولاً Rspamd (content filter) ابتدا پیام را بررسی و امتیاز می‌دهد، سپس OpenDKIM امضا می‌کند یا بالعکس بسته به نیاز.

  • اگر milterها درست کار نمی‌کنند، Postfix ممکن است ایمیل‌ها را امضا نکند. بررسی کن postconf | grep milter خروجی درست داشته باشد.


11 — TLS (Let’s Encrypt) برای server-side و client-side

نصب Certbot و گرفتن گواهی

sudo apt install certbot python3-certbot-nginx sudo certbot certonly --standalone -d mail.pyler.ir 
  • یا اگر Nginx/Apache دارید از plugin آن استفاده کن.

  • تنظیم smtpd_tls_cert_file و smtpd_tls_key_file در main.cf و ssl_cert/ssl_key در Dovecot.

نکته برای Renewal

sudo certbot renew --dry-run 

و Cron job یا systemd timer برای renew خودکار.


12 — DNS عملی: نمونه رکوردها (Cloudflare)

A

mail.pyler.ir. A 91.91.91.91 

MX

pyler.ir. MX 10 mail.pyler.ir. 

SPF (TXT)

pyler.ir. TXT "v=spf1 mx ip4:91.91.91.91 -all" 

DKIM (TXT — نام در Cloudflare فقط mail._domainkey)

mail._domainkey TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkq...AB" 

DMARC (TXT — نام _dmarc)

_dmarc TXT "v=DMARC1; p=quarantine; rua=mailto:postmaster@pyler.ir; pct=100" 

در Cloudflare اطمینان حاصل کن Proxy (آیکون ابر) غیرفعال باشد برای رکوردهای A و MX و DKIM (نه proxied).


13 — تست‌ها و بررسی‌ها (دستورها + اینکه چه خروجی باید ببینی)

بررسی پورت‌ها و سرویس‌ها

sudo ss -tlnp | egrep 'postfix|dovecot|opendkim|opendmarc|rspamd' 

تست TLS/ STARTTLS

openssl s_client -connect mail.pyler.ir:587 -starttls smtp 
openssl s_client -connect mail.pyler.ir:993 

در خروجی دنبال 250-STARTTLS و TLSv1.3 باش.

تست SMTP AUTH با swaks

swaks --to you@gmail.com --from info@pyler.ir --server mail.pyler.ir --port 587 --auth LOGIN --auth-user info --auth-password YOUR_PASSWORD --tls 

بررسی رکورد DKIM از DNS

dig txt mail._domainkey.pyler.ir +short 

ارسال تست به mail-tester

  • به https://www.mail-tester.com برو، آدرس ایمیل موقت بگیر و از سرور خودت یک ایمیل ارسال کن (از SMTP سرورت).

  • بررسی کن SPF/DKIM/DMARC همه PASS شوند.

مشاهده header ایمیل در Gmail → Show original

  • دنبال خطوط:

DKIM-Signature: v=1; a=rsa-sha256; d=pyler.ir; s=mail; ... 
Authentication-Results: mx.google.com; spf=pass; dkim=pass; dmarc=pass 

14 — امنیت، نگهداری و عملیات روزمره

Fail2Ban

  • نصب و تنظیم برای جلوگیری از brute-force راه‌های SMTP و IMAP:

sudo apt install fail2ban 
  • اضافه کن فیلترهای postfix/dovecot.

بک‌آپ

  • بک‌آپ کلید DKIM (/etc/opendkim/keys/pyler.ir/mail.private) و /etc/postfix, /etc/dovecot, /etc/opendkim، و certs.

چرخش DKIM

  • هر سال یا در صورت خطر چرخش کلید انجام بده: تولید selector جدید و اضافه رکورد DNS جدید، سپس تغییر KeyTable.

مانیتورینگ

  • مانیتور لاگ‌ها: sudo tail -F /var/log/mail.log

  • ایمیل‌های گزارش DMARC را تحلیل کن — rua آدرس‌ها را بررسی کن.

امنیت: محدودیت rate, tls_auth_only, strong ciphers

  • در Postfix می‌توانی smtpd_tls_protocols = !SSLv2,!SSLv3 و cipher suite محدود کنی. از TLSv1.2+ و TLSv1.3 استفاده کن.


15 — چک‌لیست نهایی پیش از Production

  • A و MX ست شده و Propagate شده

  • PTR روی IP تنظیم شده (IPv4)

  • Postfix روی پورت‌های 25,587 گوش می‌دهد

  • Dovecot روی 993 (IMAPS) گوش می‌دهد

  • TLS (Let’s Encrypt) نصب و valid است (openssl s_client ok)

  • OpenDKIM کلید تولید شده و KeyTable/SigningTable تنظیم شده

  • DKIM TXT در DNS اضافه شده و dig آن را برمی‌گرداند

  • OpenDMARC پیکربندی شده (IgnoreHosts مناسب)

  • mail-tester: SPF/DKIM/DMARC PASS

  • Fail2Ban پایه راه‌اندازی شده

  • مانیتورینگ و بک‌آپ تنظیم شده


مثال‌های مفید (کپی کن و اجرا کن)

تولید DKIM و قرار دادن رکورد DNS (خلاصه)

sudo mkdir -p /etc/opendkim/keys/pyler.ir
cd /etc/opendkim/keys/pyler.ir
sudo opendkim-genkey -s mail -d pyler.ir
sudo chown opendkim:opendkim mail.private
# سپس محتوای mail.txt را در DNS به عنوان TXT برای name=mail._domainkey کپی کن

سریع تست ارسال با swaks

swaks --to test@your-mail-tester-address.com \
 --from info@pyler.ir \
 --server mail.pyler.ir --port 587 \
 --auth LOGIN --auth-user info --auth-password YOURPASS --tls 

دیدن لاگ realtime

sudo tail -F /var/log/mail.log 

جمع‌بندی و توصیه‌های نهایی

  • تمرکز کن روی DNS (PTR/SPF/DKIM/DMARC) و TLS — این سه عامل تعیین‌کنندهٔ deliverability به Gmail و Hotmail هستند.

  • تنظیمات نرم‌افزاری در سرور، مخصوصاً اتصال Postfix ↔ OpenDKIM ↔ OpenDMARC، باید دقیق و بدون خطا باشد — لاگ‌ها بهترین دوست شما هستند.

  • برای کاربر نهایی: اگر می‌خواهی از Outlook ایمیل بفرستد و DKIM روی آن لحاظ شود، Outlook باید با SMTP سرور شما (mail.pyler.ir) تنظیم شود تا Postfix ایمیل را امضا کند.

  • از mail-tester برای بررسی نهایی استفاده کن و گزارش‌های DMARC را به آدرس مدیریتی بفرست.