CANONICAL(5) File Formats Manual CANONICAL(5)

canonical - قالب جدول متعارف Postfix

postmap /etc/postfix/canonical
postmap -q "string" /etc/postfix/canonical
postmap -q - /etc/postfix/canonical <inputfile


جدول اختیاری canonical(5) یک نگاشت نشانی را برای نشانی‌های محلی و غیرمحلی مشخص می‌کند. این نگاشت پیش از ذخیره شدن ایمیل در صف، توسط دیمن cleanup(8) استفاده می‌شود. نگاشت نشانی به صورت بازگشتی است.

به طور معمول، جدول canonical(5) به عنوان یک فایل متنی مشخص می‌شود که به عنوان ورودی برای دستور postmap(1) عمل می‌کند تا یک فایل ایندکس‌شده برای جستجوی سریع ایجاد شود.

برای بازسازی فایل ایندکس‌شده با نوع پیش‌فرض پس از تغییر فایل متنی، دستور «postmap /etc/postfix/canonical» را اجرا کنید، یا برای مشخص کردن نوعی صریح، دستور «postmap type:/etc/postfix/canonical» را اجرا نمایید.

نوع پیش‌فرض فایل ایندکس‌شده با پارامتر default_database_type پیکربندی می‌شود. بسته به پلتفرم، این نوع ممکن است یکی از موارد lmdb:، cdb:، hash:، یا dbm: (بدون «:» پایانی) باشد.

هنگامی که جدول از طریق روش‌های دیگری مانند NIS، LDAP یا SQL ارائه می‌شود، همان جستجوهایی انجام می‌گیرد که برای فایل‌های ایندکس‌شده معمولی صورت می‌پذیرد. مدیریت چنین پایگاه‌های داده‌ای خارج از حیطه Postfix است.

به عنوان جایگزین، جدول می‌تواند به صورت یک نگاشت عبارت باقاعده ارائه شود که در آن الگوها به صورت عبارات باقاعده داده می‌شوند، یا جستجوها می‌توانند به یک کارساز مبتنی بر TCP هدایت شوند. در آن موارد، جستجوها به روشی کمی متفاوت انجام می‌شوند که در ادامه در بخش‌های «جدول‌های عبارات باقاعده» یا «جدول‌های مبتنی بر TCP» شرح داده شده است.

به طور پیش‌فرض، نگاشت canonical(5) هم بر نشانی‌های سرآیند پیام (یعنی نشانی‌هایی که درون پیام‌ها ظاهر می‌شوند) و هم بر نشانی‌های پاکت نامه پیام (برای مثال، نشانی‌هایی که در دستورات پروتکل SMTP استفاده می‌شوند) تأثیر می‌گذارد. این رفتار با پارامتر canonical_classes کنترل می‌شود.

نکته: در Postfix نسخه‌های 2.2 و بالاتر، سرآیندهای پیام دریافت شده از کلاینت‌های راه دور SMTP تنها در صورتی بازنویسی می‌شوند که کلاینت با پارامتر local_header_rewrite_clients مطابقت داشته باشد، یا پارامتر پیکربندی remote_header_rewrite_domain مقداری غیرخالی تعیین کرده باشد. برای دستیابی به رفتار قبل از Postfix 2.2، عبارت «local_header_rewrite_clients = static:all» را مشخص کنید.

به طور معمول، از جدول canonical(5) برای جایگزینی نام‌های ورود با Firstname.Lastname، یا برای پاکسازی نشانی‌های تولیدشده توسط سیستم‌های ایمیل قدیمی استفاده می‌شود.

نگاشت canonical(5) نباید با پشتیبانی از نام مستعار مجازی یا با نام‌های مستعار محلی اشتباه گرفته شود. برای تغییر مقصد بدون تغییر سرآیندها، به جای آن از نگاشت virtual(5) یا aliases(5) استفاده کنید.

رشته جستجو پیش از جستجو در پایگاه داده، به حروف کوچک تبدیل می‌شود. از Postfix 2.3 به بعد، رشته جستجو در انواع پایگاه داده مانند regexp: یا pcre: که فیلدهای جستجوی آن‌ها می‌توانند هم با حروف بزرگ و هم با حروف کوچک تطابق یابند، تبدیل به حروف کوچک نمی‌شود.

قالب ورودی برای دستور postmap(1) به شرح زیر است:

هنگامی که pattern با یک نشانی ایمیل مطابقت داشته باشد، آن را با address متناظر جایگزین می‌کند.
خطوط خالی و توضیحات
خطوط خالی و خطوطی که فقط حاوی فاصله‌اند نادیده گرفته می‌شوند، همچنین خطوطی که اولین نویسه غیرفاصله‌ای آن‌ها یک «#» باشد.
متن چندخطی
یک خط منطقی با متنی غیر از فاصله خالی آغاز می‌شود. خطی که با فاصله خالی شروع شود، ادامه خط منطقی قبلی خواهد بود.

در جستجوها از فایل‌های ایندکس‌شده مانند DB یا DBM، یا از جدول‌های تحت شبکه مانند NIS، LDAP یا SQL، هر پرس‌وجوی user@domain دنباله‌ای از الگوهای پرس‌وجو را به شرح زیر ایجاد می‌کند.

پیش از امتحان کردن الگوی پرس‌وجوی بعدی، هر الگوی پرس‌وجو به هر جدول جستجوی مشخص‌شده ارسال می‌شود تا زمانی که یک تطابق پیدا شود.

user@domain را با address جایگزین می‌کند. این فرم بالاترین اولویت را دارد.

این فرم برای پاکسازی نشانی‌های تولیدشده توسط سیستم‌های ایمیل قدیمی مفید است. همچنین می‌تواند برای ایجاد نشانی‌هایی به سبک Firstname.Lastname استفاده شود، اما برای راه‌حل ساده‌تر به بخش‌های بعدی مراجعه کنید.

هنگامی که site برابر با $myorigin باشد، یا در $mydestination فهرست شده باشد، یا در $inet_interfaces یا $proxy_interfaces فهرست شده باشد، user@site را با address جایگزین می‌کند.

این فرم برای جایگزینی نام‌های ورود با Firstname.Lastname مفید است.

@domain address
سایر نشانی‌ها در domain را با address جایگزین می‌کند. این فرم کمترین اولویت را دارد.

نکته: @domain یک نویسه عمومی (wild-card) است. هنگامی که این فرم برای نشانی‌های گیرنده اعمال می‌شود، کارساز SMTP نرم‌افزار Postfix ایمیل‌ها را برای هر گیرنده‌ای در domain، صرف‌نظر از اینکه آن گیرنده واقعاً وجود داشته باشد یا خیر، می‌پذیرد. این موضوع ممکن است سیستم ایمیل شما را به یک منبع بازپخش ناخواسته (backscatter) تبدیل کند: Postfix ابتدا ایمیل را برای گیرندگان ناموجود می‌پذیرد و سپس سعی می‌کند آن ایمیل را به عنوان «غیرقابل تحویل» به نشانی فرستنده که اغلب جعلی است بازگرداند.

برای جلوگیری از بروز پدیده backscatter با ایمیل‌های دامنه دارای نویسه عمومی، نگاشت wild-card را با نگاشت‌های صریح 1:1 جایگزین کنید، یا محدودیت reject_unverified_recipient را برای آن دامنه اضافه نمایید:

smtpd_recipient_restrictions =
    ...
    reject_unauth_destination
    check_recipient_access
        inline:{example.com=reject_unverified_recipient}
unverified_recipient_reject_code = 550

در مثال بالا، در صورتی که گیرنده به یک نشانی راه دور بازنویسی شود، ممکن است Postfix با یک کارساز راه دور تماس برقرار کند.

نتیجه جستجو مشمول بازنویسی نشانی می‌شود:

  • هنگامی که نتیجه به فرم @otherdomain باشد، نتیجه تبدیل به همان user در otherdomain می‌شود.
  • هنگامی که «append_at_myorigin=yes» باشد، مقدار «@$myorigin» به نشانی‌های بدون «@domain» پیوست می‌شود.
  • هنگامی که «append_dot_mydomain=yes» باشد، مقدار «.$mydomain» به نشانی‌های بدون «.domain» پیوست می‌شود.

هنگامی که بخش محلی (localpart) یک نشانی ایمیل شامل جداکننده اختیاری گیرنده باشد (برای مثال، user+foo@domain)، ترتیب جستجو به صورت زیر درمی‌آید: user+foo@domain، user@domain، user+foo، user، و @domain.

پارامتر propagate_unmatched_extensions کنترل می‌کند که آیا یک پسوند نشانی تطبیق‌نیافته (+foo) به نتیجه جستجوی جدول منتقل شود یا خیر.

این بخش نحوه تغییر جستجوهای جدول را هنگامی که جدول در قالب عبارات باقاعده ارائه شده باشد شرح می‌دهد. برای مشاهده شرح نحو جدول جستجوی عبارت باقاعده، به regexp_table(5) یا pcre_table(5) مراجعه کنید.

هر الگو یک عبارت باقاعده است که بر روی کل نشانیِ مورد جستجو اعمال می‌شود. بنابراین، نشانی‌های ایمیل user@domain به بخش‌های تشکیل‌دهنده user و @domain تفکیک نمی‌شوند، و همچنین user+foo به user و foo شکسته نمی‌شود.

الگوها به ترتیبی که در جدول مشخص شده است اعمال می‌شوند، تا زمانی که الگویی مطابق با رشته جستجو پیدا شود.

نتایج مشابه جستجوها در فایل‌های ایندکس‌شده است، با این ویژگی افزوده که زیررشته‌های درون پرانتز در الگو می‌توانند به صورت $1، $2 و غیره درون‌ریزی شوند.

این بخش نحوه تغییر جستجوهای جدول را هنگامی که جستجوها به یک کارساز مبتنی بر TCP هدایت می‌شوند شرح می‌دهد. برای مشاهده شرح پروتکل جستجوی کلاینت/کارساز TCP، به tcp_table(5) مراجعه کنید. این ویژگی تا نسخه 2.4 نرم‌افزار Postfix (شامل آن نسخه نیز) در دسترس نیست.

هر عملیات جستجو کل نشانی را در یک نوبت استفاده می‌کند. بنابراین، نشانی‌های ایمیل user@domain به بخش‌های تشکیل‌دهنده user و @domain تفکیک نمی‌شوند، و همچنین user+foo به user و foo شکسته نمی‌شود.

نتایج مشابه جستجوها در فایل‌های ایندکس‌شده است.


قالب این جدول، قواعد نقل‌قول (quoting conventions) را پشتیبانی نمی‌کند.

پارامترهای زیر در main.cf به‌ویژه مرتبط هستند. متن زیر تنها خلاصه‌ای از پارامترها را ارائه می‌دهد. برای جزئیات بیشتر شامل مثال‌ها، به postconf(5) مراجعه کنید.

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

سایر پارامترهای مرتبط:

نشانی‌های رابط شبکه محلی که این سیستم ایمیل روی آن‌ها ایمیل دریافت می‌کند.
سرآیندهای پیام را در ایمیل‌های این کلاینت‌ها بازنویسی کرده یا اضافه می‌کند، نشانی‌های ناقص را با نام دامنه در $myorigin یا $mydomain به‌روزرسانی کرده، و سرآیندهای گمشده را می‌افزاید.
نشانی‌های رابط شبکه راه دور که این سیستم ایمیل از طریق یک پراکسی یا واحد ترجمه نشانی شبکه (NAT) روی آن‌ها ایمیل دریافت می‌کند.
مشخص می‌کند چه نشانی‌هایی مشمول نقاب‌گذاری نشانی (address masquerading) هستند.
فهرست اختیاری از دامنه‌هایی که ساختار زیردامنه‌ای آن‌ها در نشانی‌های ایمیل حذف خواهد شد.
فهرست اختیاری از نام‌های کاربری که حتی اگر نشانی آن‌ها با $masquerade_domains مطابقت داشته باشد، مشمول نقاب‌گذاری نشانی نمی‌شوند.
فهرست دامنه‌هایی که از طریق ترابری تحویل ایمیل $local_transport تحویل داده می‌شوند.
نام دامنه‌ای که به نظر می‌رسد ایمیل‌های ارسال‌شده به صورت محلی از آن آمده‌اند، و ایمیل‌های ارسال‌شده محلی به آن تحویل داده می‌شوند.
رفتار ویژه برای مدخل‌های owner-listname در فایل aliases(5) را فعال می‌کند، و زمانی که recipient_delimiter روی «-» تنظیم شده باشد، بخش‌های محلی نشانی‌های owner-listname و listname-request را تفکیک نمی‌کند.
اگر مقدار پارامتر remote_header_rewrite_domain غیرخالی باشد، سرآیندهای پیام را در ایمیل‌های کلاینت‌های راه دور بازنویسی کرده یا اضافه می‌کند، نشانی‌های ناقص را با دامنه مشخص‌شده در پارامتر remote_header_rewrite_domain به‌روزرسانی کرده، و سرآیندهای گمشده را می‌افزاید.

cleanup(8), استانداردسازی و قراردادن ایمیل در صف
postmap(1), مدیریت جدول‌های جستجوی Postfix
postconf(5), پارامترهای پیکربندی
virtual(5), نام‌های مستعار مجازی

از دستور «postconf readme_directory» یا «postconf html_directory» برای یافتن این اطلاعات استفاده کنید.

DATABASE_README, بررسی کلی جدول‌های جستجوی Postfix
ADDRESS_REWRITING_README, راهنمای بازنویسی نشانی

مجوز نرم‌افزار Secure Mailer باید همراه با این نرم‌افزار توزیع شود.

Wietse Venema
IBM T.J. Watson Research
P.O. Box 704
Yorktown Heights, NY 10598, USA
Wietse Venema
Google, Inc.
111 8th Avenue
New York, NY 10011, USA