عنوان:

‫نصب و پیکربندی Postfix برای ارسال ایمیل - قسمت ۶ - پیاده‌سازی DKIM (DomainKeys Identified Mail)


نویسنده: وحید نصیری
تاریخ: ۱۴۰۴/۰۴/۲۰ ۰۸:۰۵
آدرس: www.dntips.ir
در قسمت قبل با استفاده از SPF، مشخص کردیم کدام سرورها مجاز به ارسال ایمیل از طرف دامنه ما هستند. اکنون با DKIM یک گام فراتر می‌رویم. DKIM با افزودن یک امضای دیجیتال به هدر ایمیل‌های خروجی، اصالت و تمامیت آن‌ها را تضمین می‌کند. این امضا به سرور گیرنده اطمینان می‌دهد که ایمیل واقعاً از طرف دامنه شما ارسال شده و در مسیر دستکاری نشده است.
فرآیند پیاده‌سازی DKIM شامل پنج مرحله کلیدی است: نصب نرم‌افزار، ساخت کلیدها، پیکربندی نرم‌افزار، اتصال آن به Postfix و در نهایت، انتشار کلید عمومی در DNS.

بخش ۶.۱: نصب OpenDKIM

OpenDKIM یک نرم‌افزار متن‌باز است که به عنوان یک "milter" (فیلتر ایمیل) در کنار Postfix کار می‌کند و فرآیند امضای ایمیل‌ها را مدیریت می‌نماید. ما به دو بسته نیاز داریم: opendkim که خود سرویس اصلی است و opendkim-tools که ابزارهای کمکی مانند ساخت کلید را در اختیار ما قرار می‌دهد.
برای نصب، دستور زیر را در ترمینال اجرا کنید:
sudo apt install opendkim opendkim-tools -y

بخش ۶.۲: ایجاد کلیدهای DKIM (عمومی و خصوصی)

هر امضای دیجیتال به یک جفت کلید نیاز دارد:
  • کلید خصوصی (Private Key): روی سرور شما باقی می‌ماند و برای امضای ایمیل‌ها استفاده می‌شود. این کلید باید کاملاً محرمانه باشد.
  • کلید عمومی (Public Key): در DNS دامنه شما منتشر می‌شود تا سرورهای گیرنده بتوانند با استفاده از آن، امضای ایمیل را تأیید کنند.

مراحل ساخت کلیدها:
ایجاد یک پوشه برای نگهداری کلیدها:
sudo mkdir -p /etc/postfix/dkim

ایجاد جفت کلید با opendkim-genkey:
دستور زیر را اجرا کنید. در این دستور، yourdomain.com را با نام دامنه خود جایگزین کنید.
sudo opendkim-genkey -b 2048 -d yourdomain.com -D /etc/postfix/dkim/ -s mail -v
  • -b 2048: طول کلید را 2048 بیت تعیین می‌کند که یک استاندارد امن و رایج است.
  • -d yourdomain.com: دامنه‌ای که کلید برای آن ساخته می‌شود.
  • -D /etc/postfix/dkim/: پوشه‌ای که کلیدها در آن ذخیره خواهند شد.
  • -s mail: یک نام منحصر به فرد به نام "Selector" (انتخابگر) برای این کلید تعیین می‌کند. این نام به شما اجازه می‌دهد چندین کلید DKIM برای یک دامنه داشته باشید. ما از نام ساده mail استفاده می‌کنیم.
  • -v: حالت پرجزئیات (verbose) را فعال می‌کند.

بررسی فایل‌های ایجاد شده:
پس از اجرای دستور بالا، دو فایل در پوشه /etc/postfix/dkim/ ایجاد می‌شود:
  • mail.private: کلید خصوصی شما.
  • mail.txt: حاوی رکورد DNS و کلید عمومی قابل انتشار است.

تنظیم مالکیت و دسترسی صحیح:
کلید خصوصی باید فقط توسط کاربر opendkim قابل خواندن باشد. این کار برای امنیت ضروری است.
sudo chown opendkim:opendkim /etc/postfix/dkim/*
sudo chmod 600 /etc/postfix/dkim/*.private

بخش ۶.۳: پیکربندی OpenDKIM

اکنون باید به OpenDKIM بگوییم که از کدام کلیدها و برای کدام دامنه‌ها استفاده کند.

ویرایش فایل اصلی پیکربندی:
فایل /etc/opendkim.conf را با یک ویرایشگر متن (مانند nano) باز کنید:
sudo nano /etc/opendkim.conf
مطمئن شوید که خطوط زیر در فایل وجود دارند و از حالت کامنت خارج شده‌اند (علامت # از ابتدای آن‌ها حذف شده است). مقادیر را مطابق با تنظیمات خود ویرایش کنید.
Canonicalization    relaxed/simple
Mode                sv
UserID              opendkim
Socket              inet:8891@localhost

KeyTable            refile:/etc/postfix/dkim/KeyTable
SigningTable        refile:/etc/postfix/dkim/SigningTable
ExternalIgnoreList  refile:/etc/postfix/dkim/TrustedHosts
InternalHosts       refile:/etc/postfix/dkim/TrustedHosts
  • Mode sv: مشخص می‌کند که OpenDKIM هم به عنوان سرویس امضاکننده (s) و هم تأییدکننده (v) عمل کند.
  • Socket: یک سوکت شبکه در پورت 8891 ایجاد می‌کند تا Postfix بتواند با آن ارتباط برقرار کند.
  • سه خط آخر، به فایل‌هایی اشاره می‌کنند که ما در مرحله بعد خواهیم ساخت.

ایجاد فایل‌های نگاشت (Mapping Files):
KeyTable: این فایل، نام انتخابگر (selector) را به کلید خصوصی مربوطه مرتبط می‌کند.
sudo nano /etc/postfix/dkim/KeyTable
محتوای زیر را در آن وارد کنید (yourdomain.com را جایگزین کنید):
mail._domainkey.yourdomain.com yourdomain.com:mail:/etc/postfix/dkim/mail.private

SigningTable: این فایل مشخص می‌کند که برای ایمیل‌های ارسالی از کدام دامنه‌ها، باید از کدام کلید استفاده شود.
sudo nano /etc/postfix/dkim/SigningTable
محتوای زیر را در آن وارد کنید:
*@yourdomain.com mail._domainkey.yourdomain.com
این خط به این معنی است که هر ایمیلی (*) که از دامنه @yourdomain.com ارسال شود، باید با کلیدی که در KeyTable با نام mail._domainkey.yourdomain.com تعریف شده، امضا شود.

TrustedHosts: این فایل لیستی از میزبان‌هایی را که مجاز به ارسال ایمیل برای امضا هستند، مشخص می‌کند.
sudo nano /etc/postfix/dkim/TrustedHosts
محتوای زیر را در آن وارد کنید:
127.0.0.1
localhost
*.yourdomain.com

بخش ۶.۴: اتصال Postfix به OpenDKIM

حالا باید به Postfix بگوییم که قبل از ارسال هر ایمیل، آن را برای امضا شدن به سرویس OpenDKIM (که روی پورت 8891 در حال گوش دادن است) ارسال کند. این کار را با ویرایش فایل پیکربندی اصلی Postfix انجام می‌دهیم:
sudo nano /etc/postfix/main.cf
به انتهای این فایل، خطوط زیر را اضافه کنید:
# OpenDKIM
milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:localhost:8891
non_smtpd_milters = $smtpd_milters
پس از ذخیره فایل‌ها، باید هر دو سرویس را ری‌استارت کنیم تا تغییرات اعمال شوند:
sudo systemctl restart opendkim
sudo systemctl restart postfix

بخش ۶.۵: افزودن رکورد DKIM به DNS

مرحله نهایی، انتشار کلید عمومی در DNS است.
مشاهده محتوای کلید عمومی:
فایل mail.txt که در مرحله دوم ساخته شد، دقیقاً حاوی رکوردی است که باید در DNS وارد کنید. محتویات آن را نمایش دهید:
cat /etc/postfix/dkim/mail.txt
خروجی چیزی شبیه به این خواهد بود:
mail._domainkey IN TXT ( "v=DKIM1; h=sha256; k=rsa; "
  "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...your...long...public...key...here...AQAB" )  ; ----- DKIM key mail for yourdomain.com

ایجاد رکورد TXT در پنل DNS:
  • Type (نوع):TXT
  • Name (نام) یا (Host):mail._domainkey (توجه کنید که mail همان انتخابگری است که ما تعیین کردیم و _domainkey بخش استاندارد است).
  • Value (مقدار) یا (Content): تمام محتوای داخل پرانتز () را کپی کرده و در این فیلد قرار دهید. علامت‌های نقل قول " و فاصله‌ها را حذف کنید تا یک رشته واحد و طولانی ایجاد شود.
  • مقدار نهایی شما باید شبیه به این باشد:
v=DKIM1;h=sha256;k=rsa;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...AQAB

مثال در یک پنل DNS:
TypeNameValue (Content)
TXTmail._domainkeyv=DKIM1;h=sha256;k=rsa;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQ...

تبریک! شما با موفقیت DKIM را پیاده‌سازی کردید. پس از انتشار رکورد DNS، سرور شما ایمیل‌های خروجی را به صورت دیجیتالی امضا خواهد کرد. در فصل بعدی، یاد می‌گیریم که چگونه با استفاده از ابزارهای خط فرمان، از صحت عملکرد این تنظیمات پیچیده اطمینان حاصل کنیم.