- چطور یک سرور SMTP روی هتزنر راهاندازی کنیم که ایمیل ارسال کند و اسپم نشود؟
- معماری پیشنهادی و نکات اولیه
- مراحل آمادهسازی سرور ارسال (هتزنر)
- DKIM، SPF و DMARC — پیکربندی DNS
- دریافت ایمیل روی سرور دیگر و مدیریت Bounce
- جلوگیری از اسپم شدن — بهترین شیوهها
- کنترل نرخ ارسال، صف و جلوگیری از ریپوتیشن منفی
- تست و ابزارها برای بررسی deliverability
- مثال کامل روند: ارسال از اپلیکیشن A با استفاده از هتزنر بهعنوان relay
- نکات امنیتی و عملیاتی تکمیلی
- ابزارهای متنباز پیشنهادی برای اتوماسیون (رایگان)
- پیوند با خدمات شرکت (۸۵+ لوکیشن و سرویسها)
- نکته پایانی
چطور یک سرور SMTP روی هتزنر راهاندازی کنیم که ایمیل ارسال کند و اسپم نشود؟
در این راهنما قدمبهقدم پیادهسازی SMTP روی یک سرور ابری هتزنر برای ارسال ایمیل و نگاشت دریافت ایمیل روی سرور دیگر توضیح داده میشود. همچنین تنظیمات مهم DNS (SPF، DKIM، DMARC، PTR)، احراز هویت (SASL/TLS)، مدیریت Bounce و unsubscribe و توصیههای عملی برای جلوگیری از قرار گرفتن در فهرست سیاه پوشش داده میشود.
معماری پیشنهادی و نکات اولیه
معماری پیشنهادی:
- سرور ارسال (Hetzner Cloud): نصب Postfix + OpenDKIM + OpenDMARC + TLS — مسئول ارسال ایمیل (SMTP relay).
- سرور دریافت (مثلاً VPS یا هاست شما): MX رکوردها به این سرور اشاره میکنند؛ مسئول تحویل و دریافت ورودیها (POP/IMAP/Dovecot یا سرویس ایمیل شما).
- صندوق مخصوص Bounce و Unsubscribe: بازگشتیها به یک آدرس اختصاصی فرستاده شوند و آن صندوق توسط سروری که دریافت را انجام میدهد، پردازش گردد.
- کاربران/اپلیکیشنها: با استفاده از SMTP AUTH (یا مجوز مبتنی بر IP) روی سرور هتزنر احراز هویت میکنند تا اجازه رله داشته باشند.
مراحل آمادهسازی سرور ارسال (هتزنر)
نصب بستههای پایه (Debian/Ubuntu)
مثال برای اوبونتو/دبیان:
sudo apt update
sudo apt install -y postfix dovecot-core dovecot-imapd opendkim opendkim-tools opendmarc certbot postfix-policyd-spf-python rspamdتنظیم hostname و PTR
تنظیم hostname روی سرور ارسال و ثبت Reverse DNS در پنل هتزنر ضروری است.
sudo hostnamectl set-hostname mail.example.comنکات تنظیمات Postfix: مقدار myhostname را برابر mail.example.com قرار دهید و در پنل هتزنر برای IP معکوس مقدار mail.example.com را ثبت کنید.
پیکربندی TLS با Let’s Encrypt
صدور گواهی و ارجاع آن در تنظیمات Postfix:
sudo certbot certonly --standalone -d mail.example.comدر main.cf مقادیر زیر را اضافه کنید:
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.example.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.example.com/privkey.pem
smtpd_use_tls = yes
smtp_tls_security_level = may
smtpd_tls_security_level = mayتنظیمات پایه Postfix (گزیده main.cf)
نمونهی گزیدهای از تنظیمات مهم در main.cf:
myhostname = mail.example.com
myorigin = /etc/mailname
mydestination = localhost
relay_domains =
mynetworks = 127.0.0.0/8
smtp_tls_security_level = may
smtpd_tls_security_level = may
smtpd_tls_auth_only = yes
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
smtpd_helo_required = yesتوضیح: reject_unauth_destination از استفاده سرور شما بهعنوان open relay جلوگیری میکند؛ فقط کاربران مجاز یا ماشینهای شناختهشده میتوانند رله کنند.
فعالسازی SASL با Dovecot (برای اعتبارسنجی کاربران ارسالکننده)
در فایل /etc/dovecot/conf.d/10-master.conf بخش service auth را به این شکل تنظیم کنید:
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}
}برای احراز هویت میتوانید از passwd محلی، پایگاه داده SQL یا LDAP استفاده کنید. سپس سرویسها را ریستارت کنید:
sudo systemctl restart dovecot postfixDKIM، SPF و DMARC — پیکربندی DNS
تولید کلید DKIM با OpenDKIM
مثال ایجاد کلید DKIM روی سرور ارسال:
sudo mkdir /etc/opendkim/keys/example.com
sudo opendkim-genkey -b 2048 -d example.com -s mail -D /etc/opendkim/keys/example.comفایل mail.txt تولید میشود؛ محتوی رکورد TXT که باید در DNS اضافه شود: selector = mail → mail._domainkey.example.com.
نمونه تنظیمات /etc/opendkim.conf (گزیده):
Domain example.com
KeyFile /etc/opendkim/keys/example.com/mail.private
Selector mail
AutoRestart yes
Socket local:/var/spool/postfix/opendkim/opendkim.sockو در /etc/postfix/main.cf اضافه کنید:
milter_default_action = accept
smtpd_milters = unix:/var/spool/postfix/opendkim/opendkim.sock
non_smtpd_milters = $smtpd_miltersرکورد SPF
در DNS دامنه نمونه:
example.com. IN TXT "v=spf1 ip4:YOUR_HETZNER_IP include:spf.protection.example ?all"یا سختگیرانهتر:
"v=spf1 ip4:YOUR_HETZNER_IP -all"توصیه: در آغاز از ~all یا ?all استفاده کنید تا اشکالات اولیه باعث ریجکت کامل نشود و سپس سختگیرانهتر کنید.
رکورد DMARC
نمونه DMARC در DNS:
_dmarc.example.com. IN TXT "v=DMARC1; p=quarantine; rua=mailto:[email protected]; ruf=mailto:[email protected]; pct=100; adkim=s; aspf=s"نکته: برای شروع میتوانید p=none بگذارید تا گزارشها را ببینید، سپس p=quarantine یا p=reject را فعال کنید.
دریافت ایمیل روی سرور دیگر و مدیریت Bounce
نحوه تنظیم MX برای دریافت
مثال رکورد MX در DNS:
example.com. IN MX 10 mail-receive.example.orgنکته: MX باید به سرور دریافت اشاره کند؛ ارسالکننده شما از هتزنر برای ایمیل خروجی استفاده میکند — بنابراین رکورد SPF/DKIM برای دامنه ارسال تنظیم شده باشد.
کانفیگ Return-Path و مدیریت Bounce
چند نکته مهم:
- Return-Path باید برای مدیریت بازگشتیها مشخص باشد؛ بهتر است به یک سابدامین اختصاصی مثل bounce.example.com اشاره کند.
- برای هر ایمیل میتوانید از VERP استفاده کنید:
envelope-from="[email protected]"تا بازگشت دقیقتر مشخص شود.
پردازش bounces — روند پیشنهادی:
- یک آدرس
[email protected]بسازید و MX آن را به سروری که پردازش میکند اشاره دهید. - آن سرور با fetchmail / getmail یا مستقیم IMAP صندوق را واکشی کند و با اسکریپتهای پردازش bounce اقدام نماید.
- برای پارس کردن bounce میتوانید از ابزارهایی مانند flanker یا Mail::Delivery::BounceParser استفاده کنید.
نمونه روند پردازش bounce با flanker (پایتون)
ابتدا نصب:
pip install flankerنمونه اسکریپت ساده (خواندن از stdin و پردازش):
from flanker import mime
from flanker.utils import bounces
import sys
raw = sys.stdin.read()
msg = mime.from_string(raw)
bounce = bounces.parse(raw)
# classify and store bounce info in database or suppression listبا دستهبندی hard bounce (خطاهای 5xx) و soft bounce (4xx) میتوانید سیاستهای حذف یا تلاش مجدد اعمال کنید.
جلوگیری از اسپم شدن — بهترین شیوهها
تنظیمات فنی
- PTR همخوان با
myhostnameو A رکورد باشد. - SPF، DKIM، DMARC فعال و DKIM امضا کند.
- HELO/SMTP banner با hostname منطبق باشد.
- TLS فعال و
smtpd_tls_auth_only = yesبرای جلوگیری از ارسال رمزنگارینشده. - اجتناب از آیپیهای با سابقه بد و استفاده از rDNS مناسب.
سیاستهای محتوا و لیستها
- همیشه از double opt-in برای لیست ایمیل استفاده کنید.
- هر ایمیل باید لینک unsubscribe ساده و قابلفهم داشته باشد؛ در header از
List-Unsubscribeاستفاده کنید:
List-Unsubscribe: <mailto:[email protected]>, <https://example.com/unsubscribe?email=...>- گرم کردن IP (IP warm-up): از روز اول مقدار کم ارسال کنید و بهتدریج افزایش دهید.
- حذف یا تگ کردن آدرسهایی با bounce یا نرخ شکایت بالا.
- رعایت قوانین مانند CAN-SPAM و GDPR برای کاربران اروپایی.
کنترل نرخ ارسال، صف و جلوگیری از ریپوتیشن منفی
تنظیمات محدودکننده همزمانی و تاخیر به مقصد در Postfix:
postconf -e "smtp_destination_concurrency_limit = 20"
postconf -e "smtp_destination_rate_delay = 1s"برای سیاستهای پیچیدهتر از policy-daemonها مانند postfwd، policyd یا rspamd استفاده کنید.
مدیریت صف با دستورات Postfix:
postqueue -p
postsuper -d ALLDeferredتست و ابزارها برای بررسی deliverability
- برای تست SMTP از swaks استفاده کنید:
swaks --to [email protected] --from [email protected] --server mail.example.com --auth LOGIN --auth-user smtpuser --auth-password smtppass --tls- بررسی Headers با mail-tester.com و MXToolbox برای بررسی blacklist و SPF/DKIM/DMARC.
- مانیتورینگ لاگها با:
tail -f /var/log/mail.logتحلیل گزارشهای DMARC از طریق مقادیر rua و ruf کمک میکند مشکلات تحویل را پیدا کنید.
مثال کامل روند: ارسال از اپلیکیشن A با استفاده از هتزنر بهعنوان relay
- اپلیکیشن A به
mail.example.com:587وصل میشود با کاربرsmtp_userو رمز؛ احراز هویت انجام میشود. - سرور هتزنر پس از تایید، ایمیل را خارج میکند و DKIM امضا میکند؛ SPF و PTR نیز تنظیم شدهاند.
- در صورت بازگشت، bounce به
[email protected]فرستاده میشود؛ MX برای bounce به سروری که پارس را انجام میدهد اشاره دارد. - اپلیکیشن لیست suppression را خوانده و برای bounceهای سخت آدرس را غیرفعال میکند.
نکات امنیتی و عملیاتی تکمیلی
- اطمینان حاصل کنید پورت 25 خروجی روی سرور باز باشد (هتزنر گاهی محدودیتهای شبکهای دارد).
- برای جلوگیری از سوءاستفاده، authentication اجباری باشد؛ هرگز server را بهعنوان open relay نگه ندارید.
- لاگها را به سیستم مانیتورینگ (ELK/Graylog) ارسال کنید تا spikeهای ارسال یا پاسخهای خطا تحلیل شوند.
- در صورت حجم بالای ارسال از IP اختصاصی استفاده کنید و آن IP را بهتدریج گرم کنید.
ابزارهای متنباز پیشنهادی برای اتوماسیون (رایگان)
- Postfix (SMTP)
- Dovecot (SASL / IMAP)
- OpenDKIM / OpenDMARC
- Rspamd برای فیلترینگ و امتیازدهی
- fetchmail / getmail برای واکشی bounces
- flanker یا Mail::Delivery::BounceParser برای پردازش bounce
- postfwd / policyd برای نرخدهی و سیاستها
پیوند با خدمات شرکت (۸۵+ لوکیشن و سرویسها)
اگر دنبال زیرساختی با دسترسی شبکهای گسترده و لوکیشنهای متنوع هستید، میتوانید از خدمات مناسب برای انتخاب نزدیکترین دیتاسنتر به مخاطبانتان استفاده کنید تا تاخیر کاهش یابد و deliverability بهبود یابد.
- بیش از ۸۵ لوکیشن جهانی برای انتخاب دیتاسنتر.
- سرور ابری با عملکرد بالا و IP اختصاصی برای ایمیل مارکتینگ و سرویسهای SMTP.
- سرور ضد DDoS، VPSهای متنوع و پشتیبانی تنظیمات شبکه و امنیت.
نکته پایانی
اگر آماده راهاندازی هستید، میتوانید پلنهای سرور ابری، IP اختصاصی و خدمات مدیریت DNS و امنیت را بررسی کنید یا با تیم فنی تماس گرفته و درخواست پیکربندی اختصاصی، پیادهسازی DKIM/DMARC و مدیریت Bounce نمایید. تیم پشتیبانی در دسترس است تا راهنمایی فنی و کمکهای لازم ارائه کند.








