.\" $OpenBSD: table.5,v 1.14 2024/05/02 18:14:33 op Exp $ .\" .\" Copyright (c) 2013 Eric Faurot .\" Copyright (c) 2013 Gilles Chehade .\" .\" Permission to use, copy, modify, and distribute this software for any .\" purpose with or without fee is hereby granted, provided that the above .\" copyright notice and this permission notice appear in all copies. .\" .\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES .\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF .\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR .\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES .\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" .\" .Dd $Mdocdate: May 2 2024 $ .Dt TABLE 5 .Os .Sh "نام (NAME)" .Nm table .Nd قالب و ساختار جداول جستجو در OpenSMTPD .Sh "توضیحات (DESCRIPTION)" این صفحه راهنما، قالب پرونده برای جداول مختلف مورد استفاده در دیمن ایمیل .Xr smtpd 8 را مستند می‌کند. .Pp قالب شرح‌داده‌شده در اینجا برای جداولی اعمال می‌شود که در .Xr smtpd.conf 5 تعریف شده‌اند. .Sh "انواع جدول (TABLE TYPES)" دو نوع جدول وجود دارد: فهرست‌ها (lists) و نگاشت‌ها (mappings). یک فهرست از مجموعه‌ای از مقادیر تشکیل شده است، در حالی که یک نگاشت شامل مجموعه‌ای از کلیدها و مقادیر مرتبط با آن‌ها است. مثال زیر نحوه اعلان آن‌ها را به عنوان جداول ایستا (static) نشان می‌دهد: .Bd -literal -offset indent table mylist { value1, value2, value3 } table mymapping { key1 = value1, key2 = value2, key3 = value3 } .Ed .Pp هنگام استفاده از یک جدول .Ql file یک فهرست با نوشتن هر مقدار در یک خط جداگانه تعریف می‌شود. .Bd -literal -offset indent value1 value2 value3 .Ed .Pp یک نگاشت به این صورت نوشته می‌شود که هر کلید و مقدار در یک خط قرار می‌گیرند، و فاصله خالی و دو‌نقطه اختیاری دو ستون را از هم جدا می‌کنند: .Bd -literal -offset indent key1: value1 key2 value2 key3 value3 .Ed .Pp خطوط خالی، فاصله‌ها و تب‌های ابتدا و انتهای خط نادیده گرفته می‌شوند. خطوطی که اولین نویسه غیرفاصله آن‌ها علامت هش .Pq Sq # باشد، کامنت هستند و نادیده گرفته می‌شوند. برای اجبار به تجزیه یک جدول پرونده‌ای به عنوان فهرست به جای نگاشت، از این کامنت ویژه استفاده کنید: .Pp .Dl # @list .Pp یک جدول پرونده‌ای را می‌توان بدون هیچ تغییری در ساختار، با استفاده از ابزار کاربردی .Xr makemap 8 به یک پایگاه داده برکلی (Berkeley database) تبدیل کرد. .Pp جداولی که از بک‌اند .Ql file یا Berkeley DB استفاده می‌کنند، به شکل زیر ارجاع داده خواهند شد: .Bd -unfilled -offset indent .Ic table Ar name Cm file : Ns Pa /path/to/file .Ic table Ar name Cm db : Ns Pa /path/to/file.db .Ed .Ss "جداول نام مستعار (Aliasing tables)" جداول نام مستعار، نگاشت‌هایی هستند که یک گیرنده را به یک یا چند مقصد مرتبط می‌کنند. می‌توان از آن‌ها در دو زمینه استفاده کرد: نام‌های مستعار دامنه اصلی و نگاشت دامنه مجازی. .Bd -unfilled -offset indent .Ic action Ar name method Cm alias Pf < table Ns > .Ic action Ar name method Cm virtual Pf < table Ns > .Ed .Pp در زمینه دامنه اصلی، کلید همان بخش کاربری نشانی گیرنده است، در حالی که مقدار، یک یا چند گیرنده است همان‌طور که در .Xr aliases 5 شرح داده شده است: .Bd -literal -offset indent user1 otheruser user2 otheruser1,otheruser2 user3 otheruser@example.com .Ed .Pp در زمینه دامنه مجازی، کلید می‌تواند بخش کاربری، یک نشانی کامل ایمیل یا یک گیرنده همگانی (catch-all) طبق قواعد گزینش ارائه‌شده در .Xr smtpd.conf 5 باشد، و مقدار نیز یک یا چند گیرنده است همان‌طور که در .Xr aliases 5 شرح داده شده است: .Bd -literal -offset indent user1 otheruser user2@example.org otheruser1,otheruser2 @example.org otheruser@example.com @ catchall@example.com .Ed .Pp دستورالعمل زیر ساختار جدولی یکسانی دارد، اما دارای معنایی متفاوت است. در اینجا، کاربر مجاز است از نشانی‌های فهرست‌شده ایمیل ارسال کند: .Bd -unfilled -offset indent .Ic listen on Ar interface Cm auth Oo Ar ... Oc Cm senders Pf < Ar table Ns > .Ed .Ss "جداول دامنه (Domain tables)" جداول دامنه، فهرست‌های ساده‌ای از دامنه‌ها یا میزبان‌ها هستند. .Bd -unfilled -offset indent .Ic match Cm for domain Pf < table Ns > Cm action Ar name .Ic match Cm helo Pf < table Ns > Oo Ar ... Oc Cm action Ar name .Ed .Pp در این زمینه، فهرست دامنه‌ها به ترتیب با دامنه گیرنده یا با نام HELO اعلان‌شده توسط میزبان فرستنده تطبیق داده خواهد شد. برای بک‌اندهای .Ql static , .Ql file و .Xr dbopen 3 , می‌توان از نویسه عمومی (wildcard) استفاده کرد، بنابراین جدول دامنه می‌تواند شامل موارد زیر باشد: .Bd -literal -offset indent example.org *.example.org .Ed .Ss "جداول اطلاعات احراز هویت (Credentials tables)" جداول اطلاعات احراز هویت، نگاشت‌هایی از مشخصات اعتبارسنجی هستند. می‌توان از آن‌ها در دو زمینه استفاده کرد: .Bd -unfilled -offset indent .Ic listen on Ar interface Cm tls Oo Ar ... Oc Cm auth Pf < Ar table Ns > .Ic action Ar name Cm relay host Ar relay-url Cm auth Pf < Ar table Ns > .Ed .Pp در زمینه شنود (listener)، اطلاعات احراز هویت نگاشتی از نام کاربری و گذرواژه‌های رمزشده هستند: .Bd -literal -offset indent user1 $2b$10$hIJ4QfMcp.90nJwKqGbKM.MybArjHOTpEtoTV.DgLYAiThuoYmTSe user2 $2b$10$bwSmUOBGcZGamIfRuXGTvuTo3VLbPG9k5yeKNMBtULBhksV5KdGsK .Ed .Pp گذرواژه‌ها باید با استفاده از زیردستور encrypt در .Xr smtpctl 8 رمزگذاری شوند. .Pp در زمینه رله (relay)، اطلاعات احراز هویت نگاشتی از برچسب‌ها و جفت‌های username:password هستند: .Bd -literal -offset indent label1 user:password .Ed .Pp برچسب باید یکتا باشد و هنگامی که چند مدرک شناسایی برای یک مقصد معتبر هستند، به عنوان گزینش‌گر برای انتخاب اطلاعات مناسب به کار می‌رود. گذرواژه رمزگذاری نمی‌شود زیرا باید به میزبان راه دور ارائه گردد. .Ss "جداول آدرس شبکه (Netaddr tables)" جداول آدرس شبکه، فهرست‌هایی از نشانی‌های شبکه IPv4 و IPv6 هستند. از آن‌ها فقط می‌توان در زمینه زیر استفاده کرد: .Pp .D1 Ic match Cm from src Pf < Ar table Ns > Cm action Ar name .Pp هنگام استفاده به عنوان «from source» (از مبدأ)، نشانی کلاینت تا زمانی که یک تطابق پیدا شود با فهرست نشانی‌های موجود در جدول مقایسه می‌شود. .Pp یک جدول netaddr می‌تواند حاوی نشانی‌های دقیق یا ماسک‌های شبکه (netmasks) باشد و به شکل زیر است: .Bd -literal -offset indent 192.168.1.1 [::1] 192.168.1.0/24 .Ed .Pp نشانی‌های IPv6 باید درون براکت قرار گیرند. .Ss "جداول اطلاعات کاربر (Userinfo tables)" جداول اطلاعات کاربر در زمینه قواعد برای تعیین یک پایگاه کاربری جایگزین استفاده می‌شوند و کاربران مجازی را بر اساس UID، GID و دایرکتوری خانگی به کاربران سیستم محلی نگاشت می‌کنند. .Pp .D1 Ic action Ar name method Cm userbase Pf < Ar table Ns > .Pp یک جدول userinfo به شکل زیر است: .Bd -literal -offset indent joe 1000:100:/home/virtual/joe jack 1000:100:/home/virtual/jack .Ed .Pp در این مثال، هر دو کاربر joe و jack کاربران مجازی نگاشت‌شده به کاربر سیستم محلی با UID برابر ۱۰۰۰ و GID برابر ۱۰۰، اما با دایرکتوری‌های خانگی متفاوت هستند. این دایرکتوری‌ها ممکن است حاوی یک پرونده .Xr forward 5 باشند. از این قابلیت می‌توان همراه با یک جدول نام مستعار (alias table) استفاده کرد که یک نشانی ایمیل یا بخش دامنه را به نام کاربری مجازی مورد نظر نگاشت می‌کند. برای نمونه: .Bd -literal -offset indent joe@example.org joe jack@example.com jack .Ed .Ss "جداول مبدأ (Source tables)" جداول مبدأ، فهرست‌هایی از نشانی‌های IPv4 و IPv6 هستند. از آن‌ها فقط می‌توان در زمینه زیر استفاده کرد: .Pp .D1 Ic action Ar name Cm relay src Pf < Ar table Ns > .Pp پرس‌وجوهای متوالی از جدول مبدأ، عناصر را یکی پس از دیگری برمی‌گردانند. .Pp یک جدول source به شکل زیر است: .Bd -literal -offset indent 192.168.1.2 192.168.1.3 [::1] [::2] .Ed .Pp نشانی‌های IPv6 باید درون براکت قرار گیرند. .Ss "جداول آدرس ایمیل (Mailaddr tables)" جداول آدرس ایمیل، فهرست‌هایی از نشانی‌های ایمیل هستند. از آن‌ها می‌توان در زمینه‌های زیر استفاده کرد: .Bd -unfilled -offset indent .Ic match Cm mail\-from Pf < Ar table Ns > Cm action Ar name .Ic match Cm rcpt\-to Pf < Ar table Ns > Cm action Ar name .Ed .Pp یک مدخل mailaddr برای تطبیق دادن یک نشانی ایمیل با یک نام کاربری، یک دامنه یا یک نشانی کامل ایمیل به کار می‌رود. یک نویسه عمومی «*» (wildcard) می‌تواند در بخشی از نام دامنه استفاده شود. .Pp یک جدول mailaddr به شکل زیر است: .Bd -literal -offset indent user @domain user@domain user@*.domain .Ed .Ss "جداول نام آدرس (Addrname tables)" جداول نام آدرس برای نگاشت نشانی‌های IP به نام‌های میزبان استفاده می‌شوند. از آن‌ها می‌توان در هر دو زمینه شنود و رله استفاده کرد: .Bd -unfilled -offset indent .Ic listen on Ar interface Cm hostnames Pf < Ar table Ns > .Ic action Ar name Cm relay helo\-src Pf < Ar table Ns > .Ed .Pp در زمینه شنود، این جدول برای جستجوی نام سرور جهت اعلام، بر اساس نشانی محلی سوکتی که اتصال روی آن پذیرفته شده است، استفاده می‌شود. در زمینه رله، این جدول برای تعیین نام میزبان در توالی HELO پروتکل SMTP، بر اساس نشانی محلی مورد استفاده برای اتصال خروجی، به کار می‌رود. .Pp قالب به صورت نگاشتی از نشانی‌های inet4 یا inet6 به نام‌های میزبان است: .Bd -literal -offset indent [::1] localhost 127.0.0.1 localhost 88.190.23.165 www.opensmtpd.org .Ed .Pp نشانی‌های IPv6 باید درون براکت قرار گیرند. .Sh "همچنین ببینید (SEE ALSO)" .Xr smtpd.conf 5 , .Xr makemap 8 , .Xr smtpd 8