วิธีกำหนดค่า Postfix และ Dovecot ด้วยผู้ใช้โดเมนเสมือนใน Linux - ตอนที่ 2
ในบทความก่อนหน้าของชุดนี้ เราได้อธิบายวิธีการตั้งค่าและจัดการฐานข้อมูลเมลเซิร์ฟเวอร์อย่างปลอดภัยโดยใช้ phpMyAdmin
ความต้องการ:
- ติดตั้ง Postfix Mail Server และ Dovecot ด้วย MariaDB – ตอนที่ 1
ตอนนี้ถึงเวลากำหนดค่าโปรแกรมภายในที่จะทำให้การส่งและรับอีเมลเป็นจริง: Postfix และ Dovecot (เพื่อจัดการอีเมลขาออกและขาเข้า ตามลำดับ)
การกำหนดค่าเซิร์ฟเวอร์จดหมาย Postfix
ก่อนที่คุณจะเริ่มกำหนดค่า Postfix คุณควรดูหน้าคู่มือที่นี่ โดยเน้นเป็นพิเศษที่หัวข้อ “ข้อมูลสำหรับผู้ใช้ Postfix ใหม่“ . หากคุณทำเช่นนั้น คุณจะพบว่าการปฏิบัติตามบทช่วยสอนนี้ง่ายขึ้น
กล่าวสั้นๆ ก็คือ คุณควรทราบว่ามีไฟล์การกำหนดค่าสองไฟล์สำหรับ Postfix:
- /etc/postfix/main.cf (พารามิเตอร์การกำหนดค่า Postfix โปรดดูรายละเอียดเพิ่มเติมที่ man 5 postconf)
- /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 ตามที่อธิบายไว้ในบทความนี้)