DMARC یا Domain-based Message Authentication, Reporting, and Conformance پروتکلی است که با استفاده از پروتکل‌های SPF و DKIM، برای احراز هویت و جلوگیری از جعل ایمیل استفاده می‌شود. این پروتکل از طریق یک رکورد از نوع TXT در DNS Zone دامنه ایجاد می‌شود.
کارگروه مهندسی اینترنت (IETF) – RFC7489، در تعریف و به‌کارگیری DMARC دو هدف در نظر گرفته است؛ یکی تعیین و اعلام خط‌مشی‌هایی که دریافت‌کننده باید در زمان بررسی فاکتورهای SPF و DKIM ایمیل در پیش بگیرد و دوم ارسال گزارشِ نتیجه بررسی به مالک دامنه، از سوی سرورِ ایمیلِ مقصد.

DMARC Record چطور کار می‌کند؟

گفتیم که DMARC برای احراز هویت و جلوگیری از جعل ایمیل‌های دریافتی از پروتکل‌های SPF و DKIM قابلِ تعریف در فایل DNS Zone دامنه، استفاده می‌کند. به‌طور خلاصه، در رکورد SPF، لیست آدرس IPهای مُجازی وجود دارد که از سوی مدیر دامنه می‌توانند نقش سرورِ ایمیل را بازی کنند. با رکورد DKIM فرستنده اصالت‌سنجی می‌شود و محتوای پیام ارسالی در حین انتقال تغییر نمی‌کند. این عملیات با رمزنگاری و در اختیارگذاشتن کلید عمومی امکان‌پذیر است.
رویه کلی عملکرد DMARC شامل گام‌های زیر است:

۱. مدیرِ یک دامنه، خط‌مشی‌هایی را که برای احراز هویت ایمیل در سمت مقصد مورد نیاز است و همچنین اقداماتی را که گیرنده در صورت روبه‌روشدن با نقض این خط‌مشی‌ها باید در نظر بگیرد، در رکوردی از نوع TXT در فایل DNS Zone دامنه قرار می‌دهد. به عبارت دیگر، در این گام، رکوردهای DMARC و در ادامه‌ی آن SPF یا DKIM می‌سازد.

۲. هنگامی که کاربر مقصد، ایمیلی را دریافت می‌کند، با استفاده از بررسی DNS نام دامنۀ فرستندۀ ایمیلِ موجود در بخشِ From از قسمت header ایمیل، از خط‌مشی‌های تعریف‌شده برای DMARC و همچنین اطلاعات مورد نیاز برای بررسی آزمون‌های SPF و DKIM آن دامنه درخواست اطلاع می‌کند. سپس سرور دریافت‌کننده ۳ عامل را در ایمیل دریافتی ارزیابی می‌کند:

  •  آیا آزمون DKIM با موفقیت انجام می‌شود یا نه. مثبت بودن این آزمون می‌تواند به معنای جعل نبودن هویت فرستنده‌ی ایمیل باشد، اما نه لزومن!
  •  آیا آدرس IP ایمیل دریافتی، در لیست موارد مجاز مشخص‌شده در رکورد SPF دامنه قرار دارد یا نه.
  •  آیا نام‌دامنه‌ی موجود در بخش From از header ایمیل دریافتی، با نام دامنۀ مشخص‌شده در هرکدام از رکوردهای SPF و DKIM هم‌خوانی دارد یا نه.

۳. با بررسی‌های انجام‌شده در ۲ گام پیشین، سرور دریافت‌کننده ایمیل می‌تواند توجه به رویه‌های تعریف‌شده در رکورد DMARC برای قبول، رد یا قرنطینه‌ کردن ایمیل دریافتی تصمیم بگیرد.

۴. سرورهای دریافت‌کننده، گزارشی مبنی بر نتیجۀ بررسی‌های صورت‌گرفته روی ایمیل‌ها را به آدرس ایمیلی که در رکورد DMARC مشخص شده می‌فرستند.

ساختار DMARC Record

رکورد DMARC در فایل تنظیمات DNS Zone دامنه قرار می‌گیرد. این رکورد، نوع خاصی از رکورد TXT است. برای آشنایی با ساختار کلی آن، یک نمونه از آن را بررسی می‌کنیم.

example._domainkey.example.com. 120 IN  TXT     "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDqFGebZAOHfSGy9CWtA4Uads0zaXAy8TWtW9uIFby"

می‌بینید که این رکورد با عبارت dmarc.mydomain.com_ آغاز می‌شود. dmarc_ بیانگر پروتکل رکورد و mydomain.com نام‌دامنه‌ای است که در فایل DNS Zone آن می‌خواهیم رکورد DMARC تعریف کنیم.

  •  TTL میزان زمانی است که سرورهای DNS داده‌های این رکورد را در خود ذخیره می‌کنند.
  • TXT نوع رکورد DNS را مشخص می‌کند.
  • اما آنچه در عمل مشخص می‌کند چه کارهایی بایستی صورت گیرد، در بخش Value قرار دارد. در تگ v=DMARC1 نوع پروتکلی را که در رکورد TXT قصد به‌کارگیری‌اش را داریم مشخص می‌کنیم. بنابراین در اینجا نام DMARC قرار گرفته است. عدد ۱ هم نسخۀ آن را مشخص می‌کند. توجه داشته باشید که مقدارهای آن با حروف بزرگ نوشته شده است.

در قسمت p که همان policy یا خط‌مشی‌هاست، می‌توانید از یکی از مقدارهای quarantine ،none و reject استفاده کنید. در واقع مقدار موجود در p مشخص می‌کند که در صورت تأیید نشدن یکی از آزمون‌های SPF یا DKIM، چه اقداماتی انجام شود. در حالت none که به معنای تأیید ایمیل‌های ورودی در هر حالتی است، بدون توجه به نتایج آزمون‌های SPF و DKIM و همین‌طور هم‌خوانی آدرس‌های دامنه در بخش From، ایمیل به صندوق دریافتی گیرنده وارد می‌شود. در این حالت فقط یک گزارش از وضعیت پیش‌آمده به آدرسِ مالک دامنۀ سرور ایمیل که در بخش rua و ruf مشخص شده، فرستاده می‌شود. در حالت quarantine، در کنار ارسال گزارش‌ها، ایمیل‌های مشکوک وارد پوشۀ اسپمِ گیرنده می‌شوند. و در حالت reject نیز از ورود ایمیل‌های تاییدنشدۀ آزمون‌ها و بدونِ هم‌خوانی آدرس دامنۀ بخش From، به‌طور کل جلوگیری می‌شود.

تگ‌های aspf و adkim برای مشخص کردن میزان هم‌خوانی آدرس موجود در بخش From ایمیل دریافتی، با نام‌‎دامنه‌های مشخص‌شده در رکوردهای SPF و DKIM استفاده می‌شود. این هم‌خوانی می‌تواند relaxed باشد که در این حالت subdomainهای یک دامنه را هم جزو موارد مجاز تلقی می‌کند یا اینکه strict باشد که دقیقاً نام و سطح دامنه‌ها بایستی با یکدیگر برابری کنند. در حالت پیش‌فرض و بدون درج این تگ‌ها، مقدار r یا relaxed برای آنان در نظر گرفته می‌شود. برای اعمال تنظیم strict، لازم است مقدارهای adkim و aspf را برابر s قرار بدهید.

rua=mailto:dmarc-aggregate@mydomain.com و یا Reporting URI(s) for aggregate data آدرسی است که سرور دریافت‌کنندۀ ایمیل، به صورت دوره‌ای و طبق زمان‌بندی خاص، مثلاً به‌طور روزانه، گزارش کاملی از ایمیل‌هایی را که از سوی دامنۀ شما دریافت کرده است، برای‌تان می‌فرستد. حالا این دامنه‌های ادعایی می‌توانند حقیقی و از سوی موارد مجاز شما باشند، یا آنکه افرادی در حال جعل هویت و ارسال ایمیل از سوی شما. در حالت دوم، می‌توانید با استفاده از این گزارش‌ها، نام‌دامنه‌ها و آدرس‌های IP سوء‌استفاده‌کننده از هویت خود را در لیست سیاه آتی SPF قرار دهید. این گزارش شامل تمامی موارد رد یا تأیید خط‌مشی‌های SPF ،DMARC و DKIM هم هست که دست مدیر دامنه را برای گرفتن تصمیم‌های تکمیلی برای کاهش موارد اسپم و جعل هویت باز می‌گذارد.

اما تگ ruf=mailto:dmarc-afrf@mydomain.com و یا Reporting URI(s) for failure data آدرسی است که فقط در هنگام دریافت ایمیل‌هایی با نقض خط‌مشی‌های DMARC و آزمون‌های SPF و DKIM از سوی گیرنده، گزارش آن فرستاده می‌شود. این گزارش برخلاف گزارش دوره‌ای و زمان‌بندی‌شدۀ rua، به صورت لحظه‌ای و با رخداد هر نوع خطایی ارسال می‌شود؛ بنابراین احتمالاً در این حالت مدیر دامنه بایستی انتظار دریافت ایمیل‌ با حجم زیاد را داشته باشد. همچنین این تگ برخلاف rua، اطلاعات بیشتری را دربارۀ خطاهای رخ‌داده در اختیار می‌گذارد.

خوب است بدانید که تگ v باید در ابتدا مشخص شود و پس از آن تگ p قرار گیرد. باقی تگ‌ها که به صورت اختیاری هستند، با هر ترتیبی می‌توانند نوشته شوند. همچنین قرار دادن تگ rua با یک آدرس ایمیل معتبر برای اطمینان از کارکرد صحیح پروتکل DMARC اهمیت دارد.

تنظیم رکورد DMARC در پنل کاربری ابر آروان

برای ثبت نمونه رکورد در پنل آروان پس از انتخاب دامنه از پنل کاربری، روی رکوردهای DNS کلیک و یک رکورد TXT جدید ایجاد کنید.

ثبت رکورد با استفاده از API

curl --location --request POST\ 'https://api.arvancloud.ir/cdn/4.0/domains/example.com/dns-records'\
--header 'authority: napi.arvancloud.ir'\
--header 'accept: application/json, text/plain,*/*'\
--header 'authorization: API 1.2.3.4'--\
--header 'content-type: application/json;charset=UTF-8'\
--header 'origin: https://panel.arvancloud.ir'\
--data-raw '{"type":"TXT","name":"example._domainkey","cloud":true,"value":{"text":" v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDqFGebZAOHfSGy9CWtA4Uads0zaXAy8TWtW9uIFby"},"upstream_https":"default","ip_filter_mode":{"count":"single","geo_filter":"none","order":"none"},"ttl":120}'

Bind Format رکورد ثبت‌شده

example._domainkey.example.com. 120 IN  TXT     "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDqFGebZAOHfSGy9CWtA4Uads0zaXAy8TWtW9uIFby"

خروجی دستور dig