ค้นหาเว็บไซต์

วิธีกำหนดค่า Postfix และ Dovecot ด้วยผู้ใช้โดเมนเสมือนใน Linux - ตอนที่ 2


ในบทความก่อนหน้าของชุดนี้ เราได้อธิบายวิธีการตั้งค่าและจัดการฐานข้อมูลเมลเซิร์ฟเวอร์อย่างปลอดภัยโดยใช้ phpMyAdmin

ความต้องการ:

  1. ติดตั้ง Postfix Mail Server และ Dovecot ด้วย MariaDB – ตอนที่ 1

ตอนนี้ถึงเวลากำหนดค่าโปรแกรมภายในที่จะทำให้การส่งและรับอีเมลเป็นจริง: Postfix และ Dovecot (เพื่อจัดการอีเมลขาออกและขาเข้า ตามลำดับ)

การกำหนดค่าเซิร์ฟเวอร์จดหมาย Postfix

ก่อนที่คุณจะเริ่มกำหนดค่า Postfix คุณควรดูหน้าคู่มือที่นี่ โดยเน้นเป็นพิเศษที่หัวข้อ “ข้อมูลสำหรับผู้ใช้ Postfix ใหม่“ . หากคุณทำเช่นนั้น คุณจะพบว่าการปฏิบัติตามบทช่วยสอนนี้ง่ายขึ้น

กล่าวสั้นๆ ก็คือ คุณควรทราบว่ามีไฟล์การกำหนดค่าสองไฟล์สำหรับ Postfix:

  1. /etc/postfix/main.cf (พารามิเตอร์การกำหนดค่า Postfix โปรดดูรายละเอียดเพิ่มเติมที่ man 5 postconf)
  2. /etc/postfix/master.cf (การกำหนดค่า Postfix master daemon โปรดดูรายละเอียดเพิ่มเติมที่ man 5 master)

ใน /etc/postfix/main.cf ค้นหา (หรือเพิ่ม หากจำเป็น) บรรทัดต่อไปนี้ และตรวจสอบให้แน่ใจว่าบรรทัดเหล่านี้ตรงกับค่าที่ระบุด้านล่าง:


append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
dovecot_destination_recipient_limit = 1
message_size_limit = 4194304
readme_directory = no
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (CentOS)
smtpd_tls_cert_file = /etc/pki/dovecot/certs/dovecot.pem
smtpd_tls_key_file = /etc/pki/dovecot/private/dovecot.pem
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
virtual_transport = dovecot
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

การตั้งค่าสามรายการถัดไปมีความสำคัญเป็นพิเศษ ในไฟล์ที่ระบุด้วยสีเหลือง เราจะกำหนดค่าการเข้าถึงของ Postfix ไปยังตาราง Domains_tbl, Users_tbl และ Alias_tbl:


virtual_mailbox_domains = mysql:/etc/postfix/mariadb-vdomains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mariadb-vusers.cf
virtual_alias_maps = mysql:/etc/postfix/mariadb-valias.cf

โปรดทราบว่าคุณสามารถเลือกชื่อไฟล์ต่างๆ ข้างต้นได้ ตราบใดที่คุณสร้างมันขึ้นมาและแทรกเนื้อหาต่อไปนี้ลงไป ในแต่ละกรณี ให้แทนที่ YourPassword ด้วยรหัสผ่านที่คุณเลือกสำหรับผู้ใช้ dba ใน ส่วนที่ 1 หรือคุณสามารถใช้ MariaDB ได้ด้วย ข้อมูลรับรองรูทสำหรับผู้ใช้และรหัสผ่านด้านล่าง

นอกจากนี้ ตรวจสอบให้แน่ใจว่าคุณใช้ชื่อฐานข้อมูลเซิร์ฟเวอร์อีเมลและตารางที่สร้างใน ส่วนที่ 1 ทุกประการ

ใน /etc/postfix/mariadb-vdomains.cf:


user = dba
password = YourPassword
hosts = 127.0.0.1
dbname = EmailServer_db
query = SELECT 1 FROM Domains_tbl WHERE DomainName='%s'

ใน /etc/postfix/mariadb-vusers.cf:


user = dba
password = YourPassword
hosts = 127.0.0.1
dbname = EmailServer_db
query = SELECT 1 FROM Users_tbl WHERE Email='%s'

ใน /etc/postfix/mariadb-valias.cf:


user = dba
password = YourPassword
hosts = 127.0.0.1
dbname = EmailServer_db
query = SELECT Destination FROM Alias_tbl WHERE Source='%s'

สุดท้ายนี้ อย่าลืมเปลี่ยนสิทธิ์ของไฟล์เหล่านี้เป็น 640:


chmod 640 /etc/postfix/mariadb-vdomains.cf
chmod 640 /etc/postfix/mariadb-vusers.cf
chmod 640 /etc/postfix/mariadb-valias.cf

และความเป็นเจ้าของของผู้ใช้ root และกลุ่ม postfix:


chown root:postfix /etc/postfix/mariadb-vdomains.cf
chown root:postfix /etc/postfix/mariadb-vusers.cf
chown root:postfix /etc/postfix/mariadb-valias.cf

ถัดไป เพื่อเปิดใช้งานการเชื่อมต่อที่ปลอดภัย เราจำเป็นต้องตรวจสอบให้แน่ใจว่าการตั้งค่าต่อไปนี้ไม่ได้ใส่เครื่องหมายข้อคิดเห็น (หรือเพิ่ม หากจำเป็น) ใน /etc/postfix/master.cf:


submission inet n       -       n       -       -       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_recipient_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
pickup    unix  n       -       n       60      1       pickup
cleanup   unix  n       -       n       -       0       cleanup
qmgr      unix  n       -       n       300     1       qmgr
tlsmgr    unix  -       -       n       1000?   1       tlsmgr
rewrite   unix  -       -       n       -       -       trivial-rewrite
bounce    unix  -       -       n       -       0       bounce
defer     unix  -       -       n       -       0       bounce
trace     unix  -       -       n       -       0       bounce
verify    unix  -       -       n       -       1       verify
flush     unix  n       -       n       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
proxywrite unix -       -       n       -       1       proxymap
smtp      unix  -       -       n       -       -       smtp
relay     unix  -       -       n       -       -       smtp

showq     unix  n       -       n       -       -       showq
error     unix  -       -       n       -       -       error
retry     unix  -       -       n       -       -       error
discard   unix  -       -       n       -       -       discard
local     unix  -       n       n       -       -       local
#virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       n       -       -       lmtp
anvil     unix  -       -       n       -       1       anvil
scache    unix  -       -       n       -       1       scache

หมายเหตุ: การเยื้องในบรรทัดที่ขึ้นต้นด้วยตัวเลือก -o ถือเป็นเรื่องสำคัญ มิฉะนั้นการตรวจสอบ postfix จะส่งคืนข้อผิดพลาด:

ก่อนที่คุณจะบันทึกการเปลี่ยนแปลง ให้เพิ่มบรรทัดต่อไปนี้ที่ด้านล่างของไฟล์:


dovecot   unix  -       n       n       -       -       pipe
    flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}

ณ จุดนี้ จำเป็นต้องตรวจสอบว่า Postfix มีสิทธิ์เข้าถึงตารางฐานข้อมูลและโดเมน บัญชี และนามแฝงที่เราสร้างใน ส่วนที่ 1 หรือไม่

ในการทำเช่นนั้น เราจะใช้คำสั่ง postmap ซึ่งเป็นยูทิลิตีเพื่อทดสอบการสื่อสารกับตารางที่ Postfix จะค้นหาระหว่างการดำเนินการ แต่ก่อนอื่นเราจะต้องรีสตาร์ท postfix:


systemctl postfix restart
postmap -q linuxnewz.com mysql:/etc/postfix/mariadb-vdomains.cf
postmap -q someotherdomain.com mysql:/etc/postfix/mariadb-vdomains.cf
postmap -q [email  mysql:/etc/postfix/mariadb-vusers.cf
postmap -q [email  mysql:/etc/postfix/mariadb-vusers.cf
postmap -q [email  mysql:/etc/postfix/mariadb-vusers.cf
postmap -q [email  mysql:/etc/postfix/mariadb-valias.cf

ในภาพด้านล่าง เราจะเห็นว่าสำหรับบันทึกที่มีอยู่ในฐานข้อมูล จะมีการส่งคืน 1 มิฉะนั้นจะไม่มีอะไรแสดงกลับไปที่หน้าจอ ในกรณีของการตรวจสอบนามแฝง โปรดทราบว่าบัญชีอีเมลจริงที่เชื่อมโยงกับนามแฝงจะถูกส่งคืน:

โปรดทราบว่าเราไม่ตรวจสอบสิทธิ์กับข้อมูลประจำตัวที่ตั้งไว้สำหรับบัญชีอีเมลแต่ละบัญชี เรากำลังทดสอบความสามารถของ Postfix เท่านั้นในการตรวจหาบันทึกเหล่านั้นในฐานข้อมูล

ดังนั้น หากคุณได้รับผลลัพธ์ที่แตกต่างจากด้านบน ตรวจสอบให้แน่ใจว่าคุณใช้คู่ผู้ใช้/รหัสผ่านที่ถูกต้องใน mariadb-vdomains.cf, mariadb-vusers.cf และ mariadb-valias.cf (หรืออะไรก็ตามที่คุณเลือกเรียกไฟล์เหล่านั้น)

การกำหนดค่า Dovecot

ในฐานะเซิร์ฟเวอร์ IMAP/POP3 Dovecot จัดเตรียมวิธีการสำหรับผู้ใช้ผ่าน Mail User Agent (MUA หรือ หรือที่เรียกว่าไคลเอนต์) เช่น Thunderbird หรือ Outlook เพื่อตั้งชื่อตัวอย่างบางส่วนในการเข้าถึงเมลของพวกเขา

ในการเริ่มต้น เรามาสร้างผู้ใช้และกลุ่มเพื่อจัดการอีเมล (เราต้องการสิ่งนี้เนื่องจากบัญชีอีเมลของเราไม่ได้เชื่อมโยงกับผู้ใช้ระบบ) คุณสามารถใช้ UID และ GID อื่นได้ (นอกเหนือจาก 5000 ตามที่เราทำด้านล่าง) ตราบใดที่ไม่ได้ใช้งานและเป็นตัวเลขที่สูง:


groupadd -g 5000 vmail 
useradd -g vmail -u 5000 vmail -d /home/vmail -m

การตั้งค่าสำหรับ Dovecot จะแบ่งออกเป็นไฟล์การกำหนดค่าหลายไฟล์ (ตรวจสอบให้แน่ใจว่าบรรทัดต่อไปนี้ไม่ได้ใส่เครื่องหมายข้อคิดเห็นและ/หรือแก้ไขให้ตรงกับการตั้งค่าที่ระบุด้านล่าง)

ใน /etc/dovecot/dovecot.conf:


!include_try /usr/share/dovecot/protocols.d/*.protocol
protocols = imap pop3 lmtp
!include conf.d/*.conf
!include_try local.conf

ใน /etc/dovecot/conf.d/10-auth.conf (เปิดใช้งานการตรวจสอบสิทธิ์ผ่าน SQL เท่านั้นและปล่อยให้วิธีการตรวจสอบสิทธิ์อื่น ๆ ใส่เครื่องหมายความคิดเห็น):


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

ใน /etc/dovecot/conf.d/auth-sql.conf.ext (โปรดทราบว่าเราจะจัดเก็บอีเมลภายในไดเรกทอรีชื่อ yourdomain.com ภายใน / home/vmail ซึ่งคุณต้องสร้างหากไม่มีอยู่ ในกรณีของเรา เราใช้ mkdir /home/vmail/linuxnewz.com เพื่อจัดการอีเมลสำหรับโดเมนนั้น):


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

กล่องขาเข้าส่วนบุคคลสำหรับบัญชีผู้ใช้จะถูกสร้างขึ้นเมื่อได้รับอีเมลสำหรับบัญชีดังกล่าวเป็นครั้งแรก

ใน /etc/dovecot/conf.d/10-mail.conf:


mail_location = maildir:/home/vmail/%d/%n/Maildir
namespace inbox {
  inbox = yes
}
mail_privileged_group = mail
mbox_write_locks = fcntl

ใน /etc/dovecot/conf.d/10-master.conf:


service imap-login {
  inet_listener imap {
    port = 143
  }
  inet_listener imaps {
  }
}
service pop3-login {
  inet_listener pop3 {
    port = 110
  }
  inet_listener pop3s {
  }
}
service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
   mode = 0600
   user = postfix
   group = postfix
  }
}
service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }
  unix_listener auth-userdb {
   mode = 0600
   user = vmail
  }
  user = dovecot
}
service auth-worker {
  user = vmail
}
service dict {
  unix_listener dict {
  }
}

ใน /etc/dovecot/conf.d/10-ssl.conf (แทนที่ใบรับรองและเส้นทางคีย์หากคุณวางแผนที่จะใช้ใบรับรองที่ลงนามโดย CA):


ssl = required
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem

ใน /etc/dovecot/dovecot-sql.conf.ext ให้ป้อนข้อมูลฐานข้อมูลของคุณและข้อมูลรับรองของผู้ใช้ที่เป็นผู้ดูแลระบบที่สร้างขึ้นใน ส่วนที่ 1

ข้อสำคัญ: หากรหัสผ่านของคุณมีเครื่องหมายดอกจัน (#) คุณจะต้องใส่สตริงการเชื่อมต่อตามที่ระบุไว้ในตัวอย่างด้านล่าง:


driver = mysql
connect = "host=127.0.0.1 dbname=EmailServer_db user=dba password=PassWith#Here"
default_pass_scheme = SHA512-CRYPT
password_query = SELECT Email as User, password FROM Users_tbl WHERE Email='%u';

นอกจากนี้ คุณยังสามารถกำหนดค่าการบันทึกสำหรับ Dovecot ให้แยกจาก Postfix ใน /etc/dovecot/conf.d/10-logging.conf:


log_path = /var/log/dovecot.log

สุดท้าย ตรวจสอบให้แน่ใจว่าผู้ใช้ dovecot สามารถเข้าถึงบันทึก Dovecot ได้:


chown vmail:dovecot /var/log/dovecot.log
chmod 660 /var/log/dovecot.log

ตรวจสอบและแก้ไขการกำหนดค่า Postifix และเปิดใช้งาน SMTP, POP3 และ IMAP ในไฟร์วอลล์

หากคุณประสบปัญหาใดๆ ขณะกำหนดค่า Postfix และ/หรือ Dovecot แทนที่จะส่งไฟล์การกำหนดค่าทั้งหมดเพื่อขอความช่วยเหลือ คุณจะได้รับสรุปการกำหนดค่า (เฉพาะบรรทัดที่ไม่มีเครื่องหมายข้อคิดเห็น) พร้อมด้วย:


postconf –n # Summary for /etc/postfix/main.cf
postconf –M # Summary for /etc/postfix/master.cf
doveconf –n # Summary of all configuration files for Dovecot

นอกจากนี้ ตรวจสอบให้แน่ใจว่า vmail เท่านั้นที่อ่านกล่องจดหมายอีเมลได้:


chown –R vmail:vmail /home/vmail

ไฟล์การกำหนดค่าควรอ่านได้โดยผู้ใช้ vmail และ dovecot:


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

สุดท้าย ตรวจสอบให้แน่ใจว่าคุณเปิดใช้งาน SMTP, POP3 และ IMAP ผ่านไฟร์วอลล์:


firewall-cmd --add-port=143/tcp
firewall-cmd --add-port=143/tcp --permanent
firewall-cmd --add-port=110/tcp
firewall-cmd --add-port=110/tcp --permanent
firewall-cmd --add-port=587/tcp
firewall-cmd --add-port=587/tcp --permanent

กำหนดค่า Thunderbird เป็นไคลเอนต์อีเมลสำหรับ Postfix

ด้วยการเข้าถึงที่ปลอดภัยผ่านไฟร์วอลล์สำหรับพอร์ตที่ใช้ในการสื่อสารทางอีเมล ก็ถึงเวลากำหนดค่าไคลเอนต์อีเมล การใช้ [email และรหัสผ่านที่เกี่ยวข้อง พร้อมด้วย mail.linuxnewz.com เป็น IMAP (หรือ POP3) และเซิร์ฟเวอร์ SMTP เราพร้อมที่จะเริ่มส่งและรับอีเมลไป และจากบัญชีดังกล่าว:

คุณสามารถเพิกเฉยต่อข้อความเตือนที่แสดงได้อย่างปลอดภัย เนื่องจากคุณกำลังใช้ใบรับรองที่ไม่ได้ลงนามโดย CA บุคคลที่สามที่เชื่อถือได้:

มาเขียนอีเมลทดสอบสั้นๆ แล้วคลิกส่ง:

เมื่อได้รับแจ้งให้ยอมรับใบรับรองที่ลงนามเองสำหรับเซิร์ฟเวอร์ขาออก ให้ยืนยันก่อนหน้านี้เหมือนเมื่อก่อน:

สุดท้าย ไปที่อีเมลปลายทางเพื่อดูว่าคุณได้รับอีเมลที่เพิ่งส่งไปหรือไม่ หากเป็นเช่นนั้น ให้ตอบกลับและดูว่ามีการส่งคืนไปยังกล่องจดหมายอีเมลต้นทางหรือไม่ (มิฉะนั้น โปรดดูบันทึก Postfix ที่ /var/log/maillog หรือบันทึก Dovecot ที่ /var /log/dovecot.log สำหรับข้อมูลการแก้ไขปัญหา):

ขณะนี้คุณมีเซิร์ฟเวอร์อีเมล Postfix และ Dovecot ที่ใช้งานได้และสามารถเริ่มส่งและรับอีเมลได้

สรุป

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

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

หากหลังจากอ่านเอกสารแล้ว คุณพบว่าตัวเองยังคงประสบปัญหากับ Postfix และ/หรือ Dovecot โปรดส่งข้อความถึงเราโดยใช้แบบฟอร์มแสดงความคิดเห็นด้านล่าง และเรายินดีที่จะ ช่วยคุณ (อย่าลืมอัปโหลดการกำหนดค่า Postfix และ Dovecot ไปยังบริการจัดเก็บข้อมูลออนไลน์ตามที่ดึงมาโดยใช้ postconf และ doveconf ตามที่อธิบายไว้ในบทความนี้)