SPF، DKIM و DMARC: چه کاری انجام می‌دهند و چگونه آنها را بررسی کنیم

مقدمه

یک ایمیل تنظیم مجدد رمز عبور از سرور مجازی شما به صورت هرزنامه دریافت می‌شود. سرور خود را بررسی می‌کنید، IP پاک است و پیام هم مشکلی ندارد. مشکل تقریباً همیشه در رکوردهای DNS شماست و شما هنوز به آنجا مراجعه نکرده‌اید.

وقتی یک سرور ایمیل گیرنده، پیامی را از دامنه شما دریافت می‌کند، قبل از تصمیم‌گیری در مورد نحوه برخورد با آن، سه بررسی انجام می‌دهد. SPF تأیید می‌کند که سرور شما در لیست تأیید شده‌ها قرار دارد. DKIM تأیید می‌کند که پیام در حین انتقال تغییر نکرده است. DMARC تصمیم می‌گیرد که در صورت عدم موفقیت هر یک از این بررسی‌ها، با نتیجه چه کند. اگر هر یک از این بررسی‌ها به اشتباه پیکربندی شده باشند، ایمیل شما علامت‌گذاری می‌شود. سه دستور به شما می‌گویند که در چه وضعیتی هستید.

این مقاله این دستورات را روی Interserver.net اجرا می‌کند، که یک دامنه واقعی با یک شکاف واقعی است: SPF و DMARC پیکربندی شده است، اما اصلاً رکورد DKIM ندارد. این دستورات همان‌هایی هستند که شما روی دامنه خودتان اجرا خواهید کرد.

SPF: کدام سرورها مجاز به ارسال اطلاعات برای دامنه شما هستند؟

SPF یک رکورد TXT است که در ریشه دامنه شما منتشر می‌شود. این رکورد، آدرس‌های IP مجاز برای ارسال ایمیل برای آن دامنه را فهرست می‌کند. وقتی سرور پیامی دریافت می‌کند که ادعا می‌کند از دامنه شماست، بررسی می‌کند که آیا IP فرستنده در آن فهرست قرار دارد یا خیر.

دامنه خود را با موارد زیر بررسی کنید dig:

dig +short TXT irwebhost.com

نتیجه

"v=spf1 ip4:66.45.228.2 ip4:157.250.199.188 include:amazonses.com include:relay.is.cc -all"

آن را تکه تکه تجزیه کنید:

  • v=spf1این را به عنوان یک رکورد SPF اعلام می‌کند.
  • ip4:66.45.228.2و ip4:157.250.199.188آیا دو IP خاص مجاز به ارسال هستند؟
  • include:amazonses.comرکورد SPF آمازون را دریافت می‌کند، به این معنی که Amazon SES مجاز به ارسال برای این دامنه است.
  • include:relay.is.ccهمین کار را برای سرویس رله InterServer انجام می‌دهد.
  • -allبه معنای شکست سخت است. هر سرور دیگری که به عنوان irwebhost.com ایمیل ارسال می‌کند باید رد شود.

تفاوت بین -allو ~allمهم است. -all(شکست سخت) به گیرنده‌ها می‌گوید که پیام‌های دریافتی از سرورهای غیرمجاز را رد کنند. ~all(شکست نرم) آنها را به عنوان مشکوک علامت‌گذاری می‌کند اما از آنها عبور می‌دهد. شکست سخت برای قابلیت تحویل بهتر است، اما تنها در صورتی که مطمئن باشید تمام منابع ارسال قانونی را فهرست کرده‌اید.

DKIM: امضای رمزنگاری‌شده‌ای که ثابت می‌کند پیام تغییر نکرده است

SPF فرستنده پاکت را که جدا از آدرس فرستنده قابل مشاهده است، تأیید می‌کند. DKIM خود پیام را تأیید می‌کند. قبل از ارسال، سرور ایمیل مبدا، هش هدرها و بدنه پیام را محاسبه می‌کند، آن را با یک کلید خصوصی رمزگذاری می‌کند و آن را به عنوان هدر امضای DKIM پیوست می‌کند. سرورهای گیرنده، کلید عمومی را در DNS در آدرس زیر جستجو می‌کنند selector._domainkey.yourdomain.com، امضا را رمزگشایی می‌کنند و تطابق هش را تأیید می‌کنند.

اگر مطابقت داشته باشد، پیام در حین انتقال دستکاری نشده است. اگر مطابقت نداشته باشد، پیام در جایی بین سرور شما و گیرنده تغییر کرده است.

برای بررسی رکوردهای DKIM، باید انتخابگر (selector) را بشناسید. انتخابگرهای رایج عبارتند از default، google، mailو نام‌های خاص ارائه‌دهنده مانند amazonses. آنها را امتحان کنید:

dig +short TXT default._domainkey.irwebhost.com
dig +short TXT google._domainkey.irwebhost.com
dig +short TXT mail._domainkey.irwebhost.com
dig +short TXT amazonses._domainkey.irwebhost.com

هیچ‌کدام از آن‌ها رکوردی را برنمی‌گردانند. irwebhost.com هیچ رکورد DKIM منتشر شده‌ای ندارد. هر ایمیلی که از این دامنه ارسال می‌شود بدون امضای DKIM می‌رسد، به این معنی که سرورهای گیرنده نمی‌توانند تأیید کنند که محتوای پیام در حین انتقال تغییر نکرده است. این شکافی است که ارزش رفع شدن دارد.

برای مقایسه، گیت‌هاب یک رکورد DKIM منتشر می‌کند:

dig +short TXT selectors._domainkey.github.com

یک کلید عمومی را برمی‌گرداند. اگر ایمیلی از github.com دریافت کنید، سرور گیرنده می‌تواند امضای DKIM را با استفاده از آن کلید تأیید کند و تأیید کند که پیام توسط GitHub ارسال شده و در حین انتقال تغییر نکرده است.

DMARC: سیاستی که به گیرنده‌ها می‌گوید در صورت عدم موفقیت احراز هویت چه کاری انجام دهند

DMARC روی SPF و DKIM قرار می‌گیرد. این یک رکورد TXT است که _dmarc.yourdomain.comبه سرورهای گیرنده می‌گوید در صورت عدم احراز هویت یک پیام، چه کاری باید انجام دهند. همچنین گزارش‌های کلی را به آدرس ایمیلی که شما مشخص می‌کنید ارسال می‌کند.

بررسی کنید:

dig +short TXT _dmarc.irwebhost.com

دامنه irwebhost.com این را برمیگرداند:

"v=DMARC1;p=reject;fo=1;rua=mailto:7a398a65@mxtoolbox.dmarc-report.com;pct=10"

برچسب‌ها را بخوانید:

  • v=DMARC1این را به عنوان یک رکورد DMARC شناسایی می‌کند.
  • p=rejectیعنی گیرنده‌ها باید پیام‌های ناموفق را به‌طور کامل مسدود کنند.
  • fo=1به معنای تولید گزارش پزشکی قانونی در صورت عدم موفقیت یک پیام است.
  • rua=mailto:7a398a65@mxtoolbox.dmarc-report.comجایی است که گزارش‌های کلی به آن می‌روند.
  • pct=10نکته اینجاست. سیاست رد کردن فقط برای ۱۰ درصد از پیام‌های ناموفق اعمال می‌شود. ۹۰ درصد دیگر بدون توجه به این موضوع، عبور می‌کنند.

این pct=10یک حالت آزمایشی است. IRWebHost.com به تدریج DMARC را با 10 درصد ترافیک شروع می‌کند. هنگامی که گزارش‌ها بی‌نقص به نظر برسند، مرحله بعدی افزایش آن به 100 درصد است. باقی گذاشتن آن روی 10 درصد به طور دائم به این معنی است که 90 درصد از پیام‌های جعلی که ادعا می‌کنند از irwebhost.com هستند، همچنان دریافت خواهند شد.

اجرای ممیزی کامل دامنه شما

برای دریافت تصویر کامل، این سه دستور را روی هر دامنه‌ای اجرا کنید:

# SPF
dig +short TXT yourdomain.com

# DKIM (try common selectors)
for sel in default google mail amazonses; do
  result=$(dig +short TXT ${sel}._domainkey.yourdomain.com 2>/dev/null)
  if [ -n "$result" ]; then
    echo "${sel}._domainkey: $result"
  fi
done

# DMARC
dig +short TXT _dmarc.yourdomain.com

اگر SPF به طور کامل وجود نداشته باشد، دامنه شما کاملاً باز است. هر سروری می‌تواند به عنوان دامنه شما ایمیل ارسال کند و SPF آن را مسدود نمی‌کند. اگر DKIM وجود نداشته باشد، سرورهای گیرنده نمی‌توانند صحت پیام را تأیید کنند. اگر DMARC وجود نداشته باشد، گیرنده‌ها هیچ سیاستی برای اعمال در هنگام عدم موفقیت احراز هویت ندارند.

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

# GitHub SPF
dig +short TXT github.com | grep spf
# "v=spf1 ip4:192.30.252.0/22 include:spf.protection.outlook.com ..."

# GitHub DMARC
dig +short TXT _dmarc.github.com
# "v=DMARC1; p=quarantine; sp=reject; pct=100; ..."

گیت‌هاب از p=quarantine(علامت‌گذاری به عنوان هرزنامه، مسدود نکردن) برای سیاست اصلی خود، sp=rejectبرای زیردامنه‌ها (مسدود کردن کامل) و pct=100(اعمال روی همه پیام‌ها) استفاده می‌کند. این یک موضع تهاجمی‌تر از گسترش تدریجی دامنه irwebhost.com است.

وقتی چیزی اشتباه است چه چیزی را باید اصلاح کرد؟

اگر SPF به طور کامل وجود نداشته باشد، دامنه شما کاملاً باز است. هر سروری می‌تواند با نام yourdomain.com ایمیل ارسال کند و SPF آن را مسدود نمی‌کند. خرابی‌های SPF به طور پیش‌فرض باعث رد شدن پیام‌ها نمی‌شوند؛ آنها فقط به گیرنده‌ها می‌گویند که پیام از یک منبع غیرمجاز آمده است. بدون وجود یک سیاست DMARC که به گیرنده‌ها بگوید با خرابی‌های SPF چه کنند، اکثر سرورها به هر حال پیام را می‌پذیرند. قبل از ارسال هر چیزی از VPS خود، یک رکورد SPF اضافه کنید.

اگر SPF اشتباه است، رکورد DNS TXT خود را به‌روزرسانی کنید تا تمام آدرس‌های IP و سرویس‌های شخص ثالثی که برای دامنه شما ایمیل ارسال می‌کنند را فهرست کنید. اگر از Amazon SES، Postmark، Mailgun یا هر سرویس ایمیل دیگری استفاده می‌کنید، include:دستورالعمل آنها را به رکورد اضافه کنید. فراموش کردن یک سرویس به این معنی است که ایمیل از آن منبع، SPF را از دست می‌دهد، که در صورت سخت‌گیری در سیاست DMARC می‌تواند دامنه شما را علامت‌گذاری کند.

اگر DKIM وجود نداشته باشد، ارائه‌دهنده ایمیل شما آن را تنظیم می‌کند. Amazon SES، Mailgun، SendGrid و اکثر سرویس‌های ایمیل تراکنشی یک جفت کلید DKIM تولید می‌کنند و به شما می‌گویند که رکورد DNS را اضافه کنید. انتخاب‌کننده مختص ارائه‌دهنده شماست. پس از افزودن رکورد، حجم ارسال معمولاً امضا را به طور خودکار فعال می‌کند. کلید خصوصی هرگز سرورهای ارائه‌دهنده شما را ترک نمی‌کند؛ فقط کلید عمومی به DNS می‌رود.

اگر DMARC وجود ندارد، با انتشار یک رکورد فقط مانیتور شروع کنید:

v=DMARC1; p=none; rua=mailto:dmarc-reports@yourdomain.com

گزارش‌های کلی را تنظیم کرده p=noneو به مدت یک یا دو هفته مشاهده کنید. این گزارش‌ها به شما می‌گویند که کدام منابع قانونی برای دامنه شما ایمیل ارسال می‌کنند و آیا هیچ‌کدام از آنها SPF یا DKIM ندارند. ممکن است متوجه شوید که منابعی در حال ارسال هستند که از آنها بی‌خبر بوده‌اید، مانند یک پلتفرم بازاریابی یا یک CRM شخص ثالث که از طرف شما ارسال می‌کند. پس از شناسایی و تأیید همه منابع قانونی، به سراغ موارد مثبت کاذب بروید و آنها را رصد کنید. فقط زمانی که مطمئن شدید هیچ منبع قانونی از کار نمی‌افتد، p=quarantineبه این مرحله بروید .p=reject

اگر DMARC وجود دارد اما pctزیر ۱۰۰ است، آن را به عنوان یک مقدار آزمایشی موقت در نظر بگیرید. آن را به تدریج افزایش دهید: ۱۰، ۲۵، ۵۰، ۱۰۰ درصد، و در هر مرحله گزارش‌ها را زیر نظر بگیرید. گزارش‌هایی که برای یک مرحله درصد مشخص متوقف می‌شوند، به این معنی است که شما یک منبع قانونی را قطع کرده‌اید؛ برای یافتن آن، گزارش‌های قانونی را بررسی کنید.

ما در ایران وب هاست یکی از کامل ترین و بهترین خدمات ایمیل را بر روی سرورهای پرقدرت یا مجازی ارایه میکنیم که ارسال و دریافت امن را تضمین میکند