| TABLE_POSTGRESQL(5) | File Formats Manual | TABLE_POSTGRESQL(5) |
توضیحات (DESCRIPTION)
این صفحه راهنما، قالب فایل جدولهای PostgreSQL را مستند میکند که توسط دیمن ایمیل smtpd(8) استفاده میشوند.
قالب شرحدادهشده در اینجا برای جدولهایی اعمال میشود که در smtpd.conf(5) تعریف شدهاند.
جدول POSTGRESQL (POSTGRESQL TABLE)
یک جدول postgresql امکان ذخیرهسازی نامهای کاربری، گذرواژهها، نامهای مستعار و دامنهها را در قالبی فراهم میکند که در میان ماشینهای مختلف پشتیبانیکننده از postgres(1) قابل اشتراکگذاری است.
این جدول توسط smtpd(8) هنگام احراز هویت کاربر، هنگامی که اطلاعات کاربر مانند user-id و/یا دایرکتوری خانگی برای تحویل مورد نیاز است، زمانی که جستجوی دامنه ممکن است لازم باشد، و/یا هنگام جستجوی یک نام مستعار استفاده میشود.
یک جدول PostgreSQL از یک یا چند پایگاهداده postgresql(1) با یک یا چند جدول تشکیل شده است.
اگر جدول برای احراز هویت استفاده شود، گذرواژه باید با استفاده از تابع crypt(3) رمزگذاری شود. چنین گذرواژههایی را میتوان با ابزار encrypt(1) یا دستور encrypt در smtpctl(8) تولید کرد.
فایل پیکربندی جدول POSTGRESQL (POSTGRESQL TABLE CONFIG FILE)
گزینههای پیکربندی زیر در دسترس هستند:
conninfohost='host'user='user'password='password'dbname='dbname'- اطلاعات
اتصال مورد
نیاز برای
اتصال به
پایگاهداده
PostgreSQL. برای
نمونه:
conninfo host='db.example.com' user='maildba' password='...' dbname='opensmtpdb'
query_aliasSQL statement- این گزینه برای ارائه یک پرسمان جهت جستجوی نامهای مستعار استفاده میشود. علامت سؤال با دادههای مناسب جایگزین میشود. برای نام مستعار، این مقدار سمت چپ نشانی SMTP است. این پرسمان انتظار دارد یک VARCHAR حاوی نام کاربری که نام مستعار به آن ارجاع داده میشود، برگردانده شود.
query_credentialsSQL statement- این گزینه برای ارائه یک پرسمان جهت جستجوی اطلاعات احراز هویت کاربر استفاده میشود. علامت سؤال با دادههای مناسب جایگزین میشود. برای اطلاعات احراز هویت، این مقدار سمت چپ نشانی SMTP است. این پرسمان انتظار دارد دو VARCHAR برگردانده شود، یکی حاوی نام کاربری و دیگری حاوی گذرواژه در قالب crypt(3).
query_domainSQL statement- این گزینه برای ارائه یک پرسمان جهت جستجوی یک دامنه استفاده میشود. علامت سؤال با دادههای مناسب جایگزین میشود. برای دامنه، این مقدار سمت راست نشانی SMTP خواهد بود. این پرسمان انتظار دارد یک VARCHAR حاوی نام دامنه منطبق برگردانده شود.
query_mailaddrmapSQL statement- این گزینه برای ارائه یک پرسمان جهت جستجوی فرستندگان استفاده میشود. علامت سؤال با دادههای مناسب جایگزین میشود. این پرسمان انتظار دارد یک VARCHAR حاوی نشانی که فرستنده مجاز به ارسال ایمیل از آن است برگردانده شود.
یک دستور عمومی SQL چیزی شبیه به این خواهد بود:
query_ SELECT value FROM table WHERE key=$1;
فایلها (FILES)
- /etc/mail/postgres.conf
- فایل پیکربندی پیشفرض table-postgresql(5).
مثالها (EXAMPLES)
مثال عمومی (GENERIC EXAMPLE)
مثال بر اساس پرسشهای متداول OpenSMTPD: ساخت یک سرور ایمیل (Building a Mail Server). بخش فیلتر کردن در این مثال لحاظ نشده است.
پیکربندی زیر برای یک سرور ایمیل با اندازه متوسط است که چندین دامنه را با چندین کاربر مجازی مدیریت میکند و بر اساس چند فرض بنا شده است. یکی از آنها این است که یک کاربر سیستمی منفرد به نام vmail برای تمامی کاربران مجازی استفاده میشود. این کاربر باید ایجاد شود:
# useradd -g =uid -c "Virtual Mail" -d /var/vmail -s /sbin/nologin vmail # mkdir /var/vmail # chown vmail:vmail /var/vmail
طرحواره PostgreSQL:
CREATE TABLE domains (
id SERIAL,
domain VARCHAR(255) NOT NULL DEFAULT ''
);
CREATE TABLE virtuals (
id SERIAL,
email VARCHAR(255) NOT NULL DEFAULT '',
destination VARCHAR(255) NOT NULL DEFAULT ''
);
CREATE TABLE credentials (
id SERIAL,
email VARCHAR(255) NOT NULL DEFAULT '',
password VARCHAR(255) NOT NULL DEFAULT ''
);
این مقادیر را میتوان به شرح زیر مقداردهی کرد:
INSERT INTO domains VALUES (1, "example.com"); INSERT INTO domains VALUES (2, "example.net"); INSERT INTO domains VALUES (3, "example.org"); INSERT INTO virtuals VALUES (1, "abuse@example.com", "bob@example.com"); INSERT INTO virtuals VALUES (2, "postmaster@example.com", "bob@example.com"); INSERT INTO virtuals VALUES (3, "webmaster@example.com", "bob@example.com"); INSERT INTO virtuals VALUES (4, "bob@example.com", "vmail"); INSERT INTO virtuals VALUES (5, "abuse@example.net", "alice@example.net"); INSERT INTO virtuals VALUES (6, "postmaster@example.net", "alice@example.net"); INSERT INTO virtuals VALUES (7, "webmaster@example.net", "alice@example.net"); INSERT INTO virtuals VALUES (8, "alice@example.net", "vmail"); INSERT INTO credentials VALUES (1, "bob@example.com", "$2b$08$ANGFKBL.BnDLL0bUl7I6aumTCLRJSQluSQLuueWRG.xceworWrUIu"); INSERT INTO credentials VALUES (2, "alice@example.net", "$2b$08$AkHdB37kaj2NEoTcISHSYOCEBA5vyW1RcD8H1HG.XX0P/G1KIYwii");
/etc/mail/postgresql.conf
conninfo host='db.example.com' user='maildba' password='OpenSMTPDRules!' dbname='opensmtpdb' query_alias SELECT destination FROM virtuals WHERE email=$1; query_credentials SELECT email, password FROM credentials WHERE email=$1; query_domain SELECT domain FROM domains WHERE domain=$1;
/etc/mail/smtpd.conf
table domains postgres:/etc/mail/postgres.conf table virtuals postgres:/etc/mail/postgres.conf table credentials postgres:/etc/mail/postgres.conf listen on egress port 25 tls pki mail.example.com listen on egress port 587 tls-require pki mail.example.com auth <credentials> accept from any for domain <domains> virtual <virtuals> deliver to mbox
مهاجرت از POSTFIX (و POSTFIXADMIN)
/etc/mail/postgres.conf
conninfo host='db.example.com' user='postfix' password='...' dbname='postfix' query_alias SELECT destination FROM alias WHERE email=$1; query_credentials SELECT username, password FROM mailbox WHERE username=$1; query_domain SELECT domain FROM domain WHERE domain=$1;
بقیه پیکربندی دستنخورده باقی میماند.
کارهای باقیمانده (TODO)
مستندسازی گزینههای پرسمان زیر:
query_netaddrquery_userinfoquery_sourcequery_mailaddrquery_addrname
همچنین ببینید (SEE ALSO)
تاریخچه (HISTORY)
نخستین
نسخه از
table_postgresql در
سال ۲۰۱۶
نوشته شد. در
سال ۲۰۲۴ به
پروتکل
جدول stdio
تبدیل شد.
نویسندگان (AUTHORS)
table_postgresql در
ابتدا توسط
Gilles Chehade
<gilles@poolp.org>
نوشته شد.
تبدیل به
پروتکل
جدول stdio توسط
Omar Polo
<op@openbsd.org>
انجام
گرفت.
| April 21 2024 | Linux 6.12.107+deb13-amd64 |