Android

ติดตั้งและกำหนดค่า postfix และ dovecot

Faith Evans feat. Stevie J – "A Minute" [Official Music Video]

Faith Evans feat. Stevie J – "A Minute" [Official Music Video]

สารบัญ:

Anonim

นี่คือการโพสต์ที่สองของการตั้งค่าและการกำหนดค่าชุดเซิร์ฟเวอร์อีเมลของเรา ในบทความนี้เราจะแสดงวิธีการติดตั้งและกำหนดค่า Postfix และ Dovecot ซึ่งเป็นองค์ประกอบหลักสองประการของระบบอีเมลของเรา

Postfix เป็น open-source mail transfer agent (MTA) ซึ่งเป็นบริการที่ใช้ในการส่งและรับอีเมล Dovecot เป็นเซิร์ฟเวอร์ IMAP / POP3 และในการตั้งค่าของเราก็จะจัดการการส่งมอบในท้องถิ่นและการตรวจสอบผู้ใช้

บทช่วยสอนนี้เขียนขึ้นสำหรับ Ubuntu 16.04 แต่ขั้นตอนเดียวกันกับการดัดแปลงเล็กน้อยควรทำงานบน Ubuntu รุ่นใหม่กว่า

ข้อกำหนดเบื้องต้น

ก่อนดำเนินการกับบทช่วยสอนนี้ต่อให้แน่ใจว่าคุณได้เข้าสู่ระบบในฐานะผู้ใช้ที่มีสิทธิ์ sudo

ติดตั้ง Postfix และ Dovecot

แพ็คเกจ Dovecot ในที่เก็บเริ่มต้นของ Ubuntu นั้นล้าสมัยแล้ว เพื่อใช้ประโยชน์จากโมดูล imap_sieve เราจะติดตั้ง Dovecot จากที่เก็บชุมชน Dovecot

เพิ่มที่เก็บคีย์ GPG ลงในพวงกุญแจ apt source ของคุณด้วยคำสั่ง wget ต่อไปนี้:

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 ให้ใช้กล่องจดหมายและโดเมนเสมือน

เริ่มต้นด้วยการสร้างไฟล์กำหนดค่า sql ซึ่งจะแนะนำวิธีการเข้าถึงฐานข้อมูล MySQL ที่สร้างขึ้นในส่วนแรกของชุดนี้

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" 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 โดยใช้ใบรับรอง 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 'smtpd_sasl_local_domain =' sudo postconf -e 'smtpd_sasl_security_options = noanonymous' 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'

นอกจากนี้เราจะต้องแก้ไขไฟล์กำหนดค่าหลักของ 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'

อย่าลืมใช้ข้อมูลรับรอง MySQL ที่ถูกต้อง (dbname ผู้ใช้และรหัสผ่าน)

ถัดไปแก้ไขไฟล์ 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 = Make sure you use the correct path to the SSL certificate files.


If you have followed this series from the beginning, you should already have the fullchain.pem , privkey.pem , dhparam.pem files created on your server. For more information about how to create a free Let's encrypt SSL certificate and Diffie–Hellman key check this tutorial.


Thanks to Nevyn for noticing the problem and providing a solution.
… ssl = yes… ssl_cert = Make sure you use the correct path to the SSL certificate files.


If you have followed this series from the beginning, you should already have the fullchain.pem , privkey.pem , dhparam.pem files created on your server. For more information about how to create a free Let's encrypt SSL certificate and Diffie–Hellman key check this tutorial.


Thanks to Nevyn for noticing the problem and providing a solution.

เปิดไฟล์ 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 = [email protected] 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 }…

มีขนาดโควต้าสองประเภทที่แตกต่างกันหนึ่งรายการถูกตั้งค่าสำหรับทั้งโดเมนและอีกหนึ่งรายการต่อกล่องจดหมายของผู้ใช้ ในส่วนก่อนหน้าของชุดนี้เราได้เปิดใช้งานการสนับสนุนโควต้าใน PostfixAdmin ซึ่งหมายความว่าข้อมูลโควต้าจะถูกเก็บไว้ในฐานข้อมูล PostfixAdmin

ตอนนี้เราต้องกำหนดค่า 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 วิธีการเข้าถึงพจนานุกรมโควต้า SQL เปิดไฟล์ 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 # } # }… ตรวจสอบให้แน่ใจว่าคุณใช้ข้อมูลรับรอง MySQL ที่ถูกต้อง (dbname ผู้ใช้และรหัสผ่าน)

สร้างเชลล์สคริปต์ต่อไปนี้ซึ่งจะส่งอีเมลไปยังผู้ใช้หากโควต้าเกินขีด จำกัด ที่ระบุ:

/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: [email protected] 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

ข้อสรุป

ถึงตอนนี้คุณควรมีระบบเมลที่ใช้งานได้อย่างสมบูรณ์ ในส่วนถัดไปของชุดนี้เราจะแสดงวิธีการติดตั้งและรวม Rspamd

เมลเซิร์ฟเวอร์ postfix dovecot

โพสต์นี้เป็นส่วนหนึ่งของการตั้งค่าและกำหนดค่าเซิร์ฟเวอร์จดหมาย

โพสต์อื่น ๆ ในชุดนี้:

•ตั้งค่าเซิร์ฟเวอร์อีเมลด้วย PostfixAdmin •ติดตั้งและกำหนดค่า Postfix และ Dovecot •ติดตั้งและรวม Rspamd •ติดตั้งและกำหนดค่า Roundcube Webmail