ผลต่างระหว่างรุ่นของ "คู่มือการพัฒนา EAI Mail Server บน CentOS 8"
Photchanan (คุย | มีส่วนร่วม) |
Photchanan (คุย | มีส่วนร่วม) |
||
(ไม่แสดง 6 รุ่นระหว่างกลางโดยผู้ใช้คนเดียวกัน) | |||
แถว 1: | แถว 1: | ||
+ | <languages/> | ||
+ | <translate> | ||
+ | = EAI Email Server = <!--T:1--> | ||
− | + | <!--T:2--> | |
− | |||
คู่มือนี้ได้จัดทำขึ้นมาเพื่อทดสอบและเป็นแนวทางการติดตั้ง Email Server ให้สามารถรับส่ง email address ภาษาไทย หรือ Email Address Internationalization (EAI) โดยใช้ Opensource Software เพื่อหาวิธีการที่สามารถใช้งานได้ และสามารถนำไปพัฒนาต่อยอดได้ | คู่มือนี้ได้จัดทำขึ้นมาเพื่อทดสอบและเป็นแนวทางการติดตั้ง Email Server ให้สามารถรับส่ง email address ภาษาไทย หรือ Email Address Internationalization (EAI) โดยใช้ Opensource Software เพื่อหาวิธีการที่สามารถใช้งานได้ และสามารถนำไปพัฒนาต่อยอดได้ | ||
− | + | == Software ที่นำมาทดสอบ == <!--T:3--> | |
# CentOS8 for Virtualbox [[https://1drv.ms/u/s!AkENbjQNPN9dy8AAKqY20RgAWj7sxw?e=TZPQxS CentOS for VirtualBox]] | # CentOS8 for Virtualbox [[https://1drv.ms/u/s!AkENbjQNPN9dy8AAKqY20RgAWj7sxw?e=TZPQxS CentOS for VirtualBox]] | ||
#* user: root | #* user: root | ||
แถว 18: | แถว 20: | ||
# Roundcube 1.4.x [[https://roundcube.net/download/ ดาวน์โหลด]] [[https://github.com/roundcube/roundcubemail/releases/download/1.4.11/roundcubemail-1.4.11-complete.tar.gz tar]] | # Roundcube 1.4.x [[https://roundcube.net/download/ ดาวน์โหลด]] [[https://github.com/roundcube/roundcubemail/releases/download/1.4.11/roundcubemail-1.4.11-complete.tar.gz tar]] | ||
+ | <!--T:4--> | ||
* ข้อ 1, 2, 3, 4, 5 แนะนำให้ติดตั้งเตรียมไว้ก่อนอบรม | * ข้อ 1, 2, 3, 4, 5 แนะนำให้ติดตั้งเตรียมไว้ก่อนอบรม | ||
− | + | == ขั้นตอนการติดตั้ง CentOS8 for Virtualbox == <!--T:5--> | |
# ดาวน์โหลดและติดตั้ง VirtualBox และ VirtualBox Extension Pack | # ดาวน์โหลดและติดตั้ง VirtualBox และ VirtualBox Extension Pack | ||
# ดาวน์โหลดไฟล์ CentOS8 for Virtualbox (centos-eai-wokshop.ova) ที่จัดเตรียมไว้ให้ตามลิงค์ด้านบน | # ดาวน์โหลดไฟล์ CentOS8 for Virtualbox (centos-eai-wokshop.ova) ที่จัดเตรียมไว้ให้ตามลิงค์ด้านบน | ||
# ดับเบิ้ลคลิ๊กที่ไฟล์ centos-eai-wokshop.ova เพื่อ import เข้าโปรแกรม Virtualbox [https://kon.in.th/%E0%B8%A7%E0%B8%B4%E0%B8%81%E0%B8%B4/1.png] | # ดับเบิ้ลคลิ๊กที่ไฟล์ centos-eai-wokshop.ova เพื่อ import เข้าโปรแกรม Virtualbox [https://kon.in.th/%E0%B8%A7%E0%B8%B4%E0%B8%81%E0%B8%B4/1.png] | ||
# หลังจาก import เสร็จเรียบร้อยแล้ว ที่โปรแกรม VirtualBox ให้ดับเบิ้ลคลิ๊กที่ centos-eai-wokshop ด้านซ้ายมือ เพื่อเปิด server | # หลังจาก import เสร็จเรียบร้อยแล้ว ที่โปรแกรม VirtualBox ให้ดับเบิ้ลคลิ๊กที่ centos-eai-wokshop ด้านซ้ายมือ เพื่อเปิด server | ||
− | # ถ้าพบข้อผิดพลาด "ไม่สามารถเริ่มการทำงานเครื่อง centos-eai-workshop เนื่องจากไม่พบแผงวงจรเครือข่าย" | + | # ถ้าพบข้อผิดพลาด "ไม่สามารถเริ่มการทำงานเครื่อง centos-eai-workshop เนื่องจากไม่พบแผงวงจรเครือข่าย" ให้กด "เปลี่ยนการติดตั้งเครือข่าย" จะขึ้นหน้าเปลี่ยนเครือข่าย ให้กด "ตกลง" [https://kon.in.th/%E0%B8%A7%E0%B8%B4%E0%B8%81%E0%B8%B4/2.png] |
− | |||
# เมื่อเปิดเครื่องได้แล้ว ให้ login ด้วย user, pass ที่เตรียมไว้ให้ข้างต้น และใช้คำสั่ง "ifconfig" เพื่อตรวจสอบ IP ของเครื่อง [https://kon.in.th/%E0%B8%A7%E0%B8%B4%E0%B8%81%E0%B8%B4/3.png] | # เมื่อเปิดเครื่องได้แล้ว ให้ login ด้วย user, pass ที่เตรียมไว้ให้ข้างต้น และใช้คำสั่ง "ifconfig" เพื่อตรวจสอบ IP ของเครื่อง [https://kon.in.th/%E0%B8%A7%E0%B8%B4%E0%B8%81%E0%B8%B4/3.png] | ||
# ให้จด IP นี้ไว้ใช้สำหรับ ssh เข้าเครื่อง Server ของเราในการทำงาน workshop (*แต่ละเครื่องจะได้ IP แตกต่างกัน) | # ให้จด IP นี้ไว้ใช้สำหรับ ssh เข้าเครื่อง Server ของเราในการทำงาน workshop (*แต่ละเครื่องจะได้ IP แตกต่างกัน) | ||
(สำหรับเครื่อง mac ต้อง allow ให้ virtualbox ทำงานได้ตามนี้ [https://kon.in.th/%E0%B8%A7%E0%B8%B4%E0%B8%81%E0%B8%B4/4.png]) | (สำหรับเครื่อง mac ต้อง allow ให้ virtualbox ทำงานได้ตามนี้ [https://kon.in.th/%E0%B8%A7%E0%B8%B4%E0%B8%81%E0%B8%B4/4.png]) | ||
− | + | <!--T:6--> | |
+ | * หมายเหตุ | ||
: คู่มือนี้ไม่ได้อธิบายถึงการติดตั้ง Centos 8 | : คู่มือนี้ไม่ได้อธิบายถึงการติดตั้ง Centos 8 | ||
: Postfix ต้องเป็น Version 3.x.x ขึ้นไป จะรองรับ EAI | : Postfix ต้องเป็น Version 3.x.x ขึ้นไป จะรองรับ EAI | ||
: หากจะนำไปใช้งานจริงจะต้องจดทะเบียนโดเมน และมี dns server ด้วย | : หากจะนำไปใช้งานจริงจะต้องจดทะเบียนโดเมน และมี dns server ด้วย | ||
− | = การติดตั้ง EAI Email Server = | + | = การติดตั้ง EAI Email Server = <!--T:7--> |
− | |||
− | |||
− | == | + | == 1. ตั้งค่า hostname == <!--T:8--> |
+ | <!--T:9--> | ||
1. อัพเดตแพคเกจของ mail serverให้เป็นเวอร์ชั่นล่าสุด ด้วยคำสั่ง | 1. อัพเดตแพคเกจของ mail serverให้เป็นเวอร์ชั่นล่าสุด ด้วยคำสั่ง | ||
'''# yum -y update''' | '''# yum -y update''' | ||
+ | <!--T:10--> | ||
2. กำหนดชื่อ hostname ในตัวอย่างนี้กำหนดชื่อว่า mail.eai.in.th ด้วยคำสั่ง | 2. กำหนดชื่อ hostname ในตัวอย่างนี้กำหนดชื่อว่า mail.eai.in.th ด้วยคำสั่ง | ||
'''# hostnamectl set-hostname ''[[mail.eai.in.th]]''''' | '''# hostnamectl set-hostname ''[[mail.eai.in.th]]''''' | ||
+ | <!--T:11--> | ||
3. เพิ่มค่า hostname ชื่อเดียวกับชื่อที่กำหนดข้างต้นในไฟล์ hosts | 3. เพิ่มค่า hostname ชื่อเดียวกับชื่อที่กำหนดข้างต้นในไฟล์ hosts | ||
'''# vi /etc/hosts''' | '''# vi /etc/hosts''' | ||
+ | <!--T:12--> | ||
''ตัวอย่างไฟล์ hosts'' | ''ตัวอย่างไฟล์ hosts'' | ||
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 '''''[[mail.eai.in.th]]''''' | 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 '''''[[mail.eai.in.th]]''''' | ||
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 '''''[[mail.eai.in.th]]''''' | ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 '''''[[mail.eai.in.th]]''''' | ||
+ | <!--T:13--> | ||
''*ระวัง envelopment ของทาง partner ว่าติดตั้ง centos ในรูปแบบใดมาให้ (อาจจะต้องติดตั้ง service เพิ่ม หากติดตั้งมาแบบ minimal เช่นใช้คำสั่ง vi ไม่ได้)'' | ''*ระวัง envelopment ของทาง partner ว่าติดตั้ง centos ในรูปแบบใดมาให้ (อาจจะต้องติดตั้ง service เพิ่ม หากติดตั้งมาแบบ minimal เช่นใช้คำสั่ง vi ไม่ได้)'' | ||
+ | <!--T:14--> | ||
4. ติดตั้ง wget เพื่อใช้ดาวน์โหลดซอฟแวร์ที่จำเป็นต้องใช้งานเพิ่ม | 4. ติดตั้ง wget เพื่อใช้ดาวน์โหลดซอฟแวร์ที่จำเป็นต้องใช้งานเพิ่ม | ||
'''# yum -y install wget''' | '''# yum -y install wget''' | ||
+ | <!--T:15--> | ||
5. ติดตั้ง telnet เพื่อทดสอบการทำงานของ email server | 5. ติดตั้ง telnet เพื่อทดสอบการทำงานของ email server | ||
'''# yum -y install telnet''' | '''# yum -y install telnet''' | ||
− | == | + | == 2. ตั้งค่า firewall == <!--T:16--> |
1. ตรวจสอบสถานะ firewalld service บน mail server | 1. ตรวจสอบสถานะ firewalld service บน mail server | ||
*ต้องมีสถานะ active (running) | *ต้องมีสถานะ active (running) | ||
− | '''# systemctl status firewalld''' | + | <!--T:17--> |
+ | '''# systemctl status firewalld''' | ||
+ | <!--T:18--> | ||
''ตัวอย่าง'' | ''ตัวอย่าง'' | ||
− | '''Active: <span style='color:red'>active (running)</span> since Mon 2019-11-18 14:12:03 +07; 1h 13min ago''' | + | <!--T:19--> |
+ | '''Active: <span style='color:red'>active (running)</span> since Mon 2019-11-18 14:12:03 +07; 1h 13min ago''' | ||
+ | <!--T:20--> | ||
2. ตรวจสอบ firewall zone และ network interface ที่เปิดอยู่ | 2. ตรวจสอบ firewall zone และ network interface ที่เปิดอยู่ | ||
'''# firewall-cmd --get-active-zones''' | '''# firewall-cmd --get-active-zones''' | ||
แถว 79: | แถว 91: | ||
'''interfaces: ens32 | '''interfaces: ens32 | ||
+ | <!--T:21--> | ||
3. ตรวจสอบรายการ services ของ firewall ที่เปิดอยู่ที่ zone public | 3. ตรวจสอบรายการ services ของ firewall ที่เปิดอยู่ที่ zone public | ||
'''# firewall-cmd --zone=public --list-services''' | '''# firewall-cmd --zone=public --list-services''' | ||
+ | <!--T:22--> | ||
''ตัวอย่าง'' | ''ตัวอย่าง'' | ||
''' cockpit dhcpv6-client ssh ''' | ''' cockpit dhcpv6-client ssh ''' | ||
+ | <!--T:23--> | ||
4. เปิด firewall services ที่ zone public ของ mail server (สามารถเปิดเท่าต้องการได้) | 4. เปิด firewall services ที่ zone public ของ mail server (สามารถเปิดเท่าต้องการได้) | ||
'''# firewall-cmd --permanent --zone=public --add-service={http,https,mysql,smtp,smtps,imap,imaps} | '''# firewall-cmd --permanent --zone=public --add-service={http,https,mysql,smtp,smtps,imap,imaps} | ||
'''# firewall-cmd --reload | '''# firewall-cmd --reload | ||
+ | <!--T:24--> | ||
5. ตรวจสอบรายการ services ของ firewall ที่เปิดอยู่ที่ zone public อีกครั้ง จะพบ services เปิดเพิ่มขึ้นมา | 5. ตรวจสอบรายการ services ของ firewall ที่เปิดอยู่ที่ zone public อีกครั้ง จะพบ services เปิดเพิ่มขึ้นมา | ||
+ | <!--T:25--> | ||
''*ref: configure firewall services for mail server (https://spalinux.com/2015/06/centos-7-basic-configure-firewall-by-firewall-cmd)'' | ''*ref: configure firewall services for mail server (https://spalinux.com/2015/06/centos-7-basic-configure-firewall-by-firewall-cmd)'' | ||
'''# firewall-cmd --zone=public --list-services''' | '''# firewall-cmd --zone=public --list-services''' | ||
+ | <!--T:26--> | ||
''ตัวอย่าง'' | ''ตัวอย่าง'' | ||
''' cockpit dhcpv6-client <span style='color:red'>http https imap imaps mysql smtp smtps</span> ssh ''' | ''' cockpit dhcpv6-client <span style='color:red'>http https imap imaps mysql smtp smtps</span> ssh ''' | ||
+ | <!--T:27--> | ||
6. ในตัวอย่างนี้เราแนะนำให้ปิดการทำงานของ SELinux เพื่อความสะดวกในการตั้งค่า (ไม่แนะนำให้ทำกับเครื่อง production) | 6. ในตัวอย่างนี้เราแนะนำให้ปิดการทำงานของ SELinux เพื่อความสะดวกในการตั้งค่า (ไม่แนะนำให้ทำกับเครื่อง production) | ||
*เปลี่ยน SELinux=enforcing เป็น SELinux=disabled | *เปลี่ยน SELinux=enforcing เป็น SELinux=disabled | ||
'''# vi /etc/selinux/config''' | '''# vi /etc/selinux/config''' | ||
+ | <!--T:28--> | ||
''ตัวอย่าง'' | ''ตัวอย่าง'' | ||
− | '''# This file controls the state of SELinux on the system. | + | <!--T:29--> |
+ | '''# This file controls the state of SELinux on the system. | ||
'''# SELINUX= can take one of these three values: | '''# SELINUX= can take one of these three values: | ||
'''# enforcing - SELinux security policy is enforced. | '''# enforcing - SELinux security policy is enforced. | ||
แถว 119: | แถว 140: | ||
'''# sestatus''' | '''# sestatus''' | ||
+ | <!--T:30--> | ||
''ตัวอย่าง'' | ''ตัวอย่าง'' | ||
− | ''' disabled ''' | + | <!--T:31--> |
+ | ''' disabled ''' | ||
− | == | + | == 3. สร้าง SSL Cert == <!--T:32--> |
*เป็นขั้นตอนการสร้าง SSL key เตรียมไว้ใช้งานกับ postfix และ dovecot | *เป็นขั้นตอนการสร้าง SSL key เตรียมไว้ใช้งานกับ postfix และ dovecot | ||
1. สร้าง private key | 1. สร้าง private key | ||
แถว 129: | แถว 152: | ||
'''# /usr/bin/openssl genrsa -aes128 2048 > '''[[eai.key]]''' | '''# /usr/bin/openssl genrsa -aes128 2048 > '''[[eai.key]]''' | ||
+ | <!--T:33--> | ||
'' ตัวอย่าง '' | '' ตัวอย่าง '' | ||
'''Generating RSA private key, 2048 bit long modulus | '''Generating RSA private key, 2048 bit long modulus | ||
แถว 137: | แถว 161: | ||
'''Verifying - Enter pass phrase: '''[[#confirm]]''' | '''Verifying - Enter pass phrase: '''[[#confirm]]''' | ||
+ | <!--T:34--> | ||
2. ถอด Passphase ออกจาก private key ที่สร้างขึ้น | 2. ถอด Passphase ออกจาก private key ที่สร้างขึ้น | ||
'''# /usr/bin/openssl rsa -in '''[[eai.key]]''' -out '''[[eai.key]]''' | '''# /usr/bin/openssl rsa -in '''[[eai.key]]''' -out '''[[eai.key]]''' | ||
+ | <!--T:35--> | ||
'' ตัวอย่าง '' | '' ตัวอย่าง '' | ||
− | '''Enter pass phrase for eai.key: '''[[#input passphrase]]''' | + | <!--T:36--> |
+ | '''Enter pass phrase for eai.key: '''[[#input passphrase]]''' | ||
'''writing RSA key''' | '''writing RSA key''' | ||
+ | <!--T:37--> | ||
3. สร้าง csr | 3. สร้าง csr | ||
'''# /usr/bin/openssl req -utf8 -new -key '''[[eai.key]]''' -out '''[[eai.csr]]''' | '''# /usr/bin/openssl req -utf8 -new -key '''[[eai.key]]''' -out '''[[eai.csr]]''' | ||
+ | <!--T:38--> | ||
'' ตัวอย่าง '' | '' ตัวอย่าง '' | ||
'''You are about to be asked to enter information that will be incorporated | '''You are about to be asked to enter information that will be incorporated | ||
แถว 168: | แถว 197: | ||
'''An optional company name []: '''[[#Enter]]''' | '''An optional company name []: '''[[#Enter]]''' | ||
+ | <!--T:39--> | ||
4. ทำการ generate key | 4. ทำการ generate key | ||
'''# /usr/bin/openssl x509 -in '''[[eai.csr]]''' -out '''[[eai.crt]]''' -req -signkey '''[[eai.key]]''' -days 365''' | '''# /usr/bin/openssl x509 -in '''[[eai.csr]]''' -out '''[[eai.crt]]''' -req -signkey '''[[eai.key]]''' -days 365''' | ||
+ | <!--T:40--> | ||
'' ตัวอย่าง '' | '' ตัวอย่าง '' | ||
− | '''Signature ok | + | <!--T:41--> |
+ | '''Signature ok | ||
'''subject=/C=JP/ST=Hiroshima/L=Hiroshima/O=GTS/OU=Server World/CN=www.srv.world/emailAddress=xxx@eai.in.th | '''subject=/C=JP/ST=Hiroshima/L=Hiroshima/O=GTS/OU=Server World/CN=www.srv.world/emailAddress=xxx@eai.in.th | ||
'''Getting Private key''' | '''Getting Private key''' | ||
− | == | + | == 4. ติดตั้ง mariadb, postfix, dovecot == <!--T:42--> |
1. ติดตั้ง mariadb , Postfix , Dovecot และ Packet ที่จำเป็นกับ Server | 1. ติดตั้ง mariadb , Postfix , Dovecot และ Packet ที่จำเป็นกับ Server | ||
'''# yum -y install postfix dovecot mariadb-server dovecot-mysql postfix-mysql''' | '''# yum -y install postfix dovecot mariadb-server dovecot-mysql postfix-mysql''' | ||
+ | <!--T:43--> | ||
2. สั่ง start service ของ postfix, dovecot, mariadb ทุกครั้งที่เปิด Server | 2. สั่ง start service ของ postfix, dovecot, mariadb ทุกครั้งที่เปิด Server | ||
'''# systemctl start postfix && systemctl start dovecot && systemctl start mariadb''' | '''# systemctl start postfix && systemctl start dovecot && systemctl start mariadb''' | ||
'''# systemctl enable postfix && systemctl enable dovecot && systemctl enable mariadb''' | '''# systemctl enable postfix && systemctl enable dovecot && systemctl enable mariadb''' | ||
+ | <!--T:44--> | ||
3. ดูสถานะการทำงานของ postfix, dovecot, maridb | 3. ดูสถานะการทำงานของ postfix, dovecot, maridb | ||
'''# systemctl status postfix''' | '''# systemctl status postfix''' | ||
แถว 191: | แถว 225: | ||
'''# systemctl status mariadb''' | '''# systemctl status mariadb''' | ||
− | == | + | == 5. ตั้งค่า mariadb == <!--T:45--> |
1. ตั้งค่า UTF8 ให้กับ mysql เพื่อให้รองรับภาษาไทย โดยเพิ่มคำสั่งด้าล่างลงใน /etc/my.cnf.d/maridb-server.cnf ใต้ [mysqld] | 1. ตั้งค่า UTF8 ให้กับ mysql เพื่อให้รองรับภาษาไทย โดยเพิ่มคำสั่งด้าล่างลงใน /etc/my.cnf.d/maridb-server.cnf ใต้ [mysqld] | ||
'''# vi /etc/my.cnf.d/mariadb-server.cnf''' | '''# vi /etc/my.cnf.d/mariadb-server.cnf''' | ||
− | # | + | <!--T:46--> |
+ | # | ||
# These groups are read by MariaDB server. | # These groups are read by MariaDB server. | ||
# Use it for options that only the server (but not clients) should see | # Use it for options that only the server (but not clients) should see | ||
แถว 247: | แถว 282: | ||
[mariadb-10.3] | [mariadb-10.3] | ||
+ | <!--T:47--> | ||
2. สั่ง restart mariadb | 2. สั่ง restart mariadb | ||
'''# systemctl restart mariadb''' | '''# systemctl restart mariadb''' | ||
+ | <!--T:48--> | ||
3. ตั้งค่าความปลอดภัยการเข้างาน mysql โดยจะมีการตั้ง password ของ root user เพื่อ login เข้าใช้งาน (*กำหนดเพียง password ใหม่ และในส่วนอื่นๆให้ enter ผ่านได้เลย) | 3. ตั้งค่าความปลอดภัยการเข้างาน mysql โดยจะมีการตั้ง password ของ root user เพื่อ login เข้าใช้งาน (*กำหนดเพียง password ใหม่ และในส่วนอื่นๆให้ enter ผ่านได้เลย) | ||
'''# mysql_secure_installation''' | '''# mysql_secure_installation''' | ||
+ | <!--T:49--> | ||
4. Login ข้าใช้งาน mysql โดยใช้ password ของ root user ที่ได้ตั้งไว้ | 4. Login ข้าใช้งาน mysql โดยใช้ password ของ root user ที่ได้ตั้งไว้ | ||
'''# mysql -u root -p''' | '''# mysql -u root -p''' | ||
+ | <!--T:50--> | ||
5. สร้าง DB เพื่อใช้งานการเก็บข้อมูลของการใช้งาน Email Server | 5. สร้าง DB เพื่อใช้งานการเก็บข้อมูลของการใช้งาน Email Server | ||
'''# CREATE DATABASE ''[[eaimail]]'';''' | '''# CREATE DATABASE ''[[eaimail]]'';''' | ||
'''# USE ''[[eaimail]]'';''' | '''# USE ''[[eaimail]]'';''' | ||
+ | <!--T:51--> | ||
6. สร้าง user พร้อมกำหนดสิทธิ์การใช้งานให้กับ eaimail database ที่สร้างขึ้นมา | 6. สร้าง user พร้อมกำหนดสิทธิ์การใช้งานให้กับ eaimail database ที่สร้างขึ้นมา | ||
'''# GRANT SELECT, INSERT, UPDATE, DELETE ON eaimail.* TO ''[['yourdbuser']]''@'localhost' IDENTIFIED BY ''[['yourdbpassword']]''; | '''# GRANT SELECT, INSERT, UPDATE, DELETE ON eaimail.* TO ''[['yourdbuser']]''@'localhost' IDENTIFIED BY ''[['yourdbpassword']]''; | ||
แถว 265: | แถว 305: | ||
'''# FLUSH PRIVILEGES;''' | '''# FLUSH PRIVILEGES;''' | ||
+ | <!--T:52--> | ||
7. ตรวจสอบ userที่สร้างขึ้นใหม่โดย | 7. ตรวจสอบ userที่สร้างขึ้นใหม่โดย | ||
'''# SHOW GRANTS FOR ''[['yourdbuser']]''@'localhost';''' | '''# SHOW GRANTS FOR ''[['yourdbuser']]''@'localhost';''' | ||
+ | <!--T:53--> | ||
8. สร้างตารางใช้เก็บค่า domains, forwardings สำหรับ forward อีเมลภาษาไทยไปภาษาอังกฤษ, users เพื่อใช้สร้าง mailbox | 8. สร้างตารางใช้เก็บค่า domains, forwardings สำหรับ forward อีเมลภาษาไทยไปภาษาอังกฤษ, users เพื่อใช้สร้าง mailbox | ||
'''# CREATE TABLE domains (domain varchar(50) NOT NULL, PRIMARY KEY (domain) );''' | '''# CREATE TABLE domains (domain varchar(50) NOT NULL, PRIMARY KEY (domain) );''' | ||
แถว 273: | แถว 315: | ||
'''# CREATE TABLE users (email varchar(80) NOT NULL, password varchar(20) NOT NULL, PRIMARY KEY (email) );''' | '''# CREATE TABLE users (email varchar(80) NOT NULL, password varchar(20) NOT NULL, PRIMARY KEY (email) );''' | ||
+ | <!--T:54--> | ||
9. เลือก DB ของ mail server และกำหนด Domain ภาษาอังกฤษ และภาษาไทย และ Email-Account ภาษาอังกฤษ) พร้อม password เพื่อเริ่มใช้งาน | 9. เลือก DB ของ mail server และกำหนด Domain ภาษาอังกฤษ และภาษาไทย และ Email-Account ภาษาอังกฤษ) พร้อม password เพื่อเริ่มใช้งาน | ||
'''# INSERT INTO domains (domain) VALUES ([['eai.in.th']]);''' | '''# INSERT INTO domains (domain) VALUES ([['eai.in.th']]);''' | ||
แถว 279: | แถว 322: | ||
'''# INSERT INTO users (email, password) VALUES ([['ไทย@อีเอไอ.ไทย']], ENCRYPT([['thaiuserpassword']]));''' | '''# INSERT INTO users (email, password) VALUES ([['ไทย@อีเอไอ.ไทย']], ENCRYPT([['thaiuserpassword']]));''' | ||
+ | <!--T:55--> | ||
10. กำหนด Email ที่เข้ามายัง Email Account ภาษาไทย ให้ forward เข้า Email-Account ภาษาอังกฤษ เนื่องจากระบบไม่สามารถสร้าง mailbox เป็น ภาษาไทยได้ | 10. กำหนด Email ที่เข้ามายัง Email Account ภาษาไทย ให้ forward เข้า Email-Account ภาษาอังกฤษ เนื่องจากระบบไม่สามารถสร้าง mailbox เป็น ภาษาไทยได้ | ||
'''# INSERT INTO forwardings (source,destination) VALUES ([['ไทย@อีเอไอ.ไทย']],[['thai@eai.in.th']]);''' | '''# INSERT INTO forwardings (source,destination) VALUES ([['ไทย@อีเอไอ.ไทย']],[['thai@eai.in.th']]);''' | ||
'''# quit''' | '''# quit''' | ||
− | == | + | == 6. ตั้งค่า postfix == <!--T:56--> |
− | + | === สร้างไฟล์เชื่อมต่อระหว่าง postfix และ mariadb === | |
* สร้างไฟล์ script เพื่อใช้สำหรับเรียกค่า domain จาก DB | * สร้างไฟล์ script เพื่อใช้สำหรับเรียกค่า domain จาก DB | ||
'''# vi /etc/postfix/mysql-virtual_domains.cf''' | '''# vi /etc/postfix/mysql-virtual_domains.cf''' | ||
− | user = '''''[[yourdbuser]]''''' | + | <!--T:57--> |
+ | user = '''''[[yourdbuser]]''''' | ||
password = '''''[[yourdbpassword]]''''' | password = '''''[[yourdbpassword]]''''' | ||
dbname = '''''[[eaimail]]''''' | dbname = '''''[[eaimail]]''''' | ||
แถว 294: | แถว 339: | ||
hosts = 127.0.0.1 | hosts = 127.0.0.1 | ||
+ | <!--T:58--> | ||
* สร้างไฟล์ script เพื่อใช้สำหรับ forward email | * สร้างไฟล์ script เพื่อใช้สำหรับ forward email | ||
'''# vi /etc/postfix/mysql-virtual_forwardings.cf''' | '''# vi /etc/postfix/mysql-virtual_forwardings.cf''' | ||
− | user = '''''[[yourdbuser]]''''' | + | <!--T:59--> |
+ | user = '''''[[yourdbuser]]''''' | ||
password = '''''[[yourdbpassword]]''''' | password = '''''[[yourdbpassword]]''''' | ||
dbname = '''''[[eaimail]]''''' | dbname = '''''[[eaimail]]''''' | ||
แถว 303: | แถว 350: | ||
hosts = 127.0.0.1 | hosts = 127.0.0.1 | ||
+ | <!--T:60--> | ||
* สร้างไฟล์ script เพื่อใช้สำหรับ สร้าง mailbox และใช้ login | * สร้างไฟล์ script เพื่อใช้สำหรับ สร้าง mailbox และใช้ login | ||
'''# vi /etc/postfix/mysql-virtual_mailboxes.cf''' | '''# vi /etc/postfix/mysql-virtual_mailboxes.cf''' | ||
− | user = '''''[[yourdbuser]] ''''' | + | <!--T:61--> |
+ | user = '''''[[yourdbuser]] ''''' | ||
password = '''''[[yourdbpassword]]''''' | password = '''''[[yourdbpassword]]''''' | ||
dbname = '''''[[eaimail]]''''' | dbname = '''''[[eaimail]]''''' | ||
แถว 312: | แถว 361: | ||
hosts = 127.0.0.1 | hosts = 127.0.0.1 | ||
+ | <!--T:62--> | ||
* สร้างไฟล์ script เพื่อใช้สำหรับ ส่งต่อ email ทั้งหมด ไปยัง smtp server อื่น ซึ่งใช้ในกรณีที่ host เป็น IP Address | * สร้างไฟล์ script เพื่อใช้สำหรับ ส่งต่อ email ทั้งหมด ไปยัง smtp server อื่น ซึ่งใช้ในกรณีที่ host เป็น IP Address | ||
'''# vi /etc/postfix/mysql-virtual_email2email.cf''' | '''# vi /etc/postfix/mysql-virtual_email2email.cf''' | ||
− | user = '''''[[yourdbuser]] ''''' | + | <!--T:63--> |
+ | user = '''''[[yourdbuser]] ''''' | ||
password = '''''[[yourdbpassword]]''''' | password = '''''[[yourdbpassword]]''''' | ||
dbname = '''''[[eaimail]]''''' | dbname = '''''[[eaimail]]''''' | ||
แถว 321: | แถว 372: | ||
hosts = 127.0.0.1 | hosts = 127.0.0.1 | ||
+ | <!--T:64--> | ||
* กำหนดสิทธิ์ให้กับ script ที่สร้างขึ้น | * กำหนดสิทธิ์ให้กับ script ที่สร้างขึ้น | ||
'''# chmod 640 /etc/postfix/mysql-virtual_*.cf && chgrp postfix /etc/postfix/mysql-virtual_*.cf''' | '''# chmod 640 /etc/postfix/mysql-virtual_*.cf && chgrp postfix /etc/postfix/mysql-virtual_*.cf''' | ||
− | + | === สร้าง user vmail สำหรับอ่าน/เขียน mailbox === <!--T:65--> | |
* สร้าง group เพื่อใช้กับ mailbox | * สร้าง group เพื่อใช้กับ mailbox | ||
'''# groupadd -g 5000 vmail''' | '''# groupadd -g 5000 vmail''' | ||
'''# useradd -g vmail -u 5000 vmail -d /home/vmail -m''' | '''# useradd -g vmail -u 5000 vmail -d /home/vmail -m''' | ||
− | + | === แก้ไขไฟล์ "/etc/postfix/main.cf" === <!--T:66--> | |
'''# postconf "myhostname=''[[mail.eai.in.th]]'''" | '''# postconf "myhostname=''[[mail.eai.in.th]]'''" | ||
'''# postconf "mydomain='''[[eai.in.th]]'''" | '''# postconf "mydomain='''[[eai.in.th]]'''" | ||
แถว 361: | แถว 413: | ||
'''# postconf "smtputf8_enable=yes" | '''# postconf "smtputf8_enable=yes" | ||
+ | <!--T:67--> | ||
* ตัวอย่างไฟล์ | * ตัวอย่างไฟล์ | ||
smtp_tls_security_level = may | smtp_tls_security_level = may | ||
แถว 390: | แถว 443: | ||
$sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks | $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks | ||
− | + | === แก้ไขไฟล์ "/etc/postfix/master.cf" === <!--T:68--> | |
'''# postconf -M smtps/inet="smtps inet n - - - - smtpd" | '''# postconf -M smtps/inet="smtps inet n - - - - smtpd" | ||
'''# postconf -P "smtps/inet/syslog_name=postfix/smtps" | '''# postconf -P "smtps/inet/syslog_name=postfix/smtps" | ||
แถว 400: | แถว 453: | ||
'''# postconf -vM dovecot/unix="dovecot unix - n n - - pipe flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}" | '''# postconf -vM dovecot/unix="dovecot unix - n n - - pipe flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}" | ||
+ | <!--T:69--> | ||
* ตัวอย่างไฟล์ | * ตัวอย่างไฟล์ | ||
smtps inet n - - - - smtpd | smtps inet n - - - - smtpd | ||
แถว 411: | แถว 465: | ||
flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}''' | flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}''' | ||
+ | <!--T:70--> | ||
* restart postfix | * restart postfix | ||
'''# systemctl restart postfix''' | '''# systemctl restart postfix''' | ||
− | == | + | == 7. ตั้งค่า dovecot == <!--T:71--> |
− | + | === สร้างไฟล์เชื่อมต่อระหว่าง dovecot และ mariadb === | |
* สร้าง script เพื่อให้ dovecot ใช้งานกับ SQL ที่เราได้กำหนดก่อนหน้านี้ | * สร้าง script เพื่อให้ dovecot ใช้งานกับ SQL ที่เราได้กำหนดก่อนหน้านี้ | ||
'''# vi /etc/dovecot/dovecot-sql.conf.ext''' | '''# vi /etc/dovecot/dovecot-sql.conf.ext''' | ||
− | '''driver = mysql''' | + | <!--T:72--> |
+ | '''driver = mysql''' | ||
'''connect = host=127.0.0.1 dbname=''[[eaimail]]'' user=''[[yourdbuser]]'' password=''[[yourdbpassword]]''''' | '''connect = host=127.0.0.1 dbname=''[[eaimail]]'' user=''[[yourdbuser]]'' password=''[[yourdbpassword]]''''' | ||
'''default_pass_scheme = CRYPT''' | '''default_pass_scheme = CRYPT''' | ||
'''password_query = SELECT email as user, password FROM users WHERE email='%u';''' | '''password_query = SELECT email as user, password FROM users WHERE email='%u';''' | ||
+ | <!--T:73--> | ||
* กำหนดสิทธิ์อนุญาตให้ user ที่อยู่ใน dovecot group ใช้งาน | * กำหนดสิทธิ์อนุญาตให้ user ที่อยู่ใน dovecot group ใช้งาน | ||
'''# chmod 640 /etc/dovecot/dovecot-sql.conf.ext && chgrp dovecot /etc/dovecot/dovecot-sql.conf.ext | '''# chmod 640 /etc/dovecot/dovecot-sql.conf.ext && chgrp dovecot /etc/dovecot/dovecot-sql.conf.ext | ||
− | + | === แก้ไขไฟล์ "/etc/dovecot/dovecot.conf" === <!--T:74--> | |
* Backup ค่า config เดิมไว่ก่อน | * Backup ค่า config เดิมไว่ก่อน | ||
'''# mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf-backup''' | '''# mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf-backup''' | ||
+ | <!--T:75--> | ||
* ตั้งค่า config dovecot โดยสร้างไฟล์ให้ และใส่คำสั่งตามด้านล่าง | * ตั้งค่า config dovecot โดยสร้างไฟล์ให้ และใส่คำสั่งตามด้านล่าง | ||
'''# vi /etc/dovecot/dovecot.conf''' | '''# vi /etc/dovecot/dovecot.conf''' | ||
''ตัวอย่าง'' | ''ตัวอย่าง'' | ||
− | '''protocols = imap pop3 lmtp | + | <!--T:76--> |
+ | '''protocols = imap pop3 lmtp | ||
'''log_timestamp = "%Y-%m-%d %H:%M:%S " | '''log_timestamp = "%Y-%m-%d %H:%M:%S " | ||
'''mail_location = maildir:/home/vmail/%d/%n/Maildir | '''mail_location = maildir:/home/vmail/%d/%n/Maildir | ||
แถว 483: | แถว 542: | ||
'''}''' | '''}''' | ||
+ | <!--T:77--> | ||
* สั่ง restart dovecot | * สั่ง restart dovecot | ||
'''# systemctl restart dovecot''' | '''# systemctl restart dovecot''' | ||
− | == | + | == 8. ทดสอบการทำงานของ EAI Email Server == <!--T:78--> |
1. ทดสอบ imap | 1. ทดสอบ imap | ||
'''# telnet localhost imap''' | '''# telnet localhost imap''' | ||
+ | <!--T:79--> | ||
2. ได้ผลตามด้านล่าง และ ใช้คำสั่ง quit เพื่ออแกจาก telnet | 2. ได้ผลตามด้านล่าง และ ใช้คำสั่ง quit เพื่ออแกจาก telnet | ||
'''Trying 127.0.0.1...''' | '''Trying 127.0.0.1...''' | ||
แถว 496: | แถว 557: | ||
'''+OK Dovecot ready.''' | '''+OK Dovecot ready.''' | ||
+ | <!--T:80--> | ||
3. แก้ใขไฟล์ /etc/aliases โดยเพิ่มบรรทัดตามด้านล่าง | 3. แก้ใขไฟล์ /etc/aliases โดยเพิ่มบรรทัดตามด้านล่าง | ||
'''# vi /etc/aliases''' | '''# vi /etc/aliases''' | ||
− | '''mailer-daemon: postmaster''' | + | <!--T:81--> |
+ | '''mailer-daemon: postmaster''' | ||
'''postmaster: root''' | '''postmaster: root''' | ||
'''''[[root: postmaster@eai.in.th]]''''' | '''''[[root: postmaster@eai.in.th]]''''' | ||
+ | <!--T:82--> | ||
4 สั่ง update aliases และ restart postfix | 4 สั่ง update aliases และ restart postfix | ||
'''# newaliases''' | '''# newaliases''' | ||
'''# systemctl restart postfix''' | '''# systemctl restart postfix''' | ||
+ | <!--T:83--> | ||
5. ทดสอบ smtp server | 5. ทดสอบ smtp server | ||
'''# telnet localhost 25''' | '''# telnet localhost 25''' | ||
'''# ehlo localhost''' | '''# ehlo localhost''' | ||
+ | <!--T:84--> | ||
6. จะได้ผลลัพธ์ตามด้านล่าง | 6. จะได้ผลลัพธ์ตามด้านล่าง | ||
'''250-mail.eai.in.th''' | '''250-mail.eai.in.th''' | ||
แถว 523: | แถว 589: | ||
'''250 SMTPUTF8''' | '''250 SMTPUTF8''' | ||
+ | <!--T:85--> | ||
7. ติดตั้ง mailx และทดสอบส่ง email | 7. ติดตั้ง mailx และทดสอบส่ง email | ||
'''# yum install mailx''' | '''# yum install mailx''' | ||
'''# mailx thai@eai.in.th ''(ใส่ subject แล้ว enter ตามด้วยเนื้อหา และใช้ Ctrl+D เพื่อส่งออก)''''' | '''# mailx thai@eai.in.th ''(ใส่ subject แล้ว enter ตามด้วยเนื้อหา และใช้ Ctrl+D เพื่อส่งออก)''''' | ||
+ | <!--T:86--> | ||
8. ตรวจสอบ log ของการส่ง Email : /var/log/maillog ซึ้งจะได้ผลตามด้านล่าง | 8. ตรวจสอบ log ของการส่ง Email : /var/log/maillog ซึ้งจะได้ผลตามด้านล่าง | ||
'''Nov 13 15:19:07 mail postfix/pickup[31954]: E9AB020199E5: uid=0 from=<root>''' | '''Nov 13 15:19:07 mail postfix/pickup[31954]: E9AB020199E5: uid=0 from=<root>''' | ||
แถว 534: | แถว 602: | ||
'''Nov 13 15:19:08 mail postfix/qmgr[21141]: E9AB020199E5: removed''' | '''Nov 13 15:19:08 mail postfix/qmgr[21141]: E9AB020199E5: removed''' | ||
+ | <!--T:87--> | ||
9. ตรวจสอบ log ผลการส่งของ dovecot : /home/vmail/dovecot-deliver.log ซึ่งจะได้ผลตามด้านล่าง | 9. ตรวจสอบ log ผลการส่งของ dovecot : /home/vmail/dovecot-deliver.log ซึ่งจะได้ผลตามด้านล่าง | ||
'''2017-11-13 15:19:08 lda(tanagan@eai.in.th): Info: msgid=<20171113081907.E9AB020199E5@mail.eai.in.th>: saved mail to INBOX''' | '''2017-11-13 15:19:08 lda(tanagan@eai.in.th): Info: msgid=<20171113081907.E9AB020199E5@mail.eai.in.th>: saved mail to INBOX''' | ||
+ | <!--T:88--> | ||
10. ตรวจสอบ mailbox เมื่อมีการรับส่ง-ส่ง Email จะสร้างขึ้นโดย dovecot ซึ่งจะได้ผลตามภาพ | 10. ตรวจสอบ mailbox เมื่อมีการรับส่ง-ส่ง Email จะสร้างขึ้นโดย dovecot ซึ่งจะได้ผลตามภาพ | ||
'''# cd /home/vmail/eai.in.th/thai/Maildir''' | '''# cd /home/vmail/eai.in.th/thai/Maildir''' | ||
'''# find''' | '''# find''' | ||
− | '''.''' | + | <!--T:89--> |
+ | '''.''' | ||
'''./dovecot-uidlist''' | '''./dovecot-uidlist''' | ||
'''./cur''' | '''./cur''' | ||
แถว 550: | แถว 621: | ||
'''./tmp''' | '''./tmp''' | ||
+ | <!--T:90--> | ||
11. ตรวจสอบ mailbox โดยใช้ mail client คือ mutt เพื่อดู email ภายใน mailbox | 11. ตรวจสอบ mailbox โดยใช้ mail client คือ mutt เพื่อดู email ภายใน mailbox | ||
'''# yum install mutt''' | '''# yum install mutt''' | ||
'''# mutt -f .''' | '''# mutt -f .''' | ||
+ | <!--T:91--> | ||
12. ทดสอบการส่งเมลในรูปแบบ eai | 12. ทดสอบการส่งเมลในรูปแบบ eai | ||
'''# telnet localhost 25''' | '''# telnet localhost 25''' | ||
แถว 566: | แถว 639: | ||
*กด Ctrl+] เพื่อออก | *กด Ctrl+] เพื่อออก | ||
− | == | + | == 9. ติดตั้ง roundcube webmail == <!--T:92--> |
− | + | === ติดตั้ง apache php === <!--T:93--> | |
+ | <!--T:94--> | ||
* ติดตั้ง repo ของ php 7.4 เพิ่มเติม และเปิดให้สามารถติดตั้ง php 7.4 ได้ | * ติดตั้ง repo ของ php 7.4 เพิ่มเติม และเปิดให้สามารถติดตั้ง php 7.4 ได้ | ||
'''# yum -y install https://rpms.remirepo.net/enterprise/remi-release-8.rpm | '''# yum -y install https://rpms.remirepo.net/enterprise/remi-release-8.rpm | ||
'''# yum module reset php && yum module enable php:remi-7.4 -y | '''# yum module reset php && yum module enable php:remi-7.4 -y | ||
+ | <!--T:95--> | ||
* ใช้คำสั่งติดตั้ง php, php library และ apache web server | * ใช้คำสั่งติดตั้ง php, php library และ apache web server | ||
'''# yum -y install httpd php php-common php-devel php-imap php-imagick php-json php-xml php-mbstring php-pear php-pdo php-intl php-ldap php-gd php-zip php-pdo_mysql php-curl php-bz2 php-gmp | '''# yum -y install httpd php php-common php-devel php-imap php-imagick php-json php-xml php-mbstring php-pear php-pdo php-intl php-ldap php-gd php-zip php-pdo_mysql php-curl php-bz2 php-gmp | ||
+ | <!--T:96--> | ||
* ใช้คำสั่ง start service apache และ php และให้เริ่มทำงานโดยอัติโนมัติทุกครั้งที่เปิดเครื่อง | * ใช้คำสั่ง start service apache และ php และให้เริ่มทำงานโดยอัติโนมัติทุกครั้งที่เปิดเครื่อง | ||
'''# systemctl start httpd && systemctl start php-fpm | '''# systemctl start httpd && systemctl start php-fpm | ||
'''# systemctl enable httpd && systemctl enable php-fpm | '''# systemctl enable httpd && systemctl enable php-fpm | ||
+ | <!--T:97--> | ||
* ตรวจสอบสถานะการทำงานของ apache และ | * ตรวจสอบสถานะการทำงานของ apache และ | ||
'''# systemctl status httpd | '''# systemctl status httpd | ||
'''# systemctl status php-fpm | '''# systemctl status php-fpm | ||
− | + | === ตั้งค่า php === <!--T:98--> | |
* ตั้งค่า timezone (เราจะตั้งค่าเฉพาะส่วนที่จำเป็นต่อการใช้งาน roundcube) | * ตั้งค่า timezone (เราจะตั้งค่าเฉพาะส่วนที่จำเป็นต่อการใช้งาน roundcube) | ||
'''# vi /etc/php.ini | '''# vi /etc/php.ini | ||
− | [Date] | + | <!--T:99--> |
+ | [Date] | ||
; Defines the default timezone used by the date functions | ; Defines the default timezone used by the date functions | ||
; http://php.net/date.timezone | ; http://php.net/date.timezone | ||
date.timezone = Asia/Bangkok | date.timezone = Asia/Bangkok | ||
− | == ตั้งค่า mariadb database == | + | === ตั้งค่า mariadb database === <!--T:100--> |
* สร้าง database roundcubemail โดยกำหนด username=rcmail, password=passrc | * สร้าง database roundcubemail โดยกำหนด username=rcmail, password=passrc | ||
'''# mysql -u root -p | '''# mysql -u root -p | ||
− | '''# CREATE DATABASE roundcubemail CHARACTER SET utf8 COLLATE utf8_general_ci; | + | <!--T:101--> |
+ | '''# CREATE DATABASE roundcubemail CHARACTER SET utf8 COLLATE utf8_general_ci; | ||
'''# GRANT ALL PRIVILEGES ON roundcubemail.* TO rcmail@localhost IDENTIFIED BY 'passrc'; | '''# GRANT ALL PRIVILEGES ON roundcubemail.* TO rcmail@localhost IDENTIFIED BY 'passrc'; | ||
'''# FLUSH PRIVILEGES; | '''# FLUSH PRIVILEGES; | ||
− | == ตั้งค่า roundcube == | + | === ตั้งค่า roundcube === <!--T:102--> |
'''# cd /var/www/html/ | '''# cd /var/www/html/ | ||
'''# wget https://github.com/roundcube/roundcubemail/releases/download/1.4.4/roundcubemail-1.4.4-complete.tar.gz | '''# wget https://github.com/roundcube/roundcubemail/releases/download/1.4.4/roundcubemail-1.4.4-complete.tar.gz | ||
แถว 610: | แถว 689: | ||
'''# chown -R apache:apache /var/www/html/roundcubemail | '''# chown -R apache:apache /var/www/html/roundcubemail | ||
− | == สร้าง virtualhost | + | === สร้าง virtualhost === <!--T:103--> |
'''# vi /etc/httpd/conf.d/rcmail.conf | '''# vi /etc/httpd/conf.d/rcmail.conf | ||
− | <VirtualHost *:80> | + | <!--T:104--> |
+ | <VirtualHost *:80> | ||
ServerName mail.eai.in.th | ServerName mail.eai.in.th | ||
ServerAdmin webmaster@eai.in.th | ServerAdmin webmaster@eai.in.th | ||
แถว 625: | แถว 705: | ||
</VirtualHost> | </VirtualHost> | ||
− | '''# systemctl restart httpd | + | <!--T:105--> |
+ | '''# systemctl restart httpd | ||
+ | <!--T:106--> | ||
* ทดสอบเข้าเว็บโซต์ | * ทดสอบเข้าเว็บโซต์ | ||
'''http://mail.eai.in.th/installer/ | '''http://mail.eai.in.th/installer/ | ||
+ | <!--T:107--> | ||
* ตั้งค่าเชื่อมต่อ database | * ตั้งค่าเชื่อมต่อ database | ||
− | host = localhost | + | <!--T:108--> |
+ | host = localhost | ||
dbname =roundcubemail | dbname =roundcubemail | ||
user = rcmail | user = rcmail | ||
แถว 638: | แถว 722: | ||
db_prefix = rc_ | db_prefix = rc_ | ||
+ | <!--T:109--> | ||
* ตั้งค่า IMAP | * ตั้งค่า IMAP | ||
ssl://mail.eai.in.th | ssl://mail.eai.in.th | ||
993 | 993 | ||
+ | <!--T:110--> | ||
* ตั้งค่า SMTP | * ตั้งค่า SMTP | ||
ssl://mail.eai.in.th | ssl://mail.eai.in.th | ||
465 | 465 | ||
+ | <!--T:111--> | ||
* user, pass ของ eai email | * user, pass ของ eai email | ||
thai@eai.in.th และ ไทย@อีเอไอ.ไทย | thai@eai.in.th และ ไทย@อีเอไอ.ไทย | ||
thaiuserpassword | thaiuserpassword | ||
+ | <!--T:112--> | ||
* การใช้ ssl แบบ self-sign อาจจะทำให้ roundcube ไม่สามารถเชื่อมต่อ mail server ได้ แก้ปัญหาโดยการ config เพิ่มเติม ดังนี้ | * การใช้ ssl แบบ self-sign อาจจะทำให้ roundcube ไม่สามารถเชื่อมต่อ mail server ได้ แก้ปัญหาโดยการ config เพิ่มเติม ดังนี้ | ||
'''# vi /var/www/html/roundcubemail/config/defaults.inc.php | '''# vi /var/www/html/roundcubemail/config/defaults.inc.php | ||
แถว 666: | แถว 754: | ||
); | ); | ||
+ | </translate> | ||
[[Category: EAI]] | [[Category: EAI]] |
รุ่นแก้ไขปัจจุบันเมื่อ 13:31, 12 กรกฎาคม 2564
เนื้อหา
- 1 EAI Email Server
- 2 การติดตั้ง EAI Email Server
EAI Email Server
คู่มือนี้ได้จัดทำขึ้นมาเพื่อทดสอบและเป็นแนวทางการติดตั้ง Email Server ให้สามารถรับส่ง email address ภาษาไทย หรือ Email Address Internationalization (EAI) โดยใช้ Opensource Software เพื่อหาวิธีการที่สามารถใช้งานได้ และสามารถนำไปพัฒนาต่อยอดได้
Software ที่นำมาทดสอบ
- CentOS8 for Virtualbox [CentOS for VirtualBox]
- user: root
- pass: rooteai
- VirtualBox [Win] [Mac]
- VirtualBox Extension Pack [ดาวน์โหลด]
- Filezilla [Win] [Mac]
- putty [Win] (เฉพาะเครื่อง windows)
- Postfix 3.x [ดาวน์โหลด]
- Dovecot 2.x [ดาวน์โหลด]
- MariaDB 10.x [ดาวน์โหลด]
- Roundcube 1.4.x [ดาวน์โหลด] [tar]
- ข้อ 1, 2, 3, 4, 5 แนะนำให้ติดตั้งเตรียมไว้ก่อนอบรม
ขั้นตอนการติดตั้ง CentOS8 for Virtualbox
- ดาวน์โหลดและติดตั้ง VirtualBox และ VirtualBox Extension Pack
- ดาวน์โหลดไฟล์ CentOS8 for Virtualbox (centos-eai-wokshop.ova) ที่จัดเตรียมไว้ให้ตามลิงค์ด้านบน
- ดับเบิ้ลคลิ๊กที่ไฟล์ centos-eai-wokshop.ova เพื่อ import เข้าโปรแกรม Virtualbox [1]
- หลังจาก import เสร็จเรียบร้อยแล้ว ที่โปรแกรม VirtualBox ให้ดับเบิ้ลคลิ๊กที่ centos-eai-wokshop ด้านซ้ายมือ เพื่อเปิด server
- ถ้าพบข้อผิดพลาด "ไม่สามารถเริ่มการทำงานเครื่อง centos-eai-workshop เนื่องจากไม่พบแผงวงจรเครือข่าย" ให้กด "เปลี่ยนการติดตั้งเครือข่าย" จะขึ้นหน้าเปลี่ยนเครือข่าย ให้กด "ตกลง" [2]
- เมื่อเปิดเครื่องได้แล้ว ให้ login ด้วย user, pass ที่เตรียมไว้ให้ข้างต้น และใช้คำสั่ง "ifconfig" เพื่อตรวจสอบ IP ของเครื่อง [3]
- ให้จด IP นี้ไว้ใช้สำหรับ ssh เข้าเครื่อง Server ของเราในการทำงาน workshop (*แต่ละเครื่องจะได้ IP แตกต่างกัน)
(สำหรับเครื่อง mac ต้อง allow ให้ virtualbox ทำงานได้ตามนี้ [4])
- หมายเหตุ
- คู่มือนี้ไม่ได้อธิบายถึงการติดตั้ง Centos 8
- Postfix ต้องเป็น Version 3.x.x ขึ้นไป จะรองรับ EAI
- หากจะนำไปใช้งานจริงจะต้องจดทะเบียนโดเมน และมี dns server ด้วย
การติดตั้ง EAI Email Server
1. ตั้งค่า hostname
1. อัพเดตแพคเกจของ mail serverให้เป็นเวอร์ชั่นล่าสุด ด้วยคำสั่ง
# yum -y update
2. กำหนดชื่อ hostname ในตัวอย่างนี้กำหนดชื่อว่า mail.eai.in.th ด้วยคำสั่ง
# hostnamectl set-hostname mail.eai.in.th
3. เพิ่มค่า hostname ชื่อเดียวกับชื่อที่กำหนดข้างต้นในไฟล์ hosts
# vi /etc/hosts
ตัวอย่างไฟล์ hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 mail.eai.in.th ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 mail.eai.in.th
*ระวัง envelopment ของทาง partner ว่าติดตั้ง centos ในรูปแบบใดมาให้ (อาจจะต้องติดตั้ง service เพิ่ม หากติดตั้งมาแบบ minimal เช่นใช้คำสั่ง vi ไม่ได้)
4. ติดตั้ง wget เพื่อใช้ดาวน์โหลดซอฟแวร์ที่จำเป็นต้องใช้งานเพิ่ม
# yum -y install wget
5. ติดตั้ง telnet เพื่อทดสอบการทำงานของ email server
# yum -y install telnet
2. ตั้งค่า firewall
1. ตรวจสอบสถานะ firewalld service บน mail server
- ต้องมีสถานะ active (running)
# systemctl status firewalld
ตัวอย่าง
Active: active (running) since Mon 2019-11-18 14:12:03 +07; 1h 13min ago
2. ตรวจสอบ firewall zone และ network interface ที่เปิดอยู่
# firewall-cmd --get-active-zones
ตัวอย่าง
public interfaces: ens32
3. ตรวจสอบรายการ services ของ firewall ที่เปิดอยู่ที่ zone public
# firewall-cmd --zone=public --list-services
ตัวอย่าง
cockpit dhcpv6-client ssh
4. เปิด firewall services ที่ zone public ของ mail server (สามารถเปิดเท่าต้องการได้)
# firewall-cmd --permanent --zone=public --add-service={http,https,mysql,smtp,smtps,imap,imaps} # firewall-cmd --reload
5. ตรวจสอบรายการ services ของ firewall ที่เปิดอยู่ที่ zone public อีกครั้ง จะพบ services เปิดเพิ่มขึ้นมา
*ref: configure firewall services for mail server (https://spalinux.com/2015/06/centos-7-basic-configure-firewall-by-firewall-cmd)
# firewall-cmd --zone=public --list-services
ตัวอย่าง
cockpit dhcpv6-client http https imap imaps mysql smtp smtps ssh
6. ในตัวอย่างนี้เราแนะนำให้ปิดการทำงานของ SELinux เพื่อความสะดวกในการตั้งค่า (ไม่แนะนำให้ทำกับเครื่อง production)
- เปลี่ยน SELinux=enforcing เป็น SELinux=disabled
# vi /etc/selinux/config
ตัวอย่าง
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
7. ตรวจสอบสถานะ SELinux อีกครั้ง
- สั่ง restart server และทำการตรวจสอบ
# reboot # sestatus
ตัวอย่าง
disabled
3. สร้าง SSL Cert
- เป็นขั้นตอนการสร้าง SSL key เตรียมไว้ใช้งานกับ postfix และ dovecot
1. สร้าง private key
# cd /etc/pki/tls/certs # /usr/bin/openssl genrsa -aes128 2048 > eai.key
ตัวอย่าง
Generating RSA private key, 2048 bit long modulus ... ... e is 65537 (0x10001) Enter pass phrase: #set passphrase Verifying - Enter pass phrase: #confirm
2. ถอด Passphase ออกจาก private key ที่สร้างขึ้น
# /usr/bin/openssl rsa -in eai.key -out eai.key
ตัวอย่าง
Enter pass phrase for eai.key: #input passphrase writing RSA key
3. สร้าง csr
# /usr/bin/openssl req -utf8 -new -key eai.key -out eai.csr
ตัวอย่าง
You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:TH #country State or Province Name (full name) []:Bangkok #state Locality Name (eg, city) [Default City]:Dusit #city Organization Name (eg, company) [Default Company Ltd]:EAI #company Organizational Unit Name (eg, section) []:IT #department Common Name (eg, your name or your server's hostname) []:mail.eai.in.th #server's FQDN Email Address []:xxx@eai.in.th #email address Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: #Enter An optional company name []: #Enter
4. ทำการ generate key
# /usr/bin/openssl x509 -in eai.csr -out eai.crt -req -signkey eai.key -days 365
ตัวอย่าง
Signature ok subject=/C=JP/ST=Hiroshima/L=Hiroshima/O=GTS/OU=Server World/CN=www.srv.world/emailAddress=xxx@eai.in.th Getting Private key
4. ติดตั้ง mariadb, postfix, dovecot
1. ติดตั้ง mariadb , Postfix , Dovecot และ Packet ที่จำเป็นกับ Server
# yum -y install postfix dovecot mariadb-server dovecot-mysql postfix-mysql
2. สั่ง start service ของ postfix, dovecot, mariadb ทุกครั้งที่เปิด Server
# systemctl start postfix && systemctl start dovecot && systemctl start mariadb # systemctl enable postfix && systemctl enable dovecot && systemctl enable mariadb
3. ดูสถานะการทำงานของ postfix, dovecot, maridb
# systemctl status postfix # systemctl status dovecot # systemctl status mariadb
5. ตั้งค่า mariadb
1. ตั้งค่า UTF8 ให้กับ mysql เพื่อให้รองรับภาษาไทย โดยเพิ่มคำสั่งด้าล่างลงใน /etc/my.cnf.d/maridb-server.cnf ใต้ [mysqld]
# vi /etc/my.cnf.d/mariadb-server.cnf
# # These groups are read by MariaDB server. # Use it for options that only the server (but not clients) should see # # See the examples of server my.cnf files in /usr/share/mysql/ # # this is read by the standalone daemon and embedded servers [server] # this is only for the mysqld standalone daemon # Settings user and group are ignored when systemd is used. # If you need to run mysqld under a different user or group, # customize your systemd unit file for mysqld/mariadb according to the # instructions in http://fedoraproject.org/wiki/Systemd [mysqld] character-set-server = utf8 collation-server = utf8_general_ci skip-character-set-client-handshake bind-address=127.0.0.1 datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock log-error=/var/log/mariadb/mariadb.log pid-file=/run/mariadb/mariadb.pid # # * Galera-related settings # [galera] # Mandatory settings #wsrep_on=ON #wsrep_provider= #wsrep_cluster_address= #binlog_format=row #default_storage_engine=InnoDB #innodb_autoinc_lock_mode=2 # # Allow server to accept connections on all interfaces. # #bind-address=0.0.0.0 # # Optional setting #wsrep_slave_threads=1 #innodb_flush_log_at_trx_commit=0 # this is only for embedded server [embedded] # This group is only read by MariaDB servers, not by MySQL. # If you use the same .cnf file for MySQL and MariaDB, # you can put MariaDB-only options here [mariadb] # This group is only read by MariaDB-10.3 servers. # If you use the same .cnf file for MariaDB of different versions, # use this group for options that older servers don't understand [mariadb-10.3]
2. สั่ง restart mariadb
# systemctl restart mariadb
3. ตั้งค่าความปลอดภัยการเข้างาน mysql โดยจะมีการตั้ง password ของ root user เพื่อ login เข้าใช้งาน (*กำหนดเพียง password ใหม่ และในส่วนอื่นๆให้ enter ผ่านได้เลย)
# mysql_secure_installation
4. Login ข้าใช้งาน mysql โดยใช้ password ของ root user ที่ได้ตั้งไว้
# mysql -u root -p
5. สร้าง DB เพื่อใช้งานการเก็บข้อมูลของการใช้งาน Email Server
# CREATE DATABASE eaimail; # USE eaimail;
6. สร้าง user พร้อมกำหนดสิทธิ์การใช้งานให้กับ eaimail database ที่สร้างขึ้นมา
# GRANT SELECT, INSERT, UPDATE, DELETE ON eaimail.* TO 'yourdbuser'@'localhost' IDENTIFIED BY 'yourdbpassword'; # GRANT SELECT, INSERT, UPDATE, DELETE ON eaimail.* TO 'yourdbuser'@'localhost.localdomain' IDENTIFIED BY 'yourdbpassword'; # FLUSH PRIVILEGES;
7. ตรวจสอบ userที่สร้างขึ้นใหม่โดย
# SHOW GRANTS FOR 'yourdbuser'@'localhost';
8. สร้างตารางใช้เก็บค่า domains, forwardings สำหรับ forward อีเมลภาษาไทยไปภาษาอังกฤษ, users เพื่อใช้สร้าง mailbox
# CREATE TABLE domains (domain varchar(50) NOT NULL, PRIMARY KEY (domain) ); # CREATE TABLE forwardings (source varchar(80) NOT NULL, destination TEXT NOT NULL, PRIMARY KEY (source) ); # CREATE TABLE users (email varchar(80) NOT NULL, password varchar(20) NOT NULL, PRIMARY KEY (email) );
9. เลือก DB ของ mail server และกำหนด Domain ภาษาอังกฤษ และภาษาไทย และ Email-Account ภาษาอังกฤษ) พร้อม password เพื่อเริ่มใช้งาน
# INSERT INTO domains (domain) VALUES ('eai.in.th'); # INSERT INTO domains (domain) VALUES ('อีเอไอ.ไทย'); # INSERT INTO users (email, password) VALUES ('thai@eai.in.th', ENCRYPT('thaiuserpassword')); # INSERT INTO users (email, password) VALUES ('ไทย@อีเอไอ.ไทย', ENCRYPT('thaiuserpassword'));
10. กำหนด Email ที่เข้ามายัง Email Account ภาษาไทย ให้ forward เข้า Email-Account ภาษาอังกฤษ เนื่องจากระบบไม่สามารถสร้าง mailbox เป็น ภาษาไทยได้
# INSERT INTO forwardings (source,destination) VALUES ('ไทย@อีเอไอ.ไทย','thai@eai.in.th'); # quit
6. ตั้งค่า postfix
สร้างไฟล์เชื่อมต่อระหว่าง postfix และ mariadb
- สร้างไฟล์ script เพื่อใช้สำหรับเรียกค่า domain จาก DB
# vi /etc/postfix/mysql-virtual_domains.cf
user = yourdbuser password = yourdbpassword dbname = eaimail query = SELECT domain AS virtual FROM domains WHERE domain='%s' hosts = 127.0.0.1
- สร้างไฟล์ script เพื่อใช้สำหรับ forward email
# vi /etc/postfix/mysql-virtual_forwardings.cf
user = yourdbuser password = yourdbpassword dbname = eaimail query = SELECT destination FROM forwardings WHERE source='%s' hosts = 127.0.0.1
- สร้างไฟล์ script เพื่อใช้สำหรับ สร้าง mailbox และใช้ login
# vi /etc/postfix/mysql-virtual_mailboxes.cf
user = yourdbuser password = yourdbpassword dbname = eaimail query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s' hosts = 127.0.0.1
- สร้างไฟล์ script เพื่อใช้สำหรับ ส่งต่อ email ทั้งหมด ไปยัง smtp server อื่น ซึ่งใช้ในกรณีที่ host เป็น IP Address
# vi /etc/postfix/mysql-virtual_email2email.cf
user = yourdbuser password = yourdbpassword dbname = eaimail query = SELECT email FROM users WHERE email='%s' hosts = 127.0.0.1
- กำหนดสิทธิ์ให้กับ script ที่สร้างขึ้น
# chmod 640 /etc/postfix/mysql-virtual_*.cf && chgrp postfix /etc/postfix/mysql-virtual_*.cf
สร้าง user vmail สำหรับอ่าน/เขียน mailbox
- สร้าง group เพื่อใช้กับ mailbox
# groupadd -g 5000 vmail # useradd -g vmail -u 5000 vmail -d /home/vmail -m
แก้ไขไฟล์ "/etc/postfix/main.cf"
# postconf "myhostname=mail.eai.in.th" # postconf "mydomain=eai.in.th" # postconf "myorigin=\$mydomain" # postconf "inet_interfaces=all" # postconf "inet_protocols=ipv4" # postconf "mydestination=localhost, localhost.localdomain" # postconf "mynetworks=127.0.0.1" # postconf "readme_directory=no" # postconf "smtpd_tls_cert_file=/etc/pki/tls/certs/eai.crt" # postconf "smtpd_tls_key_file=/etc/pki/tls/certs/eai.key" # postconf "shlib_directory=no" # postconf "smtpd_sasl_auth_enable=yes" # postconf "smtpd_sasl_type=dovecot" # postconf "smtpd_sasl_path=private/auth" # postconf "smtpd_sasl_authenticated_header=yes" # postconf "broken_sasl_auth_clients=yes" # postconf "smtpd_use_tls=yes" # postconf "smtpd_recipient_restrictions=permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination" # postconf "smtpd_tls_auth_only=yes" # postconf "smtpd_tls_loglevel=1" # postconf "virtual_mailbox_base=/home/vmail" # postconf "virtual_mailbox_maps=proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf" # postconf "virtual_mailbox_domains=proxy:mysql:/etc/postfix/mysql-virtual_domains.cf" # postconf "virtual_alias_maps=proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf" # postconf "virtual_uid_maps=static:5000" # postconf "virtual_gid_maps=static:5000" # postconf "virtual_alias_domains=อีเอไอ.ไทย" # postconf "virtual_transport=dovecot" # postconf "proxy_read_maps=\$local_recipient_maps \$mydestination \$virtual_alias_maps \$virtual_alias_domains \$virtual_mailbox_maps \$virtual_mailbox_domains \$relay_recipient_maps \$relay_domains \$canonical_maps \$sender_canonical_maps \$recipient_canonical_maps \$relocated_maps \$transport_maps \$mynetworks" # postconf "smtputf8_enable=yes"
- ตัวอย่างไฟล์
smtp_tls_security_level = may meta_directory = /etc/postfix shlib_directory = no myhostname = mail.eai.in.th mydomain = eai.in.th myorigin = $mydomain mynetworks = 127.0.0.1 smtpd_sasl_auth_enable = yes smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_authenticated_header = yes broken_sasl_auth_clients = yes smtpd_use_tls = yes smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination smtpd_tls_auth_only = yes smtpd_tls_loglevel = 1 virtual_mailbox_base = /home/vmail virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf virtual_uid_maps = static:5000 virtual_gid_maps = static:5000 virtual_alias_domains = อีเอไอ.ไทย virtual_transport = dovecot virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf smtputf8_enable = yes proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks
แก้ไขไฟล์ "/etc/postfix/master.cf"
# postconf -M smtps/inet="smtps inet n - - - - smtpd" # postconf -P "smtps/inet/syslog_name=postfix/smtps" # postconf -P "smtps/inet/smtpd_tls_wrappermode=yes" # postconf -P "smtps/inet/smtpd_sasl_auth_enable=yes" # postconf -P "smtps/inet/smtpd_client_restrictions=permit_sasl_authenticated,reject" # postconf -P "smtps/inet/smtpd_relay_restrictions=permit_sasl_authenticated,reject" # postconf -P "smtps/inet/milter_macro_daemon_name=ORIGINATING" # postconf -vM dovecot/unix="dovecot unix - n n - - pipe flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}"
- ตัวอย่างไฟล์
smtps inet n - - - - smtpd -o syslog_name=postfix/smtps -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o smtpd_relay_restrictions=permit_sasl_authenticated,reject -o milter_macro_daemon_name=ORIGINATING dovecot unix - n n - - pipe flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}
- restart postfix
# systemctl restart postfix
7. ตั้งค่า dovecot
สร้างไฟล์เชื่อมต่อระหว่าง dovecot และ mariadb
- สร้าง script เพื่อให้ dovecot ใช้งานกับ SQL ที่เราได้กำหนดก่อนหน้านี้
# vi /etc/dovecot/dovecot-sql.conf.ext
driver = mysql connect = host=127.0.0.1 dbname=eaimail user=yourdbuser password=yourdbpassword default_pass_scheme = CRYPT password_query = SELECT email as user, password FROM users WHERE email='%u';
- กำหนดสิทธิ์อนุญาตให้ user ที่อยู่ใน dovecot group ใช้งาน
# chmod 640 /etc/dovecot/dovecot-sql.conf.ext && chgrp dovecot /etc/dovecot/dovecot-sql.conf.ext
แก้ไขไฟล์ "/etc/dovecot/dovecot.conf"
- Backup ค่า config เดิมไว่ก่อน
# mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf-backup
- ตั้งค่า config dovecot โดยสร้างไฟล์ให้ และใส่คำสั่งตามด้านล่าง
# vi /etc/dovecot/dovecot.conf
ตัวอย่าง
protocols = imap pop3 lmtp log_timestamp = "%Y-%m-%d %H:%M:%S " mail_location = maildir:/home/vmail/%d/%n/Maildir ssl_cert = </etc/pki/tls/certs/eai.crt ssl_key = </etc/pki/tls/certs/eai.key ssl_dh_parameters_length = 2048 ssl_cipher_list = ALL:!LOW:!SSLv2:!EXP:!aNULL namespace { type = private separator = . prefix = INBOX. inbox = yes } service auth { unix_listener auth-master { mode = 0600 user = vmail } unix_listener /var/spool/postfix/private/auth { mode = 0666 user = postfix group = postfix } user = root } auth_mechanisms = plain login service auth-worker { user = root } protocol lda { log_path = /home/vmail/dovecot-deliver.log auth_socket_path = /var/run/dovecot/auth-master postmaster_address = postmaster@eai.in.th } protocol pop3 { pop3_uidl_format = %08Xu%08Xv pop3_client_workarounds = outlook-no-nuls oe-ns-eoh } passdb { driver = sql args = /etc/dovecot/dovecot-sql.conf.ext } userdb { driver = static args = uid=5000 gid=5000 home=/home/vmail/%d/%n allow_all_users=yes }
- สั่ง restart dovecot
# systemctl restart dovecot
8. ทดสอบการทำงานของ EAI Email Server
1. ทดสอบ imap
# telnet localhost imap
2. ได้ผลตามด้านล่าง และ ใช้คำสั่ง quit เพื่ออแกจาก telnet
Trying 127.0.0.1... Connected to localhost.localdomain. Escape character is '^]'. +OK Dovecot ready.
3. แก้ใขไฟล์ /etc/aliases โดยเพิ่มบรรทัดตามด้านล่าง
# vi /etc/aliases
mailer-daemon: postmaster postmaster: root root: postmaster@eai.in.th
4 สั่ง update aliases และ restart postfix
# newaliases # systemctl restart postfix
5. ทดสอบ smtp server
# telnet localhost 25 # ehlo localhost
6. จะได้ผลลัพธ์ตามด้านล่าง
250-mail.eai.in.th 250-PIPELINING 250-SIZE 30720000 250-VRFY 250-ETRN 250-STARTTLS 250-ENHANCEDSTATUSCODES 250-8BITMIME 250-DSN 250 SMTPUTF8
7. ติดตั้ง mailx และทดสอบส่ง email
# yum install mailx # mailx thai@eai.in.th (ใส่ subject แล้ว enter ตามด้วยเนื้อหา และใช้ Ctrl+D เพื่อส่งออก)
8. ตรวจสอบ log ของการส่ง Email : /var/log/maillog ซึ้งจะได้ผลตามด้านล่าง
Nov 13 15:19:07 mail postfix/pickup[31954]: E9AB020199E5: uid=0 from=<root> Nov 13 15:19:07 mail postfix/cleanup[1938]: E9AB020199E5: message-id=<20171113081907.E9AB020199E5@mail.eai.in.th> Nov 13 15:19:07 mail postfix/qmgr[21141]: E9AB020199E5: from=<root@eai.in.th>, size=434, nrcpt=1 (queue active) Nov 13 15:19:08 mail postfix/pipe[1946]: E9AB020199E5: to=<tanagan@eai.in.th>, relay=dovecot, delay=0.09, delays=0.04/0.01/0/0.03, dsn=2.0.0, status=sent (delivered via dovecot service) Nov 13 15:19:08 mail postfix/qmgr[21141]: E9AB020199E5: removed
9. ตรวจสอบ log ผลการส่งของ dovecot : /home/vmail/dovecot-deliver.log ซึ่งจะได้ผลตามด้านล่าง
2017-11-13 15:19:08 lda(tanagan@eai.in.th): Info: msgid=<20171113081907.E9AB020199E5@mail.eai.in.th>: saved mail to INBOX
10. ตรวจสอบ mailbox เมื่อมีการรับส่ง-ส่ง Email จะสร้างขึ้นโดย dovecot ซึ่งจะได้ผลตามภาพ
# cd /home/vmail/eai.in.th/thai/Maildir # find
. ./dovecot-uidlist ./cur ./new ./new/1285609582.P6115Q0M368794.li172-137 ./dovecot.index ./dovecot.index.log ./tmp
11. ตรวจสอบ mailbox โดยใช้ mail client คือ mutt เพื่อดู email ภายใน mailbox
# yum install mutt # mutt -f .
12. ทดสอบการส่งเมลในรูปแบบ eai
# telnet localhost 25 # EHLO localhost # MAIL FROM: ธนากานต์@อีเอไอ.ไทย SMTPUTF8 # RCPT TO: ธนากานต์@คน.ไทย # data # Subject: eai test # เทสอีเมลส์ภาษาไทย # .
- ใช้เครื่องหมาย “.” เพื่อจบข้อความและส่งข้อความ
- กด Ctrl+] เพื่อออก
9. ติดตั้ง roundcube webmail
ติดตั้ง apache php
- ติดตั้ง repo ของ php 7.4 เพิ่มเติม และเปิดให้สามารถติดตั้ง php 7.4 ได้
# yum -y install https://rpms.remirepo.net/enterprise/remi-release-8.rpm # yum module reset php && yum module enable php:remi-7.4 -y
- ใช้คำสั่งติดตั้ง php, php library และ apache web server
# yum -y install httpd php php-common php-devel php-imap php-imagick php-json php-xml php-mbstring php-pear php-pdo php-intl php-ldap php-gd php-zip php-pdo_mysql php-curl php-bz2 php-gmp
- ใช้คำสั่ง start service apache และ php และให้เริ่มทำงานโดยอัติโนมัติทุกครั้งที่เปิดเครื่อง
# systemctl start httpd && systemctl start php-fpm # systemctl enable httpd && systemctl enable php-fpm
- ตรวจสอบสถานะการทำงานของ apache และ
# systemctl status httpd # systemctl status php-fpm
ตั้งค่า php
- ตั้งค่า timezone (เราจะตั้งค่าเฉพาะส่วนที่จำเป็นต่อการใช้งาน roundcube)
# vi /etc/php.ini
[Date] ; Defines the default timezone used by the date functions ; http://php.net/date.timezone date.timezone = Asia/Bangkok
ตั้งค่า mariadb database
- สร้าง database roundcubemail โดยกำหนด username=rcmail, password=passrc
# mysql -u root -p
# CREATE DATABASE roundcubemail CHARACTER SET utf8 COLLATE utf8_general_ci; # GRANT ALL PRIVILEGES ON roundcubemail.* TO rcmail@localhost IDENTIFIED BY 'passrc'; # FLUSH PRIVILEGES;
ตั้งค่า roundcube
# cd /var/www/html/ # wget https://github.com/roundcube/roundcubemail/releases/download/1.4.4/roundcubemail-1.4.4-complete.tar.gz # tar zvfx /var/www/html/roundcubemail-1.4.4-complete.tar.gz # mv /var/www/html/roundcubemail-1.4.4 /var/www/html/roundcubemail # cp /var/www/html/roundcubemail/config/config.inc.php.sample /var/www/html/roundcubemail/config/config.inc.php # chown -R apache:apache /var/www/html/roundcubemail
สร้าง virtualhost
# vi /etc/httpd/conf.d/rcmail.conf
<VirtualHost *:80> ServerName mail.eai.in.th ServerAdmin webmaster@eai.in.th DocumentRoot /var/www/html/roundcubemail <Directory /var/www/html/roundcubemail> Options -Indexes +FollowSymLinks AllowOverride All </Directory> ErrorLog /var/log/httpd/mail.eai.in.th-error.log CustomLog /var/log/httpd/mail.eai.in.th-access.log combined </VirtualHost>
# systemctl restart httpd
- ทดสอบเข้าเว็บโซต์
http://mail.eai.in.th/installer/
- ตั้งค่าเชื่อมต่อ database
host = localhost dbname =roundcubemail user = rcmail password = passrc db_prefix = rc_
- ตั้งค่า IMAP
ssl://mail.eai.in.th 993
- ตั้งค่า SMTP
ssl://mail.eai.in.th 465
- user, pass ของ eai email
thai@eai.in.th และ ไทย@อีเอไอ.ไทย thaiuserpassword
- การใช้ ssl แบบ self-sign อาจจะทำให้ roundcube ไม่สามารถเชื่อมต่อ mail server ได้ แก้ปัญหาโดยการ config เพิ่มเติม ดังนี้
# vi /var/www/html/roundcubemail/config/defaults.inc.php $config['imap_conn_options'] = array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false, ), ); $config['smtp_conn_options'] = array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false, ), );