منبع اصلی نوشتار زیر در این لینک قرار دارد

DKIM بر روی سرورهای Debian و جلوگیری از اسپم شدن ایمیل‌ها

طی چندسال اخیر یکی از مشکلاتی که با شرکت‌های ارائه دهنده خدمات هاستیگ داشتم اسپم شدن ایمیل‌های ارسالی از میل سرور آنها و از طرف سرویس دهنده‌هایی مثل Gmail و Yahoo بود و این مشکل معمولا برای اکثر شرکت های ایرانی به دلیل عدم کانفیگ درست میل سرور وجود داشت. این مسئله به صورت پیشفرض برای همه میل سرورها به وجود می‌اید و این کار توسط سرویس دهنده مقصد برای جلوگیری از اسپمینگ صورت میگیرد. در اکثر سرویس دهنده های ایمیل معتبر مثل Gmail شیوه دریافت ایمیل برای چک کردن ایمیل‌های دریافتی و اینکه از یک میل سرور معتبر ارسال شده یا نه، به این شکل است که ایمیل‌های ارسالی از میل سرور مبدا باید با استفاده از DKIM یا Domain Key Identify Mail نشانه گذاری شوند.

mail-server

اگر بخواهیم به ساده ترین شکل ممکن این موضوع رو توضیح دهیم باید اینگونه گقت که بعد از اینکه DKIM روی سرور نصب و کانفیگ شد ایمیل‌های ارسالی در هدر ایمیل‌ها با یک استرینگ نشانه گذاری میشوند و توسط TXT Recordی که در DNS Zone دامین قرار داده میشود توسط جیمیل مقایسه میشود. تست این مقایسه اگر با موفقیت انجام شود ایمیل ارسالی وارد inbox میشود و در غیر اینصورت باید در اسپم پاکس به دنبال ایمیل ارسالی بگردید. یکی از شیوه‌های ارسال اسپم به این شکل است که اسپمر با تغییر آدرس ارسال کننده ایمیل ( From: ) سعی در فریب مخاطب و دریافت کننده ایمیل را دارد که این ایمیل حتما از صاحب آدرس دامین ارسال شده است و با اسفاده از DKIM جیمیل و سایر میل سرور‌های معتبر، از این متد برای اسپم کردن ارسال کننده غیرواقعی استفاده میکنند.

پیشنیاز این مطلب نصب و کانفیگ یک میل سرور با استفاده از Postfix به عنوان SMTP Server بر روی توزیع Debian GNU/Linux نسخه Wheezy و Squeeze است . ابزاری که برای DKIM در سرورهای لینوکسی استفاده میشود OpenDKIM است. برای نصب OpenDKIM بر روی سرورهای Debian پکیج‌های زیر را نصب میکنیم.

sudo apt-get install opendkim opendkim-tools

برای ادامه نیاز دارید که Public Key و Private Key را برای هر دامین خود بر روی سرور ایجاد کنید. Public Key ایجاد شده در نهایت به عنوان TXT Record روی DNS  Zone تعریف میشود. برای ایجاد کلید ابتدا باید مسیر زیر را ایجاد کنید. فقط فراموش نکنید که در کامندهای زیر به جای example.com آدرس دامین خود را قرار دهید:

mkdir -p /etc/opendkim/keys/example.com

با استفاده از opendkim-genkey کلید Private مربوط به دامین خود را میتوانید ایجاد کنید:

opendkim-genkey -D /etc/opendkim/keys/example.com/ -d example.com -s default

و سپس نیاز است که owner کلید دامین را به opendkim تغییر دهید:

chown -R opendkim:opendkim /etc/opendkim/keys/example.com

و در نهایت نام کلید ایجاد شده را از default.private به default تغییر میدهیم.

mv /etc/opendkim/keys/example.com/default.private /etc/opendkim/keys/example.com/default

برای ادامه کار فایل زیر را با استفاده از ادیتور مورد علاقه‌تان مثل Vi یا Nano باز کنید:

vi  /etc/opendkim.conf

و محتوای زیر را جایگزین محتوای آن کنید:

##
## opendkim.conf -- configuration file for OpenDKIM filter
##
AutoRestart             Yes
AutoRestartRate         10/1h
Canonicalization        relaxed/simple
ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts
InternalHosts           refile:/etc/opendkim/TrustedHosts
KeyTable                refile:/etc/opendkim/KeyTable
LogWhy                  Yes
Mode                    sv
PidFile                 /var/run/opendkim/opendkim.pid
SignatureAlgorithm      rsa-sha256
SigningTable            refile:/etc/opendkim/SigningTable
Socket                  inet:8891@localhost
Syslog                  Yes
SyslogSuccess           Yes
TemporaryDirectory      /var/tmp
UMask                   022
UserID                  opendkim:opendkim

بعد از ایجاد کانفیگ مورد نیاز باید فایل زیر ایجاد و باز شود:

vi /etc/opendkim/KeyTable

و خط زیر را در آن کپی کنید. این فایل به OpenDKIM میگوید که کلیدهای دامین شما را کجا و در چه مسیری پیدا کند. اگر برای هر دامین نیاز به کلید داشته باشید باید در همین فایل به شکل زیر یک خط یا لاین جدید ایجاد کنید:

default._domainkey.example.com example.com:default:/etc/opendkim/keys/example.com/default

برای ادامه کار فایل زیر را ایجاد و باز کنید:

vi /etc/opendkim/SigningTable

و مقدار زیر را درون آن قرار دهید. در این فایل برای opendkim تعریف میشود که چه آدرس‌های میتوانند از کلید ساخته شده برای ایمیل‌های معتبر و نشانه‌گذاری شده استفاده کنند. پیشفرض ما بر این است که همه آدرس ایمیل‌های example.com میتوانند از کلید ساخته شده استفاده کنند:

*@example.com default._domainkey.example.com

فایل بعدی که باید ایجاد شود فایل TrustedHosts است:

vi /etc/opendkim/TrustedHosts

و محتوای زیر را با توجه به Hostname سرور خود درون آن کپی کنید. توجه داشته باشید که محتویات این فایل مشخص میکند که چه هاست‌هایی میتوانند از این کلید وopendkim استفاده کنند.

۱۲۷٫۰٫۰٫۱
hostname.example.com
example.com

نکته مهم: حواستان باشد اگر از چند سرور درون شبکه خود استفاده میکنید و آنها از این سرور به عنوان میل سرور استفاده میکنند آدرس آنها را به یکی از صورت‌های HostName یا IP چه IPv4 چه IPv6 و چه CIDR-style IP به شکل w.x.y.z/24 هر یک در قالب یه خط به کانفیگ اضافه کنید.

به مراحل آخر نزدیک میشویم ! کانفیگ Postfix را از مسیر زیر باز کنید:

vi /etc/postfix/main.cf

و در انتهای آن محتوای زیر را اضافه کنید:

smtpd_milters           = inet:127.0.0.1:8891
non_smtpd_milters       = $smtpd_milters
milter_default_action   = accept
milter_protocol		= 2

حالا با استفاده از دستورات زیر سرویس‌های OpenDKIM و Postfix را ریستارت کنیم:

service opendkim restart

service postfix restart

و برای مرحله آخر باید فایل default.txt را از مسیر زیر باز کنید:

cat /etc/opendkim/keys/example.com/default.txt

محتویات داخل آن چیزی شبیه به رشته زیر است:

default._domainkey IN TXT "v=DKIM1; g=*; k=rsa; p=7k45u5i2T1AlEBeurUbdKh7Nypq4lLMXC2FHhezK33BuYR+3L7jxVj7FATylhwI
DAQABMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHY7Zl+n3SUldTYRUEU1BErHkKN0Ya52gazp1R7FA7vN5RddPxW/s
O9JVRLiWg6iAE4hxBp42YKfxOwEnxPADbBuiELKZ2ddxo2aDFAb9U/lp4" ; ----- DKIM default for example.com

 

محتویات آن را کپی کنید و در آخر DNS Zone دامین خود کپی کنید. اگر Bind را به عنوان DNS-Server خود به درستی کانفیگ کرده باشید Zoneهای دامین‌های خود بر روی سرور را باید در مسیر /etc/bind پیدا کنید. بعد از اضافه کردن TXT Record به دامین خود باید Bind را هم ریستارت کنید:

service bind9 restart

راه‌های متعددی برای جلوگیری از ورود ایمیل‌ها به اسپم باکس هست که یکی از آنها SPF  و پکیج OpenSPF است که در مطالب بعدی در مورد آن هم خواهم نوشت. همچنین این راهنما برای سرورهای بر پایه Ubuntu هم قابل استفاده است و تست شده و به خوبی کار میکند.



برچسب ها : , , , , , , , , , , ,