عنوان:

‫نصب و پیکربندی Postfix برای ارسال ایمیل - قسمت ۸ - بررسی لاگ‌ها و عیب‌یابی پیشرفته


نویسنده: وحید نصیری
تاریخ: ۱۴۰۴/۰۴/۲۲ ۰۸:۱۰
آدرس: www.dntips.ir
یک سرور ایمیل سالم، سروری است که مدیر آن بتواند مشکلاتش را به سرعت تشخیص داده و حل کند. تا اینجای کار، ما سرور را راه‌اندازی و امن کرده‌ایم. در این فصل، شما مهارت‌های کلیدی یک مدیر سیستم را یاد می‌گیرید: چگونه لاگ‌ها را بخوانید، مشکلات را ریشه‌یابی کنید و صف ایمیل‌ها را مدیریت نمایید. این مهارت‌ها در زمان بروز مشکل، ارزشمندترین دارایی شما خواهند بود.

بخش ۸.۱: بررسی و تحلیل لاگ Postfix

همانطور که در فصل ۳ دیدیم، فایل /var/log/mail.log قلب تپنده سیستم ایمیل ماست. تمام اتفاقات در این فایل ثبت می‌شود. بیایید یاد بگیریم چگونه اطلاعات مفید را از آن استخراج کنیم.

۱. ردیابی یک ایمیل خاص با شناسه صف (Queue ID)
هر ایمیلی که وارد Postfix می‌شود، یک شناسه منحصر به فرد می‌گیرد. با استفاده از این شناسه و دستور grep، می‌توانید تمام مراحل پردازش آن ایمیل را دنبال کنید.
# فرض کنید شناسه ایمیل مورد نظر A1B2C3D4E5 است
sudo grep 'A1B2C3D4E5' /var/log/mail.log
این دستور تمام خطوط مربوط به آن ایمیل خاص، از لحظه دریافت تا تحویل نهایی یا بروز خطا را نمایش می‌دهد.

۲. درک وضعیت‌های مختلف ایمیل
  • status=sent: موفقیت! ایمیل با موفقیت به سرور مقصد تحویل داده شده است.
  • status=deferred: تعویق افتاده. این یک خطای موقتی است. Postfix نتوانسته در تلاش اول ایمیل را تحویل دهد، اما در آینده دوباره تلاش خواهد کرد. دلایل رایج عبارتند از:
  • سرور مقصد به طور موقت در دسترس نیست.
  • سرویس Greylisting در سرور مقصد فعال است.
  • مشکلات موقتی شبکه.
  • مثال لاگ: status=deferred (host gmail-smtp-in.l.google.com[...]: Connection timed out)
  • status=bounced: برگشت خورده. این یک خطای دائمی است. Postfix ارسال ایمیل را متوقف کرده و آن را برگشت خورده تلقی می‌کند. دلایل رایج:
  • آدرس ایمیل گیرنده وجود ندارد (User unknown).
  • دامنه گیرنده وجود ندارد (Host or domain name not found).
  • ایمیل توسط سرور مقصد به دلیل نقض یک خط مشی (مثلاً نبود PTR یا SPF) رد شده است.
  • مثال لاگ: status=bounced (host example.com[...]: 550 5.1.1
پیام داخل پرانتز که از طرف سرور مقصد ارسال می‌شود، بهترین راهنما برای فهمیدن دلیل اصلی مشکل است.

بخش ۸.۲: بررسی لاگ‌های OpenDKIM

برخلاف Postfix، سرویس OpenDKIM لاگ‌های خود را مستقیماً در یک فایل متنی ذخیره نمی‌کند، بلکه از طریق journald (سیستم مدیریت لاگ systemd) آن‌ها را ثبت می‌کند. برای مشاهده این لاگ‌ها از دستور journalctl استفاده می‌کنیم.
برای مشاهده زنده لاگ‌های OpenDKIM، دستور زیر را اجرا کنید:
sudo journalctl -u opendkim -f
  • -u opendkim: مشخص می‌کند که فقط لاگ‌های مربوط به سرویس opendkim را می‌خواهیم.
  • -f: لاگ‌ها را به صورت زنده دنبال می‌کند (مشابه tail -f).

چه چیزهایی را در لاگ OpenDKIM جستجو کنیم؟
  • امضای موفق: یک خط لاگ که نشان می‌دهد یک ایمیل با موفقیت امضا شده است.
  • خطاها: پیام‌های خطا بسیار واضح هستند. مثلاً:
  • key not found in table: سرویس نتوانسته کلید مناسب را برای امضای ایمیل پیدا کند (مشکل در فایل SigningTable یا KeyTable).
  • can't load key from /etc/postfix/dkim/mail.private: سرویس به دلیل مشکل در مجوزها یا مسیر فایل، نتوانسته کلید خصوصی را بارگذاری کند.

بخش ۸.۳: دستورات کاربردی برای مدیریت و عیب‌یابی

گاهی ایمیل‌ها ارسال نمی‌شوند و در صف (Queue) منتظر می‌مانند. مدیریت این صف یک مهارت کلیدی است.

۱. مشاهده صف ایمیل‌ها (mailq)
این دستور لیستی از تمام ایمیل‌هایی که در حال حاضر در صف قرار دارند را نمایش می‌دهد. این دستور معادل postqueue -p است.
mailq
خروجی چیزی شبیه به این خواهد بود:
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
A1B2C3D4E5    350   Tue Jul  1 10:20:15  sender@yourdomain.com
(host mx.example.org[...]: Connection refused)
                                         recipient@example.org
این خروجی به ما می‌گوید که ایمیلی با شناسه A1B2C3D4E5 به دلیل رد شدن اتصال، در صف گیر کرده است.

۲. مشاهده محتوای یک ایمیل در صف (postcat)
اگر می‌خواهید ببینید محتوای یک ایمیل خاص در صف چیست (برای بررسی هدرها یا متن)، از دستور postcat به همراه شناسه صف استفاده کنید.
sudo postcat -q A1B2C3D4E5
این دستور کل محتوای ایمیل، از جمله تمام هدرها را نمایش می‌دهد که برای عیب‌یابی بسیار مفید است.

۳. تلاش مجدد برای ارسال ایمیل‌های صف (postfix flush)
فرض کنید مشکلی (مثلاً قطعی شبکه) را برطرف کرده‌اید و می‌خواهید به Postfix بگویید فوراً برای ارسال مجدد تمام ایمیل‌های موجود در صف تلاش کند.
sudo postfix flush
این دستور معادل postqueue -f است.

۴. حذف یک ایمیل از صف (postsuper)
گاهی نیاز دارید یک ایمیل خاص (مثلاً یک ایمیل تستی که گیر کرده) را از صف حذف کنید.
# حذف یک ایمیل خاص
sudo postsuper -d A1B2C3D4E5

# حذف تمام ایمیل‌های در حالت تعویق (deferred)
# !!! با احتیاط فراوان استفاده شود !!!
sudo postsuper -d ALL deferred

با تسلط بر این دستورات و توانایی تحلیل لاگ‌ها، شما ابزارهای لازم برای مدیریت پایدار و موثر سرور ایمیل خود را در اختیار دارید.