طی چندسال اخیر یکی از مشکلاتی که با شرکتهای ارائه دهنده خدمات هاستیگ داشتم اسپم شدن ایمیلهای ارسالی از میل سرور آنها و از طرف سرویس دهندههایی مثل Gmail و Yahoo بود و این مشکل معمولا برای اکثر شرکت های ایرانی به دلیل عدم کانفیگ درست میل سرور وجود داشت. این مسئله به صورت پیشفرض برای همه میل سرورها به وجود میاید و این کار توسط سرویس دهنده مقصد برای جلوگیری از اسپمینگ صورت میگیرد. در اکثر سرویس دهنده های ایمیل معتبر مثل Gmail شیوه دریافت ایمیل برای چک کردن ایمیلهای دریافتی و اینکه از یک میل سرور معتبر ارسال شده یا نه، به این شکل است که ایمیلهای ارسالی از میل سرور مبدا باید با استفاده از DKIM یا Domain Key Identify Mail نشانه گذاری شوند.
اگر بخواهیم به ساده ترین شکل ممکن این موضوع رو توضیح دهیم باید اینگونه گقت که بعد از اینکه DKIM روی سرور نصب و کانفیگ شد ایمیلهای ارسالی در هدر ایمیلها با یک استرینگ نشانه گذاری میشوند و توسط TXT Recordی که در DNS Zone دامین قرار داده میشود توسط جیمیل مقایسه میشود. تست این مقایسه اگر با موفقیت انجام شود ایمیل ارسالی وارد inbox میشود و در غیر اینصورت باید در اسپم پاکس به دنبال ایمیل ارسالی بگردید. یکی از شیوههای ارسال اسپم به این شکل است که اسپمر با تغییر آدرس ارسال کننده ایمیل ( From: ) سعی در فریب مخاطب و دریافت کننده ایمیل را دارد که این ایمیل حتما از صاحب آدرس دامین ارسال شده است و با اسفاده از DKIM جیمیل و سایر میل سرورهای معتبر، از این متد برای اسپم کردن ارسال کننده غیرواقعی استفاده میکنند.
پیشنیاز این مطلب نصب و کانفیگ یک میل سرور با استفاده از Postfix به عنوان SMTP Server بر روی توزیع Debian GNU/Linux نسخه Wheezy و Squeeze یا Ubuntu Server است . ابزاری که برای 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 استفاده کنند.
127.0.0.1
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
منبع: SlashRosha