ا مطالعه مقاله آموزش کانفیگ سرور ایمیل یا Mail Server ، قادر به کانفیگ و راه اندازی یک سرور سرویس ارسال و دریافت ایمیل روی لینوکس توزیع Ubuntu 12 خواهید بود . برای راه اندازی این Mail Server روی لینوکس اوبونتو از سرویس های Postfix Dovecot و MySQL و SpamAssassin استفاده میکنیم . در صورت کانفیگ صحیح ، ایمیل های سرور شما اسپم نخواهد شد و مستقیما به Inbox خواهند رفت .
آموزش کانفیگ سرور ایمیل یا 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))), ‘email1@example.com’),
(’2′, ’1′, ENCRYPT(‘secondpassword’, CONCAT(‘$6$’, SUBSTRING(SHA(RAND()), -16))), ‘email2@example.com’);
و سر انجام alias های مربوط به هر آدرس ایمیل که عموما برای ایجاد Email Forwarder استفاده میشوند را داخل جدول virtual_aliases وارد میکنیم :
INSERT INTO servermail
.virtual_aliases
(id
, domain_id
, source
, destination
)
VALUES
(’1′, ’1′, ‘alias@example.com’, ‘email1@example.com’);
و به کمک دستور زیر از MySQL خارج میشویم :
mysql > exit
کانفیگ 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 email1@example.com 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 alias@example.com 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
بررسی دسترسی ها
خروجی دستور زیر :
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 را آموزش خواهیم داد .