CIDR_TABLE(5) File Formats Manual CIDR_TABLE(5)

cidr_table - ساختار و قالب جدول‌های CIDR در Postfix

postmap -q "string" cidr:/etc/postfix/filename
postmap -q - cidr:/etc/postfix/filename <inputfile


سیستم ایمیل Postfix از جدول‌های جستجوی اختیاری استفاده می‌کند. این جدول‌ها معمولاً در قالب‌های lmdb:، cdb:، hash: یا dbm: هستند.

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

برای آگاهی از انواع جدول‌های جستجوی پشتیبانی‌شده توسط سیستم Postfix خود، از دستور "postconf -m" استفاده کنید.

برای آزمایش جدول‌های جستجو، از دستور "postmap -q" به گونه‌ای که در بخش خلاصه دستور در بالا شرح داده شد، استفاده کنید.

شکل کلی یک جدول CIDR در Postfix عبارت است از:

هنگامی که رشته جستجو با pattern مشخص‌شده تطابق داشته باشد، مقدار result متناظر استفاده می‌شود. الگو باید در قالب network/prefix یا network_address باشد (بخش نحوه نگارش الگوی نشانی در زیر را ببینید).
!pattern result
هنگامی که رشته جستجو با pattern مشخص‌شده تطابق نداشته باشد، مقدار result تعیین‌شده استفاده می‌شود. الگو باید در قالب network/prefix یا network_address باشد (بخش نحوه نگارش الگوی نشانی در زیر را ببینید).

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

هنگامی که یک رشته جستجو با pattern مشخص‌شده تطابق داشته باشد، آن رشته را با الگوهای میان if و endif تطبیق می‌دهد. الگو باید در قالب network/prefix یا network_address باشد (بخش نحوه نگارش الگوی نشانی در زیر را ببینید). بلوک‌های if..endif می‌توانند تودرتو باشند.

نکته: به متن بین if..endif فاصله سفید اضافه نکنید.

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

هنگامی که یک رشته جستجو با pattern مشخص‌شده تطابق نداشته باشد، آن رشته را با الگوهای میان if و endif تطبیق می‌دهد. الگو باید در قالب network/prefix یا network_address باشد (بخش نحوه نگارش الگوی نشانی در زیر را ببینید). بلوک‌های if..endif می‌توانند تودرتو باشند.

نکته: به متن بین if..endif فاصله سفید اضافه نکنید.

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

خطوط خالی و کامنت‌ها
خطوط خالی و خطوطی که فقط شامل فاصله سفید هستند نادیده گرفته می‌شوند، همان‌طور که خطوطی که نخستین نویسه غیرفاصله آن‌ها '#' است نادیده گرفته می‌شوند.
متن چندخطی
یک خط منطقی با متنی بدون فاصله آغاز می‌شود. خطی که با فاصله سفید آغاز شود، ادامه خط منطقی پیشین به شمار می‌رود.

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

جدول‌های CIDR در Postfix مبتنی بر الگو هستند. یک الگو یا یک network_address است که نیازمند تطابق دقیق می‌باشد، یا یک network_address/prefix_length است که در آن بخش prefix_length طول پیشوند network_address را که باید مطابقت داده شود مشخص می‌کند (سایر بیت‌ها در بخش network_address باید صفر باشند).

یک نشانی شبکه IPv4 دنباله‌ای از چهار اکتت ده‌دهی است که با «.» جدا می‌شوند، و یک نشانی شبکه IPv6 دنباله‌ای از سه تا هشت جفت اکتت هگزادسیمال است که با «:» یا «::» جدا شده‌اند؛ حالت دوم شکل خلاصه برای دنباله‌ای از یک یا چند جفت اکتت تماماً صفر است. الگوی 0.0.0.0/0 با هر نشانی IPv4 و ::/0 با هر نشانی IPv6 مطابقت دارد. پشتیبانی از IPv6 در Postfix نسخه 2.2 و بالاتر موجود است.

پیش از انجام مقایسه‌ها، کلیدهای جستجو و مدخل‌های جدول از رشته به باینری تبدیل می‌شوند. بنابراین، الگوهای IPv6 بدون توجه به صفرهای ابتدایی مطابقت داده می‌شوند (یک صفر پیشرو در اکتت نشانی IPv4 نشان‌دهنده نمادگذاری هشت‌هشتی است).

نکته: اطلاعات نشانی می‌تواند درون «[]» محصور شود اما این فرم الزامی نیست.

محتوای یک جدول می‌تواند درون نام جدول مشخص شود (Postfix نسخه 3.7 و بالاتر). نحو پایه به صورت زیر است:

main.cf:
    parameter = .. cidr:{ { rule-1 }, { rule-2 } .. } ..
master.cf:
    .. -o { parameter = .. cidr:{ { rule-1 }, { rule-2 } .. } .. } ..

پست‌فیکس به صورت بازگشتی هر نمونه از $parametername در مقدار پارامتر بالا را بسط می‌دهد، فاصله‌های سفید پس از '{' و پیش از '}' را نادیده می‌گیرد و هر rule را به عنوان یک سطر متنی درون یک فایل در حافظه می‌نویسد:

in-memory file:
    rule-1
    rule-2
    ..

پست‌فیکس نتیجه را به گونه‌ای پردازش می‌کند که گویی فایلی در /etc/postfix است.

نکته: اگر یک قاعده حاوی $ است، از $$ استفاده کنید تا از تلاش Postfix برای بسط $name هنگام ارزیابی مقدار پارامتر جلوگیری شود.

/etc/postfix/main.cf:
    smtpd_client_restrictions = ... cidr:/etc/postfix/client.cidr ...
/etc/postfix/client.cidr:
    # ترتیب قواعد مهم است. ورودی‌های خاص‌تر لیست مجاز را
    # پیش از ورودی‌های عمومی‌تر لیست مسدود قرار دهید.
    192.168.1.1             OK
    192.168.0.0/16          REJECT
    2001:db8::1             OK
    2001:db8::/32           REJECT

postmap(1), Postfix lookup table manager
regexp_table(5), format of regular expression tables
pcre_table(5), format of PCRE tables

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

DATABASE_README, Postfix lookup table overview


پشتیبانی از جدول CIDR با نسخه 2.1 نرم‌افزار Postfix معرفی شد.

کد جستجوی جدول CIDR در اصل توسط افراد زیر نوشته شده است:
Jozsef Kadlecsik
KFKI Research Institute for Particle and Nuclear Physics
POB. 49
1525 Budapest, Hungary
Adopted and adapted by:
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