عنوان:

‫نصب و پیکربندی Postfix برای ارسال ایمیل - قسمت ۵ - پیاده‌سازی SPF (Sender Policy Framework)


نویسنده: وحید نصیری
تاریخ: ۱۴۰۴/۰۴/۱۹ ۰۸:۱۰
آدرس: www.dntips.ir
تا به اینجا، ما هویت سرور خود را با رکوردهای A، MX و PTR تثبیت کرده‌ایم. اکنون زمان آن رسیده که به دنیا به طور رسمی اعلام کنیم کدام سرورها مجاز به ارسال ایمیل از طرف دامنه ما هستند. این کار با استفاده از یک استاندارد اعتبارسنجی به نام SPF انجام می‌شود. SPF به سرورهای گیرنده کمک می‌کند تا ایمیل‌های جعلی که با سوءاستفاده از نام دامنه شما ارسال می‌شوند (Email Spoofing) را شناسایی کنند.

بخش ۵.۱: آشنایی با خطاهای ناشی از عدم تنظیم SPF

وقتی ایمیلی را از سرور جدید خود به یک سرویس‌دهنده بزرگ مانند Gmail یا Outlook ارسال می‌کنید، آن سرویس‌دهنده به صورت خودکار بررسی می‌کند که آیا دامنه شما (yourdomain.com) یک رکورد SPF دارد یا خیر. اگر رکورد SPF وجود نداشته باشد یا IP سرور شما در آن لیست نشده باشد، سرور گیرنده به ایمیل شما با شک و تردید نگاه می‌کند. در هدر (Header) ایمیل دریافت شده، ممکن است پیام‌هایی شبیه به این موارد را مشاهده کنید:
Received-SPF: neutral (google.com: 203.0.113.50 is neither permitted nor denied by domain of sender@yourdomain.com) client-ip=203.0.113.50;
یا در حالتی بدتر:
Received-SPF: softfail (google.com: domain of transitioning sender@yourdomain.com does not designate 203.0.113.50 as permitted sender)
  • Neutral: یعنی "هیچ نظری ندارم، چون خط مشی مشخصی تعریف نکرده‌ای."
  • Softfail: یعنی "این IP در لیست مجاز تو نبود، اما تو از من خواسته‌ای که خیلی سخت‌گیری نکنم."

هر دوی این حالت‌ها، امتیاز منفی برای ایمیل شما به همراه دارند و شانس اسپم شدن آن را به شدت افزایش می‌دهند. هدف ما رسیدن به وضعیت Pass است.

بخش ۵.۲: ساختار یک رکورد SPF

یک رکورد SPF در واقع یک رکورد TXT در DNS شماست که ساختار مشخصی دارد. بیایید یک نمونه را تحلیل کنیم:
"v=spf1 a mx ip4:203.0.113.50 ~all"
  • v=spf1: این بخش همیشه در ابتدا می‌آید و مشخص می‌کند که این یک رکورد SPF نسخه ۱ است.
  • a: به سرور گیرنده می‌گوید: "اگر آدرس IP فرستنده با آدرس IP رکورد A دامنه yourdomain.com مطابقت داشت، مجاز است."
  • mx: می‌گوید: "هر سروری که در رکوردهای MX دامنه من لیست شده است، مجاز به ارسال ایمیل است." (در مورد ما، این همان mail.yourdomain.com است).
  • ip4:203.0.113.50: به طور صریح اعلام می‌کند که این آدرس IP نسخه ۴ مجاز به ارسال ایمیل است. این بخش برای سرور ما بسیار مهم است.
  • include:some-service.com: (در مثال ما نیامده) اگر از سرویس دیگری برای ارسال ایمیل استفاده می‌کنید (مثلاً Mailgun یا SendGrid)، با این مکانیزم می‌توانید SPF آن‌ها را نیز در رکورد خود بگنجانید.
  • all: این بخش که همیشه در انتها قرار می‌گیرد، مشخص می‌کند با ایمیل‌هایی که از سرورهای غیرمجاز ارسال می‌شوند چه رفتاری شود. این بخش یک پیشوند دارد:
  • ~all (SoftFail): به سرور گیرنده می‌گوید: "اگر ایمیل از یک منبع ناشناس آمد، آن را بپذیر اما به عنوان مشکوک علامت‌گذاری کن." این گزینه برای شروع و در مرحله تست بسیار مناسب است.
  • -all (HardFail): به سرور گیرنده می‌گوید: "اگر ایمیل از منبعی غیر از موارد ذکر شده آمد، آن را تحت هیچ شرایطی قبول نکن و فوراً رد (Reject) کن." این گزینه امنیت بالاتری دارد اما در صورتی باید استفاده شود که ۱۰۰٪ مطمئن باشید تمام IPهای مجاز را لیست کرده‌اید.

توصیه: همیشه با ~all شروع کنید. پس از چند هفته و اطمینان از اینکه تمام ایمیل‌های شما به درستی ارسال می‌شوند، آن را به -all تغییر دهید.

بخش ۵.۳: ایجاد و تنظیم رکورد SPF در DNS

حالا بیایید رکورد SPF را برای سناریوی خودمان بسازیم. ما یک سرور ایمیل داریم (mail.yourdomain.com) که رکورد MX به آن اشاره می‌کند و می‌خواهیم به آن اجازه ارسال دهیم.
رکورد SPF پیشنهادی برای شروع:
"v=spf1 mx ~all"
این رکورد ساده و کارآمد است. به این معنی که "فقط سرورهایی که در رکورد MX من مشخص شده‌اند مجاز به ارسال ایمیل هستند و با بقیه با ملایمت برخورد کن."

مراحل تنظیم در پنل DNS:
وارد پنل مدیریت DNS دامنه‌ی خود شوید (همان‌جایی که رکوردهای A و MX را تنظیم کردید). یک رکورد جدید ایجاد کنید. فیلدها را به صورت زیر پر کنید:
  • Type (نوع):TXT
  • Name (نام) یا (Host):@ (این علامت به معنای خود دامنه اصلی، یعنی yourdomain.com، است).
  • Value (مقدار) یا (Content): رشته SPF را در این قسمت وارد کنید: "v=spf1 mx ~all" (برخی پنل‌ها نیاز به علامت نقل قول " دارند و برخی نه. بهتر است ابتدا بدون آن امتحان کنید).
  • TTL: این مقدار را روی حالت پیش‌فرض یا خودکار باقی بگذارید.

مثال در یک پنل DNS:
TypeNameValue (Content)TTL
TXT@v=spf1 mx ~allAuto
پس از ذخیره، مانند دیگر رکوردهای DNS، ممکن است انتشار آن کمی زمان ببرد.

تایید تنظیمات
برای بررسی اینکه آیا رکورد شما به درستی منتشر شده است، می‌توانید از دستور dig استفاده کنید:
dig TXT yourdomain.com +short
خروجی مورد انتظار:
"v=spf1 mx ~all"
اگر این خروجی را مشاهده کردید، رکورد SPF شما با موفقیت تنظیم شده است. حالا اگر یک ایمیل آزمایشی دیگر به Gmail ارسال کنید و هدر آن را بررسی نمایید، در بخش Received-SPF باید وضعیت Pass را مشاهده کنید که یک گام بسیار بزرگ در افزایش اعتبار و بهبود تحویل‌پذیری (Deliverability) ایمیل‌های شماست.

در فصل بعدی، به سراغ لایه امنیتی قدرتمند بعدی، یعنی DKIM، خواهیم رفت.