ACCESS(5) File Formats Manual ACCESS(5)

access - جدول کنترل دسترسی کارساز SMTP در Postfix

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


این سند کنترل دسترسی بر روی اطلاعات کلاینت راه دور SMTP را شرح می‌دهد: نام‌های میزبان، آدرس‌های شبکه، و آدرس‌های فرستنده یا گیرنده در پاکت نامه (envelope)؛ این قابلیت توسط کارساز SMTP نرم‌افزار Postfix پیاده‌سازی شده است. برای کنترل دسترسی بر روی محتوای پیام‌های ایمیل، به header_checks(5) یا body_checks(5) مراجعه کنید.

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

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

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

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

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

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

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

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

در جستجوها از فایل‌های ایندکس‌شده مانند DB یا DBM، یا از جدول‌های شبکه‌ای مانند NIS، LDAP یا SQL، الگوها به ترتیبی که در زیر فهرست شده‌اند بررسی می‌شوند:

با آدرس ایمیل مشخص‌شده تطابق می‌یابد.
با domain.tld به عنوان بخش دامنه یک آدرس ایمیل تطابق می‌یابد.

الگوی domain.tld همچنین با زیردامنه‌ها تطابق می‌یابد، اما فقط زمانی که رشته smtpd_access_maps در تنظیمات پیکربندی parent_domain_matches_subdomains در Postfix فهرست شده باشد.

.domain.tld
با زیردامنه‌های domain.tld تطابق می‌یابد، اما فقط زمانی که رشته smtpd_access_maps در تنظیمات پیکربندی parent_domain_matches_subdomains در Postfix فهرست نشده باشد.
با تمام آدرس‌های ایمیل با بخش کاربری مشخص‌شده تطابق می‌یابد.

نکته: جستجوی آدرس فرستنده تهی (null sender) در برخی انواع جدول‌های جستجو امکان‌پذیر نیست. به طور پیش‌فرض، Postfix از <> به عنوان کلید جستجو برای چنین آدرس‌هایی استفاده می‌کند. این مقدار با پارامتر smtpd_null_access_lookup_key در فایل main.cf پُست‌فیکس تعیین می‌شود.

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

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

با domain.tld تطابق می‌یابد.

الگوی domain.tld همچنین با زیردامنه‌ها تطابق می‌یابد، اما فقط زمانی که رشته smtpd_access_maps در تنظیمات پیکربندی parent_domain_matches_subdomains در Postfix فهرست شده باشد.

.domain.tld
با زیردامنه‌های domain.tld تطابق می‌یابد، اما فقط زمانی که رشته smtpd_access_maps در تنظیمات پیکربندی parent_domain_matches_subdomains در Postfix فهرست نشده باشد.
با یک آدرس میزبان یا محدوده آدرس شبکه IPv4 راه دور تطابق می‌یابد. یک تا چهار هشت‌بیت (octet) دهدهی را که با «.» جدا شده‌اند مشخص کنید. از «[]»، «/»، صفرهای ابتدایی یا قالب‌های هگزادسیمال استفاده نکنید.

محدوده‌های شبکه با کوتاه کردن مکرر آخرین «.octet» از رشته آدرس میزبان IPv4 راه دور بررسی می‌شوند، تا زمانی که تطابقی در جدول دسترسی یافت شود، یا تا زمانی که کوتاه کردن بیشتر ممکن نباشد.

نکته: از نوع جدول جستجوی cidr برای تعیین الگوهای network/netmask استفاده کنید. برای جزئیات به cidr_table(5) مراجعه نمایید.

با یک آدرس میزبان یا محدوده آدرس شبکه IPv6 راه دور تطابق می‌یابد. سه تا هشت جفت هشت‌بیت هگزادسیمال جدا شده با «:» را با استفاده از شکل فشرده «::» برای دنباله‌ای از جفت‌های هشت‌بیت صفر مشخص کنید. از «[]»، «/»، صفرهای ابتدایی یا فرم‌های فشرده‌نشده استفاده نکنید.

یک محدوده شبکه با کوتاه کردن مکرر آخرین «:octetpair» از رشته آدرس میزبان IPv6 فشرده‌شده راه دور بررسی می‌شود، تا زمانی که تطابقی در جدول دسترسی یافت شود یا کوتاه کردن بیشتر امکان‌پذیر نباشد.

نکته: از نوع جدول جستجوی cidr برای تعیین الگوهای network/netmask استفاده کنید. برای جزئیات به cidr_table(5) مراجعه کنید.

پشتیبانی از IPv6 در Postfix نسخه 2.2 و بالاتر در دسترس است.

آدرس و غیره که با الگو مطابقت دارد را می‌پذیرد.
یک نتیجه کاملاً عددی به عنوان OK در نظر گرفته می‌شود. این قالب توسط طرح‌های مجوز رله مبتنی بر آدرس مانند pop-before-smtp تولید می‌شود.

برای سایر کنش‌های پذیرش، به بخش «کنش‌های دیگر» در ادامه مراجعه کنید.

نسخه 2.3 و بالاتر Postfix از کدهای وضعیت پیشرفته تعریف‌شده در RFC 3463 پشتیبانی می‌کنند. هنگامی که هیچ کدی در ابتدای text زیر مشخص نشده باشد، Postfix یک کد وضعیت پیشرفته پیش‌فرض «5.7.1» را در مورد کنش‌های رد کردن، و «4.7.1» را در مورد کنش‌های تعویق (defer) درج می‌کند. بخش «کدهای وضعیت پیشرفته» در ادامه را ببینید.

4NN text
5NN text
آدرس و غیره که با الگو مطابقت دارد را رد می‌کند و با کد سه رقمی عددی و متن پاسخ می‌دهد. 4NN به معنای «بعداً دوباره امتحان کنید» است، در حالی که 5NN به معنای «دوباره امتحان نکنید» می‌باشد.

پاسخ‌های زیر برای کارساز SMTP پُست‌فیکس معنای خاصی دارند:

421 text (Postfix 2.3 و بالاتر)
521 text (Postfix 2.6 و بالاتر)
پس از پاسخ با کد عددی سه رقمی و متن، فوراً اتصال با کلاینت SMTP را قطع می‌کند. این کار منابع کارساز SMTP را آزاد می‌کند تا بتوانند در دسترس کلاینت SMTP دیگری قرار گیرند.
نکته: پاسخ «521» باید فقط برای بات‌نت‌ها و سایر بدافزارها که سازگاری در آن‌ها اهمیتی ندارد استفاده شود. رفتار «ارسال 521 و قطع اتصال» در استاندارد SMTP تعریف نشده است.
آدرس و غیره که با الگو مطابقت دارد را رد می‌کند. در صورت مشخص شدن متن اختیاری، با «$access_map_reject_code optional text...» پاسخ می‌دهد، در غیر این صورت با یک پیام خطای عمومی پاسخ می‌دهد.
آدرس و غیره که با الگو مطابقت دارد را رد (به تعویق) می‌اندازد. در صورت مشخص شدن متن اختیاری، با «$access_map_defer_code optional text...» پاسخ می‌دهد، در غیر این صورت با یک پیام خطای عمومی پاسخ می‌دهد.

این ویژگی در Postfix نسخه 2.6 و بالاتر در دسترس است.

در صورتی که محدودیت‌های بعدی منجر به کنش REJECT شوند، درخواست را به تعویق می‌اندازد. در صورت مشخص شدن متن اختیاری با «$access_map_defer_code 4.7.1 optional text...» پاسخ می‌دهد، در غیر این صورت با یک پیام پاسخ خطای عمومی پاسخ می‌دهد.

قبل از Postfix نسخه 2.6، کد پاسخ SMTP برابر 450 است.

این ویژگی در Postfix نسخه 2.1 و بالاتر در دسترس است.

در صورتی که محدودیت‌های بعدی منجر به کنش صریح یا ضمنی PERMIT شوند، درخواست را به تعویق می‌اندازد. در صورت مشخص شدن متن اختیاری با «$access_map_defer_code 4.7.1 optional text...» پاسخ می‌دهد، در غیر این صورت با یک پیام خطای عمومی پاسخ می‌دهد.

قبل از Postfix نسخه 2.6، کد پاسخ SMTP برابر 450 است.

این ویژگی در Postfix نسخه 2.1 و بالاتر در دسترس است.

برای سایر کنش‌های رد، به بخش «کنش‌های دیگر» در زیر مراجعه کنید.

محدودیت(های) نام‌برده UCE را اعمال می‌کند (permit، reject، reject_unauth_destination و غیره).
یک رونوشت از پیام را به گیرنده مشخص‌شده ارسال می‌کند.

اگر چندین کنش BCC در یک تراکنش SMTP MAIL مشخص شده باشد، در Postfix نسخه 3.0 فقط آخرین کنش استفاده خواهد شد.

این ویژگی در Postfix نسخه 3.0 و بالاتر در دسترس است.

ادعای تحویل موفقیت‌آمیز کرده و پیام را بی سر و صدا دور می‌اندازد. در صورت مشخص شدن متن اختیاری، آن را ثبت می‌کند (log)، در غیر این صورت یک پیام عمومی را ثبت می‌کند.

نکته: این کنش در حال حاضر بر تمام گیرندگان پیام تأثیر می‌گذارد. برای دور انداختن فقط یک گیرنده بدون دور انداختن کل پیام، از جدول transport(5) برای هدایت ایمیل به سرویس discard(8) استفاده کنید.

این ویژگی در Postfix نسخه 2.0 و بالاتر در دسترس است.

وانمود می‌کند که کلید جستجو پیدا نشده است. این کار از تلاش Postfix برای بررسی زیررشته‌های کلید جستجو (مانند نام زیردامنه یا زیرشبکه آدرس شبکه) جلوگیری می‌کند.

این ویژگی در Postfix نسخه 2.0 و بالاتر در دسترس است.

پس از قرار گرفتن پیام در صف، کل پیام را از طریق پالایه (فیلتر) محتوای خارجی مشخص‌شده ارسال می‌کند. نام transport فیلد اول تعریف یک عامل تحویل ایمیل (mail delivery agent) در master.cf را مشخص می‌کند؛ نحو destination گام بعدی (next-hop) در صفحه راهنمای عامل تحویل مربوطه شرح داده شده است. اطلاعات بیشتر درباره فیلترهای محتوای خارجی در فایل FILTER_README پُست‌فیکس موجود است.

یادداشت ۱: از جایگزینی‌های عبارات باقاعده $number برای transport یا destination استفاده نکنید مگر اینکه بدانید اطلاعات منشأ قابل اعتمادی دارند.

یادداشت ۲: این کنش تنظیم content_filter در main.cf را لغو می‌کند و بر تمام گیرندگان پیام تأثیر می‌گذارد. در صورتی که چندین کنش FILTER فعال شوند، فقط آخرین مورد اجرا می‌شود.

یادداشت ۳: هدف دستور FILTER بازنویسی و لغو مسیریابی پیام است. برای لغو transport گیرنده اما نه destination گام بعدی، یک destination فیلتر خالی را مشخص کنید (Postfix 2.7 و بالاتر)، یا یک transport:destination را مشخص کنید که از طریق یک نمونه متفاوت Postfix تحویل داده شود (Postfix 2.6 و قدیمی‌تر). گزینه‌های دیگر استفاده از ویژگی‌های وابسته به گیرنده transport_maps یا وابسته به فرستنده sender_dependent_default_transport_maps است.

این ویژگی در Postfix نسخه 2.0 و بالاتر در دسترس است.

پیام را در صف hold قرار می‌دهد، جایی که در آنجا می‌ماند تا زمانی که شخصی آن را حذف کند یا برای تحویل آزاد نماید. در صورت مشخص شدن متن اختیاری، آن را ثبت می‌کند، در غیر این صورت یک پیام عمومی را ثبت می‌کند.

ایمیلی که در حالت تعلیق (hold) قرار دارد را می‌توان با دستور postcat(1) بررسی کرد و با دستور postsuper(1) نابود یا آزاد کرد.

نکته: از «postsuper -r» برای آزادسازی ایمیلی که برای بخش قابل توجهی از $maximal_queue_lifetime یا $bounce_queue_lifetime یا طولانی‌تر در حالت تعلیق مانده است استفاده کنید. از «postsuper -H» فقط برای ایمیل‌هایی استفاده کنید که ظرف چند بار تلاش برای تحویل منقضی نمی‌شوند.

نکته: این کنش در حال حاضر بر تمام گیرندگان پیام تأثیر می‌گذارد.

این ویژگی در Postfix نسخه 2.0 و بالاتر در دسترس است.

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

نکته: این کنش باید قبل از دریافت محتوای پیام اجرا شود؛ این کنش نمی‌تواند در زمینه smtpd_end_of_data_restrictions اجرا شود.

این ویژگی در Postfix نسخه 2.1 و بالاتر در دسترس است.

پس از صف‌بندی پیام، پیام را به جای گیرنده(های) مورد نظر به آدرس مشخص‌شده ارسال می‌کند. هنگامی که چندین کنش REDIRECT فعال شوند، فقط آخرین مورد اعمال می‌شود.

یادداشت ۱: این کنش بر کنش FILTER اولویت دارد و در حال حاضر تمام گیرندگان پیام را بازنویسی می‌کند.

یادداشت ۲: یک آدرس REDIRECT مشمول قاعده‌مندسازی (افزودن دامنه مفقود) است اما مشمول نگاشت‌های نام مستعار canonical، masquerade، bcc یا virtual نمی‌شود.

این ویژگی در Postfix نسخه 2.1 و بالاتر در دسترس است.

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

این ویژگی در Postfix نسخه 3.0 و بالاتر در دسترس است.

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

این ویژگی در Postfix نسخه 2.1 و بالاتر در دسترس است.

نسخه 2.3 و بالاتر Postfix از کدهای وضعیت پیشرفته تعریف شده در RFC 3463 پشتیبانی می‌کنند. هنگامی که یک کد وضعیت پیشرفته در یک جدول دسترسی مشخص می‌شود، مشمول تغییر است. تبدیلات زیر هنگامی که از همان جدول دسترسی برای محدودیت‌های دسترسی client، helo، sender یا recipient استفاده می‌شود، ضروری هستند؛ آن‌ها بدون توجه به اینکه Postfix به یک دستور MAIL FROM، RCPT TO یا دستور دیگر SMTP پاسخ می‌دهد، اتفاق می‌افتند.

  • هنگامی که یک آدرس فرستنده با یک کنش REJECT مطابقت دارد، کارساز SMTP پُست‌فیکس وضعیت DSN گیرنده (مانند 4.1.1-4.1.6) را به وضعیت DSN متناظر فرستنده تبدیل می‌کند و بالعکس.
  • هنگامی که اطلاعات غیرآدرسی با یک کنش REJECT مطابقت دارد (مانند آرگومان دستور HELO یا نام میزبان/آدرس کلاینت)، کارساز SMTP پُست‌فیکس وضعیت DSN فرستنده یا گیرنده را به یک وضعیت DSN عمومی غیرآدرسی (مانند 4.0.0) تبدیل می‌کند.

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

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

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

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

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

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

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

مثال زیر از یک فایل ایندکس‌شده استفاده می‌کند، به طوری که ترتیب ورودی‌های جدول اهمیتی ندارد. این مثال دسترسی کلاینت در آدرس 1.2.3.4 را مجاز می‌داند اما تمام کلاینت‌های دیگر در 1.2.3.0/24 را رد می‌کند. به جای جدول‌های جستجوی hash، برخی سیستم‌ها از dbm استفاده می‌کنند. از دستور «postconf -m» برای یافتن جدول‌های جستجویی که Postfix در سیستم شما پشتیبانی می‌کند استفاده کنید.

/etc/postfix/main.cf:
    smtpd_client_restrictions =
        check_client_access hash:/etc/postfix/access
/etc/postfix/access:
    1.2.3   REJECT
    1.2.3.4 OK

دستور «postmap /etc/postfix/access» را پس از ویرایش فایل اجرا کنید.


قالب جدول قراردادهای نقل‌قول (quoting conventions) را درک نمی‌کند.

postmap(1)، مدیر جدول جستجوی Postfix
smtpd(8)، کارساز SMTP
postconf(5)، پارامترهای پیکربندی
transport(5)، نحو transport:nexthop

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

SMTPD_ACCESS_README، کنترل دسترسی کارساز داخلی SMTP
DATABASE_README، نمای کلی جدول جستجوی Postfix

مجوز نرم‌افزار امنیتی 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