| TABLE_MYSQL(5) | File Formats Manual | TABLE_MYSQL(5) |
توضیحات (DESCRIPTION)
این صفحه راهنما قالب فایل جدولهای MySQL یا MariaDB مورد استفاده توسط دیمن ایمیل smtpd(8) را مستند میکند.
قالب شرح دادهشده در اینجا برای جدولهایی اعمال میشود که در smtpd.conf(5) تعریف شدهاند.
جدول MYSQL (MYSQL TABLE)
یک جدول mysql امکان ذخیرهسازی نامهای کاربری، گذرواژهها، نامهای مستعار و دامنهها را در قالبی فراهم میکند که در میان ماشینهای گوناگون پشتیبانیکننده از mysql(1) قابل اشتراکگذاری است.
این جدول توسط smtpd(8) هنگام احراز هویت یک کاربر، زمانی که اطلاعات کاربر مانند شناسه کاربر (user-id) و/یا دایرکتوری خانگی برای تحویل پیام مورد نیاز باشد، زمانی که جستجوی دامنه لازم باشد، و/یا هنگام یافتن یک نام مستعار استفاده میشود.
یک جدول MySQL شامل یک یا چند پایگاه داده mysql(1) با یک یا چند جدول است.
اگر از جدول برای احراز هویت استفاده شود، گذرواژه باید با استفاده از تابع crypt(3) رمزگذاری شود. چنین گذرواژههایی را میتوان با استفاده از ابزار encrypt(1) یا دستور encrypt در smtpctl(8) تولید کرد.
فایل پیکربندی جدول MYSQL (MYSQL TABLE CONFIG FILE)
گزینههای پیکربندی زیر در دسترس هستند:
hosthostname- این میزبان
اجراکننده
MySQL یا MariaDB است.
برای مثال:
host db.example.com
usernameusername- نام کاربری
لازم برای
ارتباط با
پایگاه
داده MySQL یا MariaDB.
برای مثال:
username maildba
passwordpassword- گذرواژه
لازم برای
ارتباط با
پایگاه
داده MySQL یا MariaDB.
برای مثال:
password OpenSMTPDRules!
databasedatabse- نام پایگاه
داده MySQL یا MariaDB.
برای مثال:
databse 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=?;
مثالها (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
MySQL schema
CREATE TABLE domains (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
domain VARCHAR(255) NOT NULL DEFAULT ''
);
CREATE TABLE virtuals (
id INT AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(255) NOT NULL DEFAULT '',
destination VARCHAR(255) NOT NULL DEFAULT ''
);
CREATE TABLE credentials (
id INT AUTO_INCREMENT PRIMARY KEY,
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/mysql.conf
host db.example.com username maildba password OpenSMTPDRules! database opensmtpdb query_alias SELECT destination FROM virtuals WHERE email=?; query_credentials SELECT email, password FROM credentials WHERE email=?; query_domain SELECT domain FROM domains WHERE domain=?;
/etc/mail/smtpd.conf
table domains mysql:/etc/mail/mysql.conf table virtuals mysql:/etc/mail/mysql.conf table credentials mysql:/etc/mail/mysql.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) (MOVING FROM POSTFIX & POSTFIXADMIN)
/etc/mail/mysql.conf
host db.example.com username postfix password PostfixOutOpenSMTPDin database postfix query_alias SELECT destination FROM alias WHERE email=?; query_credentials SELECT username, password FROM mailbox WHERE username=?; query_domain SELECT domain FROM domain WHERE domain=?;
فایلها (FILES)
- /etc/mail/mysql.conf
- فایل پیکربندی پیشفرض table-mysql(8).
کارهای باقیمانده (TODO)
مستندسازی گزینههای پرسوجوی زیر:
query_netaddrquery_userinfoquery_sourcequery_mailaddrquery_addrname
همچنین ببینید (SEE ALSO)
| July 4, 2016 | Linux 6.12.107+deb13-amd64 |