آموزش کانفیگ سرور ایمیل یا Mail Server به کمک Postfix, Dovecot, MySQL

با مطالعه مقاله  آموزش کانفیگ سرور ایمیل یا Mail Server ، قادر به کانفیگ و راه اندازی یک سرور سرویس ارسال و دریافت ایمیل روی لینوکس توزیع Ubuntu 12 خواهید بود . برای راه اندازی این Mail Server روی لینوکس اوبونتو از سرویس های Postfix Dovecot و MySQL و SpamAssassin استفاده میکنیم . در صورت کانفیگ صحیح ، ایمیل های سرور شما اسپم نخواهد شد و مستقیما به Inbox خواهند رفت .

آموزش کانفیگ سرور ایمیل یا Mail Server به کمک Postfix, Dovecot, MySQL

آموزش کانفیگ سرور ایمیل یا Mail Server به کمک Postfix, Dovecot, MySQL

آموزش کانفیگ سرور ایمیل یا Mail Server

پیش نیاز ها :

  • یک آدرس دامنه پارک شده روی سرور
  • نصب سرویس MySQL Server
  • دسترسی Root
  • استفاده از Hostname ولید و معتبر

نصب سرویس ها :

ابتدا باید آخرین نسخه های پایدار سرویس های Postfix و Dovecot و MySQL و آنتی اسپمر SpamAssasin را روی سرور لینوکس نصب کنیم :

apt-get install postfix postfix-mysql dovecot-core dovecot-imapd dovecot-lmtpd dovecot-mysql

در هنگام نصب سرویس Postfix در لینوکس اوبونتو  حتما گزینه internet Site را انتخاب کنید . در ادامه نصب ، Postfix از شما مشخصات FDQN را سوال میکند که باید Hostname ولید سرور را معرفی کنید .

ساختن دیتابیس MySQL و Virtual Domain و ساخت User

ابتدا یک دیتابیس MySQL میسازیم و ۳ جدول در آن ایجاد میکنیم . یکی برای یوزر ها ، یکی برای دامنه ها و دیگری برای alias ها :

mysqladmin -p create servermail
mysql -u root -p
mysql >
mysql > GRANT SELECT ON servermail.* TO ‘usermail’@’127.0.0.1’ IDENTIFIED BY ‘mailpassword’;
mysql > FLUSH PRIVILEGES;
mysql> USE servermail;

CREATE TABLE virtual_domains (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE virtual_users (
id INT NOT NULL AUTO_INCREMENT,
domain_id INT NOT NULL,
password VARCHAR(106) NOT NULL,
email VARCHAR(120) NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY email (email),
FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE virtual_aliases (
id INT NOT NULL AUTO_INCREMENT,
domain_id INT NOT NULL,
source varchar(100) NOT NULL,
destination varchar(100) NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

کار ساخت دیتابیس و جداول مربوط به آن تمام شد  . مرحله بعدی ، وارد کردن اطلاعات مورد نظر به دیتابیس است .

ابتدا دامنه های مورد نظر خود را داخل جدول Virtual Domains مربوط به دیتابیس ساخته شده وارد میکنیم . 

INSERT INTO servermail.virtual_domains
(id ,name)
VALUES
(‘1’, ‘example.com’),
(‘2’, ‘hostname.example.com’);

در مرحله بعدی اطلاعات مربوط به آدرس های ایمیل و کلمات عبور مربوط به هر آدرس را داخل جدول virtual_users وارد میکنیم :

INSERT INTO servermail.virtual_users
(id, domain_id, password , email)
VALUES
(‘1’, ‘1’, ENCRYPT(‘firstpassword’, CONCAT(‘$6$’, SUBSTRING(SHA(RAND()), -16))), ’[email protected]’),
(‘2’, ‘1’, ENCRYPT(‘secondpassword’, CONCAT(‘$6$’, SUBSTRING(SHA(RAND()), -16))), ’[email protected]’);

و سر انجام alias های مربوط به هر آدرس ایمیل که عموما برای ایجاد Email Forwarder استفاده میشوند را داخل جدول virtual_aliases وارد میکنیم :

INSERT INTO servermail.virtual_aliases
(id, domain_id, source, destination)
VALUES
(‘1’, ‘1’, ‘[email protected]’, ’[email protected]’);

و به کمک دستور زیر از MySQL خارج میشویم :

mysql > exit

آموزش کانفیگ سرور ایمیل یا Mail Server

آموزش کانفیگ سرور ایمیل یا Mail Server

کانفیگ Postfix

در این مرحله با کانفیگ سرویس Postfix امکان هندل کردن کانکشن های SMTP و همچنین ارسال پیام و ایمیل برای تمامی یوزر های ساخته شده در دیتابیس Mail Server فراهم میگردد .

ابتدا مسیرفایل main.cf را تغییر داده و این فایل را ویرایش میکنیم :

cp /etc/postfix/main.cf /etc/postfix/main.cf.orig
vi /etc/postfix/main.cf

و مقادیر آن را به شکل زیر تغییر میدهیم :

# TLS parameters
#smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
#smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
#smtpd_use_tls=yes
#smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
#smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_tls_cert_file=/etc/ssl/certs/dovecot.pem
smtpd_tls_key_file=/etc/ssl/private/dovecot.pem
smtpd_use_tls=yes
smtpd_tls_auth_only = yes

smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions =
permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination

#mydestination = example.com, hostname.example.com, localhost.example.com, localhost
mydestination = localhost

virtual_transport = lmtp:unix:private/dovecot-lmtp

و سرو انجام این ۳ خط را به فایل اضافه کرده و فایل را ذخیره میکنیم :

virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf

در مرحله بعدی یک فایل به نام mysql-virtual-mailbox-domaincs.cf ایجاد کرده و مطابق زیر آن را ویرایش کنید :

vi /etc/postfix/mysql-virtual-mailbox-domains.cf

user = usermail
password = mailpassword
hosts = 127.0.0.1
dbname = servermail
query = SELECT 1 FROM virtual_domains WHERE name=’%s’

و سر انجام سرویس Postfix را ریست میکنیم :

service postfix restart

حالا تست میکنیم تا اطمینان حاصل کنیم سرویس Postfix دامنه مورد نظر شما را پیدا کرده و به درستی با حدول دامنه ها در دیتابیس ایمیل ها ارتباط برقرارمیکند . خروجی دستور زیر در صورت عدم وجود مشکل در کانفیگ Posftix عدد ۱ خواهد بود :

postmap -q example.com mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf

حالا فایلی به نام mysql-virtual-mailbox-maps.cf ایجا کرده و به شکل زیر آن را ویرایش کنید :

vi /etc/postfix/mysql-virtual-mailbox-maps.cf

user = usermail
password = mailpassword
hosts = 127.0.0.1
dbname = servermail
query = SELECT 1 FROM virtual_users WHERE email=’%s’

و مجددا postfix را ریستارت میکنیم :

service postfix restart

و مجددا جهت اطمینان از دسترسی Postfix این بار به اطلاعات مربوط به آدرس ایمیل ها در جدول مربوطه دستور زیر را وارد میکنیم :

postmap -q [email protected] mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf

خروجی ۱ نشان دهنده کانفیگ صحیح و عدم وجود مشکل است .

آخرین فایل مربوط به ایجاد کانکشن بین Postfix و MySQL است :

vi /etc/postfix/mysql-virtual-alias-maps.cf

user = usermail
password = mailpassword
hosts = 127.0.0.1
dbname = servermail
query = SELECT destination FROM virtual_aliases WHERE source=’%s’

و ریستارت کردن سرویس Postfix :

service postfix restart

خروجی دستور زیر در محیط ssh درواقع forwarder های مربوط به alias مورد نظر را به شما نشان خواهد داد :

postmap -q [email protected] mysql:/etc/postfix/mysql-virtual-alias-maps.cf

کانفیگ Dovecot

قبل از آغاز کانفیگ سرویس Dovecot در لینوکس و محیط ssh دستورات زیر را اجرا کنید :

cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig
cp /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.orig
cp /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.orig
cp /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext.orig
cp /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.orig
cp /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf.orig

حالا فایل کانفیگ dovecot را ویرایش میکنیم :

vi /etc/dovecot/dovecot.conf

و خط زیر را اصطلاحا uncomment میکنیم :

!include conf.d/*.conf

و تغییرات زیر را در فایل dovecot.conf اعمال کرده و فایل را ذخیره میکنیم :

!include_try /usr/share/dovecot/protocols.d/*.protocol
protocols = imap lmtp

در مرحله بعدی فایل مربوط به تنظیمات ایمیل را ویرایش میکنیم :

nano /etc/dovecot/conf.d/10-mail.conf

خط mail_location را پیدا کرده ، آن را uncomment میکنیم و  پارامتر های زیر را به آن اضافه میکنیم :

mail_location = maildir:/var/mail/vhosts/%d/%n

حالا به دنبال خط mail_privileged_group میگردیم و آن را به این شکل تغییر میدهیم :

mail_privileged_group = mail

کانفیگ Postfix و Dovecot

کانفیگ Postfix و Dovecot

بررسی دسترسی ها

خروجی دستور زیر :

ls -ld /var/mail

باید مشابه این باشد :

drwxrwsr-x 3 root vmail 4096 Jan 24 21:23 /var/mail

حالا به ازای هر دامنه ای که در دیتابیس اضافه کرده ایم یک پوشه در مسیر زیر میسازیم :

mkdir -p /var/mail/vhosts/example.com

حالا یک گروه و یوزر جدید ساخته و مالکیت پوشه /var/mail را به آن تغییر میدهیم :

groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /var/mail

chown -R vmail:vmail /var/mail

حالا فایل زیر را ویرایش میکنیم :

nano /etc/dovecot/conf.d/10-auth.conf

و مقادیر آن را به شکل زیر تغییر میدهیم :

disable_plaintext_auth = yes
auth_mechanisms = plain login
!include auth-system.conf.ext
!include auth-sql.conf.ext

در ادامه مراحل کانفیگ Mail Server یک فایل جدید ایجاد کرده و به این صورت ویرایش میکنیم :

nano /etc/dovecot/conf.d/auth-sql.conf.ext

passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
driver = static
args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
}

ویرایش این فایل و انجام تغییرات و ذخیره تغییرات :

nano /etc/dovecot/dovecot-sql.conf.ext

driver = mysql
connect = host=127.0.0.1 dbname=servermail user=usermail password=mailpassword
default_pass_scheme = SHA512-CRYPT
password_query = SELECT email as user, password FROM virtual_users WHERE email=’%u’;

حالا مالکیت های مربوط به پوشه dovecot را نیز تغییر میدهیم :

chown -R vmail:dovecot /etc/dovecot
chmod -R o-rwx /etc/dovecot

در ادامه فایر /etc/dovecot/conf.d/10-master.conf را باز کرده و به این صورت ویرایش میکنیم :

nano /etc/dovecot/conf.d/10-master.conf

##Uncomment inet_listener_imap and modify to port 0
service imap-login {
inet_listener imap {
port = 0
}

#Create LMTP socket and this configurations
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
mode = 0600
user = postfix
group = postfix
}
#inet_listener lmtp {
# Avoid making LMTP visible for the entire internet
#address =
#port =
#}
}

service auth {

unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}

unix_listener auth-userdb {
mode = 0600
user = vmail
#group =
}

#unix_listener /var/spool/postfix/private/auth {
# mode = 0666
#}

user = dovecot
}

service auth-worker {
# Auth worker process is run as root by default, so that it can access
# /etc/shadow. If this isn’t necessary, the user should be changed to
# $default_internal_user.
user = vmail
}

سرویس dovecot را ریستارت میکنیم :

service dovecot restart

در آموزش بعدی ، نحوه جلوگیری از ارسال  اسپم توسط  Mail Server و همچنین پیشگیری کردن از Spam شناخته شدن آی پی سرور شما به کمک سرویس SpamAssasin را آموزش خواهیم داد .

پاسخ به کلیه سوالات شما در زمینه وب هاستینگ و مدیریت سرور در انجمن کامپایلر

One thought on “آموزش کانفیگ سرور ایمیل یا Mail Server به کمک Postfix, Dovecot, MySQL

  1. سینا

    سلام
    ممنون از این مقاله خوب و مفید شما
    راستی برای داشتن این میل سرور در حالت لوکال و بر روی یک شبکه داخلی چکار باید کرد برای اتصال این میل سرور شبکه داخلی با سرویسی مثل gmail چه باید کرد یعنی بشه نامه های بیرون از شبکه از طریق gmail ارسال بشه

    Reply

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *