Postfix، یک ابزار انتقال دهنده ایمیل منبع باز (MTA) است. به عبارت دیگر، سرویسی است که برای ارسال و دریافت ایمیل استفاده می‌شود. Dovecot، یک سرور IMAP/POP3 است که در این مقاله، تحویل محلی و تأیید اعتبار کاربر را نیز مدیریت می‌کند. در این مقاله، به شما چگونگی نصب و پیکربندی Postfix و Dovecot، دو جز اصلی سیستم پست الکترونیکی، آموزش داده شده است.

 

اگرچه این آموزش، برای اوبونتو 16.04 نوشته شده است؛ ولیکن با اعمال کمی تغییرات در مراحل آن، روی هر نسخه جدیدتر اوبونتو نیز قابل استفاده است.

دقت کنید که قبل از دنبال کردن مراحل زیر، به عنوان یک کاربر با امتیازات sudo وارد سیستم شده باشید.

 

این مطلب نیز ممکن است برای شما مفید باشد: راه اندازی سرور ایمیل با PostfixAdmin

 

نصب Postfix و Dovecot

بسته‌های Dovecot موجود در مخازن پیش فرض اوبونتو منسوخ شده‌اند. بنابراین، به منظور استفاده از ماژول imap_sieve می‌توانید، Dovecot را از مخزن اصلی Dovecot نصب نمایید.

بدین منظور، کلید GPG مخزن را با دستور wget بصورت زیر به keyring منابع apt خود اضافه کنید:

wget -O- https://repo.dovecot.org/DOVECOT-REPO-GPG | sudo apt-key add -

سپس، مخزن اصلی Dovecot را با استفاده از دستور زیر فعال نمایید:

echo "deb https://repo.dovecot.org/ce-2.3-latest/ubuntu/$(lsb_release -cs) $(lsb_release -cs) main" | sudo tee -a /etc/apt/sources.list.d/dovecot.list
sudo apt update
sudo debconf-set-selections <<< "postfix postfix/mailname string $(hostname -f)"
sudo debconf-set-selections <<< "postfix postfix/main_mailer_type string 'Internet Site'"
sudo apt install postfix postfix-mysql dovecot-imapd dovecot-lmtpd dovecot-pop3d dovecot-mysql

 

پیکربندی Postfix

در اینجا Postfix برای استفاده از صندوق‌های ایمیل و دامنه‌های مجازی راه‌اندازی شده است.

برای پیکربندی Postfix، ابتدا با ایجاد فایل‌های پیکربندی sql، نحوه دسترسی به پایگاه داده MySQL را برای postfix تعیین کنید.

sudo mkdir -p /etc/postfix/sql

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

                      /etc/postfix/sql/mysql_virtual_domains_maps.cf

user = postfixadmin
password = P4ssvv0rD
hosts = 127.0.0.1
dbname = postfixadmin
query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'
                  /etc/postfix/sql/mysql_virtual_alias_maps.cf

user = postfixadmin
password = P4ssvv0rD
hosts = 127.0.0.1
dbname = postfixadmin
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
               /etc/postfix/sql/mysql_virtual_alias_domain_maps.cf

user = postfixadmin
password = P4ssvv0rD
hosts = 127.0.0.1
dbname = postfixadmin
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'
               /etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf

user = postfixadmin
password = P4ssvv0rD
hosts = 127.0.0.1
dbname = postfixadmin
query  = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'

                     /etc/postfix/sql/mysql_virtual_mailbox_maps.cf

user = postfixadmin
password = P4ssvv0rD
hosts = 127.0.0.1
dbname = postfixadmin
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'
                   /etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf

user = postfixadmin
password = P4ssvv0rD
hosts = 127.0.0.1
dbname = postfixadmin
query = SELECT maildir FROM mailbox,alias_domain WHERE alias_domain.alias_domain = '%d' and mailbox.username = CONCAT('%u', '@', alias_domain.target_domain) AND mailbox.active = 1 AND alias_domain.active='1'

 

پس از ایجاد فایل‌های پیکربندی SQL، فایل اصلی پیکربندی postfix را به گونه‌ای تغییر دهید که اطلاعات مربوط به دامنه‌های مجازی، کاربران و نام‌های مستعار ذخیره شده در پایگاه داده MySQL، در آن مشخص شده باشد.

sudo postconf -e "virtual_mailbox_domains = mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf"
sudo postconf -e "virtual_alias_maps = mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf, mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf, mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf"
sudo postconf -e "virtual_mailbox_maps = mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf, mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf"

دستور postconf، مقادیر واقعی پارامترهای پیکربندی را نشان می‌دهد، مقادیر پارامتر پیکربندی را تغییر می‌دهد و سایر اطلاعات پیکربندی مربوط به سیستم ایمیل Postfix را نشان می‌دهد.

ابزار محلی ارسال، ایمیل‌های ورودی را به صندوق‌های ایمیل کاربران تحویل می‌دهد. برای تنظیم سرویس LMTP مربوط به Dovecot، به عنوان انتقال دهنده پیش فرض ایمیل، دستور زیر را اجرا کنید:

sudo postconf -e "virtual_transport = lmtp:unix:private/dovecot-lmtp"

 

پارامترهای TL را با استفاده از گواهی Let’s encrypt SSL قبلاً تولید شده، تنظیم نمایید:

sudo postconf -e 'smtp_tls_security_level = may'
sudo postconf -e 'smtpd_tls_security_level = may'
sudo postconf -e 'smtp_tls_note_starttls_offer = yes'
sudo postconf -e 'smtpd_tls_loglevel = 1'
sudo postconf -e 'smtpd_tls_received_header = yes'
sudo postconf -e 'smtpd_tls_cert_file = /etc/letsencrypt/live/mail.linuxize.com/fullchain.pem'
sudo postconf -e 'smtpd_tls_key_file = /etc/letsencrypt/live/mail.linuxize.com/privkey.pem'

تنظیمات SMTP تأیید شده را پیکربندی کرده و تأیید اعتبار را به Dovecot بدهید:

sudo postconf -e 'smtpd_sasl_type = dovecot'
sudo postconf -e 'smtpd_sasl_path = private/auth'
sudo postconf -e 'smtpd_sasl_local_domain ='
sudo postconf -e 'smtpd_sasl_security_options = noanonymous'
sudo postconf -e 'broken_sasl_auth_clients = yes'
sudo postconf -e 'smtpd_sasl_auth_enable = yes'
sudo postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'

 

شما همچنین باید فایل پیکربندی master postfix master.cf را ویرایش کرده و پورت ارسال (587) و پورت smtps (یعنی 465) را فعال نمایید.

بدین منظور، فایل را با ویرایشگر متن خود باز کرده و خطوط زیر را از حالت کامنت خارج نمایید:

                 /etc/postfix/master.cf

submission inet n       -       y       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_reject_unlisted_recipient=no
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
#  -o smtpd_recipient_restrictions=
#  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
smtps     inet  n       -       y       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_reject_unlisted_recipient=no
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
#  -o smtpd_recipient_restrictions=
#  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING

به منظور اعمال تغییرات، سرویس postfix را مجدداً راه‌اندازی کنید.

sudo systemctl restart postfix

در این مرحله، شما با موفقیت سرویس Postfix را پیکربندی کرده‌اید.

 

پیکربندی Dovecot

در این بخش باید Dovecot را به گونه‌ای پیکربندی نمایید که با تنظیمات شما مطابقت داشته باشد. مطمئن شوید که تمام خطوط نشان داده شده را از حالت کامنت خارج کرده باشید.

ابتدا فایل dovecot-sql.conf.ext را به صورت زیر پیکربندی کنید تا نحوه دسترسی به پایگاه داده و نحوه یافتن اطلاعات مربوط به حساب‌های ایمیل برای Dovecot تعیین گردد.

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

driver = mysql
connect = host=127.0.0.1 dbname=postfixadmin user=postfixadmin password=P4ssvv0rD
default_pass_scheme = MD5-CRYPT
iterate_query = SELECT username AS user FROM mailbox
user_query = SELECT CONCAT('/var/mail/vmail/',maildir) AS home, \
  CONCAT('maildir:/var/mail/vmail/',maildir) AS mail, \
  5000 AS uid, 5000 AS gid, CONCAT('*:bytes=',quota) AS quota_rule \
  FROM mailbox WHERE username = '%u' AND active = 1
password_query = SELECT username AS user,password FROM mailbox \
  WHERE username = '%u' AND active='1'

فراموش نکنید که از اطلاعات ورود صحیح (نام پایگاه داده، نام کاربر و پسورد) استفاده کنید.

 

سپس، فایل conf.d/10-mail.conf را بصورت زیر ویرایش نمایید:

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

...
mail_location = maildir:/var/mail/vmail/%d/%n
...
mail_uid = vmail
mail_gid = vmail
...
first_valid_uid = 5000
last_valid_uid = 5000
...
mail_privileged_group = vmail
...
mail_plugins = quota
...

برای اینکه کار احراز هویت انجام شود، conf.d/10-auth.conf را باز کنید، خطوط زیر را ویرایش کرده و فایل auth-sql.conf.ext را نیز وارد نمایید:

              /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
...

 

فایل conf.d/10-master.conf را باز کرده و آن را به صورت زیر تغییر دهید:

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

...
service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    mode = 0600
    user = postfix
    group = postfix
  }
...
}
...
service auth {
  ...
  unix_listener auth-userdb {
    mode = 0600
    user = vmail
    group = vmail
  }
  ...
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }
  ...
}
...
service auth-worker {
  user = vmail
}
...
service dict {
  unix_listener dict {
    mode = 0660
    user = vmail
    group = vmail
  }
}
...

conf.d/10-ssl.conf را باز کرده و بصورت زیر، SSL/TLS را فعال نمایید.

             /etc/dovecot/conf.d/10-ssl.conf

...
ssl = yes
...
ssl_cert = </etc/letsencrypt/live/mail.linuxize.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.linuxize.com/privkey.pem
ssl_dh = </etc/ssl/certs/dhparam.pem
...
ssl_cipher_list = EECDH+AES:EDH+AES+aRSA
...
ssl_prefer_server_ciphers = yes
...

مطمئن شوید که مسیر فایل‌های گواهی SSL را به درستی تعیین کرده‌اید تا فایل‌های fullchain.pem، privkey.pem، dhparam.pem به درستی در سرور شما ایجاد شود.

 

فایل conf.d/20-imap.conf را باز کرده و پلاگین imap_quota را فعال نمایید:

                 /etc/dovecot/conf.d/20-imap.conf

...
protocol imap {
  ...
  mail_plugins = $mail_plugins imap_quota
  ...
}
...

فایل conf.d/20-lmtp.conf را باز کرده و آن را به صورت زیر ویرایش کنید:

             /etc/dovecot/conf.d/20-lmtp.conf

...
protocol lmtp {
  postmaster_address = postmaster@linuxize.com
  mail_plugins = $mail_plugins
}
...

 

صندوق‌های ایمیل پیش فرض را در فایل conf.d/20-lmtp.conf به صورت زیر تعریف نمایید:

                     /etc/dovecot/conf.d/15-mailboxes.conf

...
mailbox Drafts {
  special_use = \Drafts
}
mailbox Spam {
  special_use = \Junk
  auto = subscribe
}
mailbox Junk {
  special_use = \Junk
}
...

اندازه quotaها به دو صورت است؛ یکی برای کل دامنه تنظیم شده و دیگری برای هر صندوق ایمیل کاربر.

در بخش قبلی، پشتیبانی qouta در PostfixAdmin فعال شد؛ بدین معنی که اطلاعات qouta در پایگاه داده PostfixAdmin ذخیره می‌شود.

 

به منظور کنترل محدودیت‌های qouta و برای اجرای اسکریپت ارسال ایمیل برای کاربر در زمانی که qouta کاربر از حد مجاز بالاتر رود؛ اکنون باید Dovecot را بگونه‌ای پیکربندی کنید که به پایگاه داده متصل شود. برای این کار، فایل conf.d/90-quota.conf را باز کرده و آن را به صورت زیر تغییر دهید:

                /etc/dovecot/conf.d/90-quota.conf

plugin {
  quota = dict:User quota::proxy::sqlquota
  quota_rule = *:storage=5GB
  quota_rule2 = Trash:storage=+100M
  quota_grace = 10%%
  quota_exceeded_message = Quota exceeded, please contact your system administrator.
  quota_warning = storage=100%% quota-warning 100 %u
  quota_warning2 = storage=95%% quota-warning 95 %u
  quota_warning3 = storage=90%% quota-warning 90 %u
  quota_warning4 = storage=85%% quota-warning 85 %u
}

service quota-warning {
  executable = script /usr/local/bin/quota-warning.sh
  user = vmail

  unix_listener quota-warning {
    group = vmail
  	mode = 0660
  	user = vmail
  }
}

dict {
  sqlquota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext
}

 

شما همچنین باید به dovecot بگویید که چگونه به quota SQL dictionary دسترسی پیدا کند. بدین منظور، فایل dovecot-dict-sql.conf.ext را باز کرده و خطوط زیر را ویرایش نمایید:

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

...
connect = host=127.0.0.1 dbname=postfixadmin user=postfixadmin password=P4ssvv0rD
...
map {
  pattern = priv/quota/storage
  table = quota2
  username_field = username
  value_field = bytes
}
map {
  pattern = priv/quota/messages
  table = quota2
  username_field = username
  value_field = messages
}
...
# map {
#   pattern = shared/expire/$user/$mailbox
#   table = expires
#   value_field = expire_stamp
#
#   fields {
#     username = $user
#     mailbox = $mailbox
#   }
# }
...

اطمینان حاصل کنید که از اطلاعات صحیح (نام پایگاه داده، نام کاربر و پسورد) استفاده کرده‌اید.

 

پس از آن، shell script زیر را ایجاد کنید تا اگر qouta آن از یک حد مشخص گذشت، یک ایمیل به کاربر ارسال نماید:

                      /usr/local/bin/quota-warning.sh

#!/bin/sh
PERCENT=$1
USER=$2
cat << EOF | /usr/lib/dovecot/dovecot-lda -d $USER -o "plugin/quota=dict:User quota::noenforcing:proxy::sqlquota"
From: postmaster@linuxize.com
Subject: Quota warning

Your mailbox is now $PERCENT% full.
EOF

با اجرای دستور chmod زیر، اسکریپت را قابل اجرا کنید:

sudo chmod +x /usr/local/bin/quota-warning.sh

سرانجام سرویس dovecot را مجدداً راه‌اندازی نمایید تا تغییرات اعمال شود.

sudo systemctl restart dovecot

 

 

 

منبع:

linuxize