.\" .\" Copyright (c) 2013 Eric Faurot .\" .\" 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: July 4 2016 $ .Dt TABLE_MYSQL 5 .Os .SH "نام (NAME)" table-mysql \- شرح قالب جدول‌های MySQL یا MariaDB برای smtpd .Sh "توضیحات (DESCRIPTION)" این صفحه راهنما قالب فایل جدول‌های MySQL یا MariaDB مورد استفاده توسط دیمن ایمیل .Xr smtpd 8 را مستند می‌کند. .Pp قالب شرح داده‌شده در اینجا برای جدول‌هایی اعمال می‌شود که در .Xr smtpd.conf 5 تعریف شده‌اند. .Sh "جدول MYSQL (MYSQL TABLE)" یک جدول mysql امکان ذخیره‌سازی نام‌های کاربری، گذرواژه‌ها، نام‌های مستعار و دامنه‌ها را در قالبی فراهم می‌کند که در میان ماشین‌های گوناگون پشتیبانی‌کننده از .Xr mysql 1 قابل اشتراک‌گذاری است. .Pp این جدول توسط .Xr smtpd 8 هنگام احراز هویت یک کاربر، زمانی که اطلاعات کاربر مانند شناسه کاربر (user-id) و/یا دایرکتوری خانگی برای تحویل پیام مورد نیاز باشد، زمانی که جستجوی دامنه لازم باشد، و/یا هنگام یافتن یک نام مستعار استفاده می‌شود. .Pp یک جدول MySQL شامل یک یا چند پایگاه داده .Xr mysql 1 با یک یا چند جدول است. .Pp اگر از جدول برای احراز هویت استفاده شود، گذرواژه باید با استفاده از تابع .Xr crypt 3 رمزگذاری شود. چنین گذرواژه‌هایی را می‌توان با استفاده از ابزار .Xr encrypt 1 یا دستور encrypt در .Xr smtpctl 8 تولید کرد. .Sh "فایل پیکربندی جدول MYSQL (MYSQL TABLE CONFIG FILE)" گزینه‌های پیکربندی زیر در دسترس هستند: .Pp .Bl -tag -width Ds .It Xo .Ic host .Ar hostname .Xc این میزبان اجراکننده MySQL یا MariaDB است. برای مثال: .Bd -literal -offset indent host db.example.com .Ed .Pp .It Xo .Ic username .Ar username .Xc نام کاربری لازم برای ارتباط با پایگاه داده MySQL یا MariaDB. برای مثال: .Bd -literal -offset indent username maildba .Ed .Pp .It Xo .Ic password .Ar password .Xc گذرواژه لازم برای ارتباط با پایگاه داده MySQL یا MariaDB. برای مثال: .Bd -literal -offset indent password OpenSMTPDRules! .Ed .Pp .It Xo .Ic database .Ar databse .Xc نام پایگاه داده MySQL یا MariaDB. برای مثال: .Bd -literal -offset indent databse opensmtpdb .Ed .Pp .It Xo .Ic query_alias .Ar SQL statement .Xc این گزینه برای مشخص کردن پرس‌وجویی جهت جستجوی نام‌های مستعار استفاده می‌شود. علامت سؤال با داده‌های مربوطه جایگزین می‌شود. برای نام مستعار، این داده همان بخش سمت چپ نشانی SMTP است. این پرس‌وجو انتظار دارد یک مقدار VARCHAR شامل نام کاربری که نام مستعار به آن ارجاع دارد بازگردانده شود. .Pp .It Xo .Ic query_credentials .Ar SQL statement .Xc این گزینه برای مشخص کردن پرس‌وجویی جهت جستجوی اعتبارنامه‌های کاربر استفاده می‌شود. علامت سؤال با داده‌های مربوطه جایگزین می‌شود. برای اعتبارنامه‌ها، این داده همان بخش سمت چپ نشانی SMTP است. این پرس‌وجو انتظار دارد دو مقدار VARCHAR بازگردانده شود، یکی شامل نام کاربری و دیگری شامل گذرواژه در قالب .Xr crypt 3 . .Pp .It Xo .Ic query_domain .Ar SQL statement .Xc این گزینه برای مشخص کردن پرس‌وجویی جهت جستجوی یک دامنه استفاده می‌شود. علامت سؤال با داده‌های مربوطه جایگزین می‌شود. برای دامنه، این داده همان بخش سمت راست نشانی SMTP خواهد بود. این پرس‌وجو انتظار دارد یک مقدار VARCHAR شامل نام دامنه منطبق بازگردانده شود. .Pp .It Xo .Ic query_mailaddrmap .Ar SQL statement .Xc این گزینه برای مشخص کردن پرس‌وجویی جهت جستجوی فرستندگان استفاده می‌شود. علامت سؤال با داده‌های مربوطه جایگزین می‌شود. این پرس‌وجو انتظار دارد یک مقدار VARCHAR شامل نشانی‌ای که فرستنده مجاز به ارسال ایمیل از آن است بازگردانده شود. .El یک دستور عمومی SQL چیزی شبیه به این خواهد بود: .Bd -literal -offset indent query_ SELECT value FROM table WHERE key=?; .Ed .Sh "مثال‌ها (EXAMPLES)" .Ss "مثال عمومی (GENERIC EXAMPLE)" مثال بر اساس پرسش‌های متداول OpenSMTPD: راه‌اندازی یک سرور ایمیل (Building a Mail Server) بخش فیلترسازی در این مثال در نظر گرفته نشده است. پیکربندی زیر برای یک سرور ایمیل با اندازه متوسط است که چندین دامنه را با چندین کاربر مجازی مدیریت می‌کند و بر پایه چندین فرض بنا شده است. یکی از این فرض‌ها این است که یک کاربر سیستمی واحد به نام vmail برای تمامی کاربران مجازی به کار می‌رود. این کاربر باید ایجاد شود: .Bd -literal # useradd -g =uid -c "Virtual Mail" -d /var/vmail -s /sbin/nologin vmail # mkdir /var/vmail # chown vmail:vmail /var/vmail .Ed .Ic Pa MySQL schema .Bd -literal -compact 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"); .Ed .Ic Pa /etc/mail/mysql.conf .Bd -literal -compact 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=?; .Ed .Ic Pa /etc/mail/smtpd.conf .Bd -literal -compact 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 accept from any for domain virtual deliver to mbox .Ed .Ss "مهاجرت از POSTFIX (و POSTFIXADMIN) (MOVING FROM POSTFIX & POSTFIXADMIN)" .Ic Pa /etc/mail/mysql.conf .Bd -literal -compact 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=?; .Ed باقی پیکربندی بدون تغییر می‌ماند. .Sh "فایل‌ها (FILES)" .Bl -tag -width "/etc/mail/mysql.conf" -compact .It Pa /etc/mail/mysql.conf فایل پیکربندی پیش‌فرض .Xr table-mysql 8 . .El .Sh "کارهای باقی‌مانده (TODO)" مستندسازی گزینه‌های پرس‌وجوی زیر: .Bd -literal -offset indent -compact .Ic query_netaddr .Ic query_userinfo .Ic query_source .Ic query_mailaddr .Ic query_addrname .Ed .Sh "همچنین ببینید (SEE ALSO)" .Xr smtpd.conf 5 , .Xr smtpctl 8 , .Xr smtpd 8 , .Xr encrypt 1 , .Xr crypt 3