VIRTUAL(8) System Manager's Manual VIRTUAL(8)

virtual - عامل تحویل ایمیل دامنه مجازی Postfix

virtual [گزینه‌های عمومی دیمن Postfix]


عامل تحویل virtual(8) برای سرویس‌های میزبانی ایمیل مجازی طراحی شده است. این عامل که در ابتدا بر پایه عامل تحویل local(8) پست‌فیکس (Postfix) توسعه یافته بود، گیرندگان را با استفاده از جستجوی نگاشت برای نشانی کامل گیرنده پیدا می‌کند؛ به جای آنکه مانند گذشته از جستجوی هاردکدشده در فایل رمز عبور یونیکس تنها برای بخش محلی نشانی استفاده کند.

این عامل تحویل فقط ایمیل را تحویل می‌دهد. سایر قابلیت‌ها مانند فوروارد ایمیل، اعلان‌های خارج از دسترس بودن (out-of-office) و غیره باید از طریق نگاشت‌های virtual_alias یا سازوکارهای مشابه جستجو پیکربندی شوند.

مکان صندوق پستی توسط پارامترهای پیکربندی virtual_mailbox_base و virtual_mailbox_maps کنترل می‌شود (به بخش زیر مراجعه کنید). جدول virtual_mailbox_maps بر اساس نشانی گیرنده به ترتیبی که در بخش «ترتیب جستجوی جدول (TABLE SEARCH ORDER)» در ادامه آمده است نمایه می‌شود.

مسیر صندوق پستی به صورت زیر ساخته می‌شود:

$virtual_mailbox_base/$virtual_mailbox_maps(recipient)

که در آن recipient نشانی کامل گیرنده است.

هنگامی که مکان صندوق پستی به / ختم نشود، پیام در قالب صندوق پستی یونیکس (UNIX mailbox) تحویل داده می‌شود. این قالب چندین پیام را در یک فایل متنی ذخیره می‌کند.

عامل تحویل virtual(8) یک هدر پاکت‌نامه «From sender time_stamp» را به ابتدای هر پیام اضافه می‌کند، یک هدر پیام Delivered-To: حاوی نشانی گیرنده پاکت‌نامه را درج می‌نماید، یک هدر X-Original-To: حاوی نشانی گیرنده به همان صورتی که به Postfix داده شده بود اضافه می‌کند، یک هدر پیام Return-Path: با نشانی فرستنده پاکت‌نامه درج می‌کند، نویسه > را به ابتدای خطوطی که با «From » آغاز می‌شوند می‌افزاید، و یک خط خالی به انتهای آن اضافه می‌کند.

صندوق پستی در حین انجام تحویل، برای دسترسی انحصاری قفل می‌شود. در صورت بروز مشکل، تلاش می‌شود تا صندوق پستی به اندازه اولیه خود کوتاه (truncate) شود.

هنگامی که مکان صندوق پستی به / ختم شود، پیام در قالب maildir کیومیل (qmail) تحویل داده می‌شود. این قالب هر پیام را در یک فایل جداگانه ذخیره می‌کند.

عامل تحویل virtual(8) یک هدر پیام Delivered-To: حاوی نشانی نهایی گیرنده پاکت‌نامه، یک هدر X-Original-To: حاوی نشانی گیرنده به همان صورتی که به Postfix داده شده بود، و یک هدر پیام Return-Path: با نشانی فرستنده پاکت‌نامه به ابتدای پیام اضافه می‌کند.

طبق تعریف، قالب maildir در طول تحویل یا بازیابی ایمیل نیازی به قفل‌گذاری فایل در سطح برنامه ندارد.

مالکیت صندوق پستی توسط جدول‌های جستجوی virtual_uid_maps و virtual_gid_maps کنترل می‌شود که با نشانی کامل گیرنده نمایه می‌شوند. هر جدول به ترتیب رشته‌ای حاوی شناسه عددی کاربر (UID) و گروه (GID) را ارائه می‌دهد.

پارامتر virtual_minimum_uid یک حد پایین برای مقادیر عددی شناسه کاربر (UID) که ممکن است در هر یک از virtual_uid_maps مشخص شوند اعمال می‌کند.

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

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

ترتیب جستجو به شرح زیر است. جستجو با اولین انطباق موفقیت‌آمیز متوقف می‌شود:

  • هنگامی که گیرنده دارای پسوند اختیاری نشانی باشد، ابتدا نشانی user+extension@domain.tld جستجو می‌شود.

    در نسخه‌های Postfix قبل از ۲.۱، پسوند اختیاری نشانی همیشه نادیده گرفته می‌شود.

  • سپس نشانی user@domain.tld (بدون پسوند نشانی) جستجو می‌شود.
  • در نهایت، نشانی @domain گیرنده جستجو می‌شود.

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

علاوه بر این، یک جدول می‌تواند به عنوان یک نگاشت عبارات باقاعده (regular expression) ارائه شود که در آن الگوها به صورت عبارات باقاعده مشخص می‌شوند. در این حالت، فقط نشانی کامل گیرنده به نگاشت عبارات باقاعده داده می‌شود.

عامل تحویل virtual(8) از نظر امنیتی حساس تلقی نمی‌شود، مشروط بر اینکه جدول‌های جستجوی حاوی اطلاعات شناسه کاربر/گروه گیرنده به اندازه کافی محافظت شده باشند. این برنامه برای اجرا در محیط chroot طراحی نشده است.

عامل تحویل virtual(8) جایگزینی متغیرهای عبارات باقاعده مانند $1 و غیره را در جدول‌های جستجوی عبارات باقاعده مجاز نمی‌داند، زیرا این کار یک رخنه امنیتی ایجاد می‌کند.

عامل تحویل virtual(8) درخواست‌های استفاده از کارگزار proxymap(8) را بدون هیچ پیامی نادیده می‌گیرد و در عوض جدول را مستقیماً باز می‌کند. پیش از نسخه ۲.۲ Postfix، عامل تحویل مجازی با یک خطای مهلک (fatal error) متوقف می‌شد.

RFC 822 (ARPA Internet Text Messages)


هنگامی که گیرنده صندوق پستی نداشته باشد یا سهمیه دیسک (disk quota) گیرنده پر شده باشد، ایمیل برگشت می‌خورد (bounce می‌شود). در تمامی موارد دیگر بروز مشکل، ایمیل گیرنده موجود به تعویق می‌افتد (deferred می‌شود) و یک هشدار در لاگ ثبت می‌گردد.

مشکلات و تراکنش‌ها در syslogd(8) یا postlogd(8) ثبت می‌شوند. فایل‌های پیام آسیب‌دیده علامت‌گذاری می‌شوند تا مدیر صف (queue manager) بتواند بعداً آن‌ها را به صف corrupt منتقل کند.

بسته به مقدار تنظیم‌شده برای پارامتر notify_classes، مدیر پست (postmaster) از برگشت‌ها و سایر مشکلات مطلع می‌شود.


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

پست‌فیکس باید دارای جدول‌های جستجویی باشد که بتوانند چندین ویژگی نتیجه را برگردانند. برای جلوگیری از زحمت نگهداری سه جدول، از یک پایگاه‌داده LDAP یا MYSQL استفاده کنید.

تغییرات ایجادشده در main.cf به طور خودکار اعمال می‌شوند، زیرا فرایندهای virtual(8) تنها برای مدت محدودی اجرا می‌شوند. برای اعمال سریع‌تر تغییرات از دستور «postfix reload» استفاده کنید.

متن زیر تنها خلاصه‌ای از پارامترها را ارائه می‌دهد. برای جزئیات بیشتر به همراه مثال‌ها به postconf(5) مراجعه کنید.

پیشوندی که عامل تحویل virtual(8) به ابتدای تمام نتایج مسیر حاصل از جستجوهای جدول $virtual_mailbox_maps اضافه می‌کند.
جدول‌های جستجوی اختیاری شامل تمام نشانی‌های معتبر در دامنه‌هایی که با $virtual_mailbox_domains مطابقت دارند.
حداقل مقدار شناسه کاربر (UID) که عامل تحویل virtual(8) به عنوان نتیجه حاصل از جستجوی جدول $virtual_uid_maps می‌پذیرد.
جدول‌های جستجو حاوی شناسه کاربر (UID) به ازای هر گیرنده که عامل تحویل virtual(8) هنگام نوشتن در صندوق پستی گیرنده از آن استفاده می‌کند.
جدول‌های جستجو حاوی شناسه گروه (GID) به ازای هر گیرنده برای تحویل صندوق پستی virtual(8).

موجود در Postfix نسخه ۲.۰ و بالاتر:

پست‌فیکس مقصد نهایی برای فهرست مشخص‌شده دامنه‌ها است؛ ایمیل از طریق سیستم انتقال تحویل ایمیل $virtual_transport تحویل داده می‌شود.
سیستم انتقال پیش‌فرض تحویل ایمیل و مقصد گام بعدی (next-hop) برای تحویل نهایی به دامنه‌های فهرست‌شده در $virtual_mailbox_domains.

موجود در Postfix نسخه ۲.۵.۳ و بالاتر:

به تعویق انداختن تحویل ایمیل هنگامی که مالک فایل صندوق پستی، گیرنده آن نباشد.

نحوه قفل‌گذاری یک صندوق پستی سبک یونیکس virtual(8) پیش از تلاش برای تحویل.
حداکثر تعداد دفعات تلاش برای دریافت قفل انحصاری روی یک فایل صندوق پستی یا فایل لاگ bounce(8).
مدت زمان بین تلاش‌ها برای دریافت قفل انحصاری روی یک فایل صندوق پستی یا فایل لاگ bounce(8).
مدت زمانی که پس از آن، فایل قفل انحصاری کهنه (stale) صندوق پستی حذف می‌شود.

حداکثر اندازه بر حسب بایت برای یک صندوق پستی مجزای virtual(8) یا فایل maildir، یا صفر (بدون محدودیت).

پیاده‌سازی‌شده در دیمن qmgr(8):

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

مکان پیش‌فرض فایل‌های پیکربندی main.cf و master.cf پست‌فیکس.
حداکثر زمانی که یک فرایند دیمن Postfix مجاز است برای رسیدگی به یک درخواست صرف کند، پیش از آنکه توسط تایمر دیده‌بان (watchdog) داخلی متوقف شود.
حداکثر تعداد ارقام بعد از ممیز اعشار هنگام ثبت مقادیر تأخیر در لاگ.
محدودیت زمانی برای ارسال یا دریافت اطلاعات از طریق یک کانال ارتباطی داخلی.
حداکثر مدت زمانی که یک فرایند بیکار دیمن Postfix پیش از پایان داوطلبانه کار، در انتظار یک اتصال ورودی می‌ماند.
حداکثر تعداد اتصالات ورودی که یک فرایند دیمن Postfix پیش از پایان داوطلبانه کار سرویس‌دهی می‌کند.
شناسه فرایند (PID) یک دستور یا فرایند دیمن Postfix.
نام فرایند یک دستور یا فرایند دیمن Postfix.
مکان دایرکتوری سطح بالای صف Postfix.
امکانات ثبت وقایع سیستم (syslog facility) برای لاگ‌گیری Postfix.
پیشوندی که به ابتدای نام فرایند در رکوردهای syslog اضافه می‌شود، به عنوان مثال "smtpd" به صورت "prefix/smtpd" ثبت می‌شود.

موجود در Postfix نسخه ۳.۰ و بالاتر:

فیلتر اختیاری برای عامل تحویل virtual(8) جهت تغییر کد وضعیت تحویل یا متن توضیحی تحویل‌های موفق یا ناموفق.

موجود در Postfix نسخه ۳.۳ و بالاتر:

فعال‌سازی پشتیبانی از نشانی اصلی گیرنده پس از بازنویسی نشانی به یک نشانی دیگر (به عنوان مثال با نام مستعار یا نگاشت متعارف/canonical).
نام سرویس یک فرایند دیمن Postfix در master.cf.

موجود در Postfix نسخه ۳.۵ و بالاتر:

قالب نشانی ایمیل که در ثبت وقایع غیردیباگ (اطلاعات، هشدار و غیره) استفاده خواهد شد.

qmgr(8), مدیر صف
bounce(8), گزارش‌های وضعیت تحویل
postconf(5), پارامترهای پیکربندی
postlogd(8), ثبت وقایع Postfix
syslogd(8), ثبت وقایع سیستم

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

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


این عامل تحویل در ابتدا بر پایه عامل تحویل محلی Postfix توسعه یافته بود. تغییرات عمدتاً شامل حذف کدهایی بود که یا در این زمینه کاربرد نداشتند یا ایمن نبودند: نام‌های مستعار، فایل‌های ‎~user/.forward‎، تحویل به "|command" یا به ‎/file/name‎.

هدر پیام Delivered-To: در سیستم qmail اثر Daniel Bernstein معرفی شد.

ساختار maildir در سیستم qmail اثر Daniel Bernstein معرفی شد.

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
Andrew McNamara
andrewm@connect.com.au
connect.com.au Pty. Ltd.
Level 3, 213 Miller St
North Sydney 2060, NSW, Australia