یکی از بزرگترین چالشهای این سالهای من این بوده که چه طور میشه از جفنگ (اسپم) شدن رایانامههایی که میفرستم جلوگیری کرد. خیلی چیزها رو امتحان کردم ولی هنوز هم جفنگ میشن. چند روز پیش تصمیم گرفتم که چیزهای جدیدی رو برای رفع اسپم شدن رایانامه امتحان کنم و دیدم که شاید بد نباشه هر چی رو امتحان کردم بذارم اینجا شاید به درد کسی بخوره. توی این نوشته در مورد تنظیمهای دامنه مینویسم و بقیه رو توی نوشتههای دیگه.
تنظیمهای مربوط به دامنه (Name Server)
لازمه که یه سری چیزها برای دامنه تنظیم بشه. من از سرویسهایی استفاده میکنم که امکانات کاملتری برای این تنظیمها ارائه میکنند. در واقع اگر روی nic.ir دامنه دارید یا خیلی از سرویسهای دامنهی ایرانی، تقریبن باید فکر کنید که چنین امکانی رو بهتون نمیدن. برای همین بهتره که دنبال یه سرویس مکمل تنظیمهای DNS باشید. گزینههای رایگان و پولی زیادی هست مثل Hurricane Electric Internet Services یا NameCheap FreeDNS یا حتا کلودفلر.
اما اگه به هر دلیلی امکان یا میلی به استفاده از این سرویسها رو ندارید، باید یه سرور DNS راهاندازی کنید. البته که خیلی از نرمافزارهای مدیریت سرور مثل cPancel و Plesk و Webmin این امکان رو دارن.
اما سوآل اساسی اینه که چه جور این رکوردها باید تنظیم بشن و چه ربطی به اسپم شدن رایانامه دارن.
رکوردهای زیادی هستند که برای هر دامنه میشه تعیین کرد. هر رکورد یه کارآیی خاص داره. رکوردهای زیر توی این تنظیمی که ما میخوایم انجام بدیم موثر هستند.
برای دادن اطلاعات با حجم بالا | TXT |
برای مشخص کردن این که هر آدرس آیپی به چه (زیر)دامنهای مربوط است | A/AAAA |
برای تعیین آدرس سرور رایانامه (ایمیل) | MX |
برای مشخص کردن آیپی آدرس هر (زیر)دامنه | PTR |
نکته: PTR نقطهی مقابل A/AAAA است که توی شکل زیر نشون داده شده.
فرض کنید که یه دامنه داریم به اسم domain.com که به آدرس سرور 1.2.3.4 وصله. ما میخوایم این تنظیمها رو انجام بدیم که هر کسی خواست به سرور ما وصل شه یه سری اطلاعات بگیره. این اطلاعات کمک میکنه که از اسپم شدن رایانامه جلوگیری بشه.
پس من تنظیمهای دامنه رو این جوری میذارم.
توضیح | مقدار | نوع | نام |
دامنهی اصلی از این دامنه آیپی 1.2.3.4 وصل شود | 1.2.3.4 | A | @ |
زیردامنهی mail به آیپی 1.2.3.4 وصل شود | 1.2.3.4 | A | |
برای فرستادن/گرفتن رایانامه از این آدرس (با اولویت ۱۰) استفاده کن | 10 mail.domain.com. | MX | @ |
آیپی 1.2.3.4 را با domain.com وصل کن | domain.com | PTR | @ |
تنظیم تصدیق رایانامه (جزئیات در زیر) | v=DMARC1; p=reject; | TXT | _dmarc |
شیوهنامهی تصدیق رایانامه (جزئیات در زیر) | v=DKIM1; k=rsa; t=s; p=MIIBIjANBgkqhk… | TXT | 2019._domainkey |
شیوهنامهی تصدیق رایانامه (جزئیات در زیر) | v=spf1 a mx -all | TXT | @ |
نکته: ممکن است که برای تارنمای خود رکوردهای بیشتری داشته باشین اما این رکوردها برای داشتن سرور رایانامهی امن لازماند.
حالا در مورد سه رکورد TXT که بالا گذاشتیم یه توضیح میدم که متوجه بشید برای چی هستند و به چه دردی میخورن.
پروتکل DMARC
این پروتکل مخفف Domain-based Message Authentication, Reporting and Conformance به معنی تصدیق، پیروی و گزارشدهی پیام بر مبنای دامنه است. در واقع DMARC به مالک دامنه این امکان را میده که دامنهی خود را در مقابل سواستفاده محافظت کنه. به صورت خلاصه برای گیرندههای رایانامههایی که از دامنه/سرور شما فرستاده شده تعیین میکنه که چه برخوردی با رایانامهی دریافتی بکنه. به عبارت دیگه به سرور گیرندهی رایانامه میگه که چه جوری با فیلد from توی پیام دریافتشده برخورد کنه.
شاید برای شما هم پیش اومده باشه که از دامنهای پیام بگیرید ولی مطمئن نباشید که مالک رایانامه این پیام رو برای شما نفرستاده اما مطمئن هستید که فرستده دوست شماست و آدرس رایانامه هم درسته. دلیل این که چنین رایانامههایی میگیرید اینه که اسپمرها از این ضعف امنیتی استفاده میکنند تا با سواستفاده از آدرس رایانامهی یکی دیگه بقیه رو گول بزنن و جفنگ بفرستند. البته که ممکنه حملههای دیگهای مثل فیشینگ یا کلاهبرداری هم رخ بده.
پروتکل DMARC مشخص میکنه که چه جوری باید جلوی سواستفاده گرفته بشه. این کار رو با تعیین یه قاعده برای سرور گیرندهی رایانامه مشخص میشه. این قانون دو مکانیزم SPF و DKIM رو برای تشخیص و واکنش به سواستفاده به کار میبنده.
چه جور باید این قاعدهی DMARC رو مشخص کرد؟
برای این کار باید مقدارهای لازم رو توی رکورد نوع TXT توی دامنه مشخص کرد. گوگل یه جدول خلاصه و خوب تهیه کرده که منم اون رو پیشنهاد میدم. به علاوه که اگه حوصله ندارید این تنظیمها رو بخونید از سرویسی مثل MX Toolbox استفاده کنید تا رکورد رو براتون بسازه. البته سرویسهای دیگهای هم هست که این امکان رو بهتون میده تا گزارشها رو به صورت گرافیکی داشته باشید؛ مثل Postmark.
Type: TXT Host/Name: _DMARC.domain.com Value: v=DMARC1; p=none; rua=mailto:[email protected]; ruf=mailto:[email protected]; sp=none; adkim=s; pct=10
شکل زیر به صورت گرافیکی نشون میده که DMARC چه کار میکنه.
مکانیزم DKIM
DKIM که مخفف DomainKeys Identified Mail است یک شیوهی تصدیق رایانامه برای گیرندهی آن است. با این شیوه گیرندهی رایانامه میتوانه مطمئن شه که رایانامهی دریافتی از طرف فرستندهی مدعی شده در آدرس فرستنده ارسال شده.
امضای DKIM از طریق یک عامل انتقال نامه (Mail Transfer Agent یا MTA) به شکل هش (Hash) تولید میشه. کلید خصوصی این جفت کلید روی سرور رایانامه (ایمیل) نگهداری میشه و کلید عمومی در تنظیمهای دامنه. وقتی که گیرندهی یک رایانامه، رایانامهای رو دریافت میکنه، هش فرستاده شده رو با کلید عمومی فرستنده باز میکنه تا فرستندهی آن رو تصدیق کنه.
واضحه که اگه فرستنده از یه کلید خصوصی دیگه استفاده کنه یعنی که امکان خوندن هش برای کسی وجود نداره پس مشخص میشه که فرستندهی رایانامه معتبر نیست. شاید لازم باشه برای فهمیدن این مکانیزم یه کم در مورد رمزنگاری نامتقارن مطالعه کنید.
مکانیزم SPF
SPF یا Sender Policy Framework یه تکنیک دیگه برای تصدیق رایانامه است. این تکنیک سادهتر از DKIM است و خیلی میگه که چه آیپی آدرسها و دامنههایی اجازه دارن با این دامنه رایانامه بفرستند. اگه به مثالی که داریم برگردیم و فرض کنیم که domain.com داره از سرویس گوگل برای فرستادن و گرفتن رایانامه استفاده میکنه (یعنی خودش سرور ایمیل نداره). پس باید توی تنظیمهای دامنه بگیم که SPF این دامنه mail.google.com یا آیپی گوگل یا هر است.
البته که میشه خیلی عام این رو اعلام کرد یا خیلی خاص. مثلن میشه گفت که اگه آیپی یا دامنه یکی بود قبول کن (عام) یا حتمن باید آیپی و دامنه چیزهایی باشند که اینجا نوشته (خاص). خیلی ساده و مطمئن از مقدار زیر برای تنظیم دامنه استفاده کنید. معنیاش اینه که اگه رایانامهای گرفتی و فرستندهی اون با رکورد A یا MX سازگار بود، تصدیق میشه. در غیر این صورت اصلن تصدیق نمیشه (همهی رایانامههای غیر از این رو رد کن). برای اون بخش آخر حالتهای ~ یا + یا ? هم وجود داره.
Type: TXT Host/Name: domain.com v=spf1 a mx -all
چه جوری آزمایش کنیم که تنظیمهای انجام شده موفقیتآمیز بوده
بهترین راه برای آزمایش اینه که نتیجه رو بررسی کنید ولی چند تا ابزار هست که بهتون کمک میکنه؛ مثل MX Toolbox و DNSstuff و Mail Tester.
منابع:
– سه تا اینفوگرافیک رو از تارنمای postmarkapp.com گرفتم.
پیام