TABLE(5) File Formats Manual TABLE(5)

table — قالب و ساختار جداول جستجو در OpenSMTPD

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

قالب شرح‌داده‌شده در اینجا برای جداولی اعمال می‌شود که در smtpd.conf(5) تعریف شده‌اند.

دو نوع جدول وجود دارد: فهرست‌ها (lists) و نگاشت‌ها (mappings). یک فهرست از مجموعه‌ای از مقادیر تشکیل شده است، در حالی که یک نگاشت شامل مجموعه‌ای از کلیدها و مقادیر مرتبط با آن‌ها است. مثال زیر نحوه اعلان آن‌ها را به عنوان جداول ایستا (static) نشان می‌دهد:

table mylist { value1, value2, value3 }
table mymapping { key1 = value1, key2 = value2, key3 = value3 }

هنگام استفاده از یک جدول ‘file’ یک فهرست با نوشتن هر مقدار در یک خط جداگانه تعریف می‌شود.

value1
value2
value3

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

key1:	value1
key2	value2
key3	value3

خطوط خالی، فاصله‌ها و تب‌های ابتدا و انتهای خط نادیده گرفته می‌شوند. خطوطی که اولین نویسه غیرفاصله آن‌ها علامت هش (‘#’) باشد، کامنت هستند و نادیده گرفته می‌شوند. برای اجبار به تجزیه یک جدول پرونده‌ای به عنوان فهرست به جای نگاشت، از این کامنت ویژه استفاده کنید:

# @list

یک جدول پرونده‌ای را می‌توان بدون هیچ تغییری در ساختار، با استفاده از ابزار کاربردی makemap(8) به یک پایگاه داده برکلی (Berkeley database) تبدیل کرد.

جداولی که از بک‌اند ‘file’ یا Berkeley DB استفاده می‌کنند، به شکل زیر ارجاع داده خواهند شد:

table name file:/path/to/file
table name db:/path/to/file.db

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

action name method alias <table>
action name method virtual <table>

در زمینه دامنه اصلی، کلید همان بخش کاربری نشانی گیرنده است، در حالی که مقدار، یک یا چند گیرنده است همان‌طور که در aliases(5) شرح داده شده است:

user1	otheruser
user2	otheruser1,otheruser2
user3	otheruser@example.com

در زمینه دامنه مجازی، کلید می‌تواند بخش کاربری، یک نشانی کامل ایمیل یا یک گیرنده همگانی (catch-all) طبق قواعد گزینش ارائه‌شده در smtpd.conf(5) باشد، و مقدار نیز یک یا چند گیرنده است همان‌طور که در aliases(5) شرح داده شده است:

user1			otheruser
user2@example.org	otheruser1,otheruser2
@example.org		otheruser@example.com
@			catchall@example.com

دستورالعمل زیر ساختار جدولی یکسانی دارد، اما دارای معنایی متفاوت است. در اینجا، کاربر مجاز است از نشانی‌های فهرست‌شده ایمیل ارسال کند:

listen on interface auth [...] senders <table>

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

match for domain <table> action name
match helo <table> [...] action name

در این زمینه، فهرست دامنه‌ها به ترتیب با دامنه گیرنده یا با نام HELO اعلان‌شده توسط میزبان فرستنده تطبیق داده خواهد شد. برای بک‌اندهای ‘static’, ‘file’ و dbopen(3), می‌توان از نویسه عمومی (wildcard) استفاده کرد، بنابراین جدول دامنه می‌تواند شامل موارد زیر باشد:

example.org
*.example.org

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

listen on interface tls [...] auth <table>
action name relay host relay-url auth <table>

در زمینه شنود (listener)، اطلاعات احراز هویت نگاشتی از نام کاربری و گذرواژه‌های رمزشده هستند:

user1	$2b$10$hIJ4QfMcp.90nJwKqGbKM.MybArjHOTpEtoTV.DgLYAiThuoYmTSe
user2	$2b$10$bwSmUOBGcZGamIfRuXGTvuTo3VLbPG9k5yeKNMBtULBhksV5KdGsK

گذرواژه‌ها باید با استفاده از زیردستور encrypt در smtpctl(8) رمزگذاری شوند.

در زمینه رله (relay)، اطلاعات احراز هویت نگاشتی از برچسب‌ها و جفت‌های username:password هستند:

label1	user:password

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

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

match from src <table> action name

هنگام استفاده به عنوان «from source» (از مبدأ)، نشانی کلاینت تا زمانی که یک تطابق پیدا شود با فهرست نشانی‌های موجود در جدول مقایسه می‌شود.

یک جدول netaddr می‌تواند حاوی نشانی‌های دقیق یا ماسک‌های شبکه (netmasks) باشد و به شکل زیر است:

192.168.1.1
[::1]
192.168.1.0/24

نشانی‌های IPv6 باید درون براکت قرار گیرند.

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

action name method userbase <table>

یک جدول userinfo به شکل زیر است:

joe	1000:100:/home/virtual/joe
jack	1000:100:/home/virtual/jack

در این مثال، هر دو کاربر joe و jack کاربران مجازی نگاشت‌شده به کاربر سیستم محلی با UID برابر ۱۰۰۰ و GID برابر ۱۰۰، اما با دایرکتوری‌های خانگی متفاوت هستند. این دایرکتوری‌ها ممکن است حاوی یک پرونده forward(5) باشند. از این قابلیت می‌توان همراه با یک جدول نام مستعار (alias table) استفاده کرد که یک نشانی ایمیل یا بخش دامنه را به نام کاربری مجازی مورد نظر نگاشت می‌کند. برای نمونه:

joe@example.org     joe
jack@example.com    jack

جداول مبدأ، فهرست‌هایی از نشانی‌های IPv4 و IPv6 هستند. از آن‌ها فقط می‌توان در زمینه زیر استفاده کرد:

action name relay src <table>

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

یک جدول source به شکل زیر است:

192.168.1.2
192.168.1.3
[::1]
[::2]

نشانی‌های IPv6 باید درون براکت قرار گیرند.

جداول آدرس ایمیل، فهرست‌هایی از نشانی‌های ایمیل هستند. از آن‌ها می‌توان در زمینه‌های زیر استفاده کرد:

match mail-from <table> action name
match rcpt-to <table> action name

یک مدخل mailaddr برای تطبیق دادن یک نشانی ایمیل با یک نام کاربری، یک دامنه یا یک نشانی کامل ایمیل به کار می‌رود. یک نویسه عمومی «*» (wildcard) می‌تواند در بخشی از نام دامنه استفاده شود.

یک جدول mailaddr به شکل زیر است:

user
@domain
user@domain
user@*.domain

جداول نام آدرس برای نگاشت نشانی‌های IP به نام‌های میزبان استفاده می‌شوند. از آن‌ها می‌توان در هر دو زمینه شنود و رله استفاده کرد:

listen on interface hostnames <table>
action name relay helo-src <table>

در زمینه شنود، این جدول برای جستجوی نام سرور جهت اعلام، بر اساس نشانی محلی سوکتی که اتصال روی آن پذیرفته شده است، استفاده می‌شود. در زمینه رله، این جدول برای تعیین نام میزبان در توالی HELO پروتکل SMTP، بر اساس نشانی محلی مورد استفاده برای اتصال خروجی، به کار می‌رود.

قالب به صورت نگاشتی از نشانی‌های inet4 یا inet6 به نام‌های میزبان است:

[::1]		localhost
127.0.0.1	localhost
88.190.23.165	www.opensmtpd.org

نشانی‌های IPv6 باید درون براکت قرار گیرند.

smtpd.conf(5), makemap(8), smtpd(8)

May 2, 2024 Linux 6.12.107+deb13-amd64