ผลต่างระหว่างรุ่นของ "คู่มือการพัฒนา EAI Mail Server บน CentOS 8"

จาก Wiki_EAI
ไปยังการนำทาง ไปยังการค้นหา
 
(ไม่แสดง 9 รุ่นระหว่างกลางโดยผู้ใช้คนเดียวกัน)
แถว 1: แถว 1:
 +
<languages/>
 +
<translate>
  
 +
= EAI Email Server = <!--T:1-->
  
= EAI Email Server =
+
<!--T:2-->
 
 
 
คู่มือนี้ได้จัดทำขึ้นมาเพื่อทดสอบและเป็นแนวทางการติดตั้ง Email Server ให้สามารถรับส่ง email address ภาษาไทย หรือ Email Address Internationalization (EAI) โดยใช้ Opensource Software เพื่อหาวิธีการที่สามารถใช้งานได้ และสามารถนำไปพัฒนาต่อยอดได้  
 
คู่มือนี้ได้จัดทำขึ้นมาเพื่อทดสอบและเป็นแนวทางการติดตั้ง Email Server ให้สามารถรับส่ง email address ภาษาไทย หรือ Email Address Internationalization (EAI) โดยใช้ Opensource Software เพื่อหาวิธีการที่สามารถใช้งานได้ และสามารถนำไปพัฒนาต่อยอดได้  
  
=== 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 ===
+
== ขั้นตอนการติดตั้ง 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]
# ให้กด "เปลี่ยนการติดตั้งเครือข่าย" จะขึ้นหน้าเปลี่ยนเครือข่าย ให้กด "ตกลง" [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-->
 
 
 
 
  
=== ตั้งค่า hostname ===
+
== 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'''
  
=== ตั้งค่า firewall ===
+
== 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 '''
  
=== สร้าง SSL Cert ===
+
== 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'''
  
  
=== ติดตั้ง mariadb, postfix, dovecot ===
+
== 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'''
  
=== ตั้งค่า 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'''
  
=== ตั้งค่า postfix ===
+
== 6. ตั้งค่า postfix == <!--T:56-->
==== สร้างไฟล์เชื่อมต่อระหว่าง postfix และ mariadb ====
+
=== สร้างไฟล์เชื่อมต่อระหว่าง 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 ====
+
=== สร้าง 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" ====
+
=== แก้ไขไฟล์ "/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" ====
+
=== แก้ไขไฟล์ "/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'''
  
=== ตั้งค่า dovecot ===
+
== 7. ตั้งค่า dovecot == <!--T:71-->
==== สร้างไฟล์เชื่อมต่อระหว่าง dovecot และ mariadb ====
+
=== สร้างไฟล์เชื่อมต่อระหว่าง 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" ====
+
=== แก้ไขไฟล์ "/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'''
  
=== ทดสอบการทำงานของ EAI Email Server ===
+
== 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+] เพื่อออก
  
=== ติดตั้ง roundcube webmail ===
+
== 9. ติดตั้ง roundcube webmail == <!--T:92-->
  
== ติดตั้ง apache php ==
+
=== ติดตั้ง 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 ==
+
=== ตั้งค่า 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

ภาษาอื่น ๆ:
English • ‎ไทย

EAI Email Server

คู่มือนี้ได้จัดทำขึ้นมาเพื่อทดสอบและเป็นแนวทางการติดตั้ง Email Server ให้สามารถรับส่ง email address ภาษาไทย หรือ Email Address Internationalization (EAI) โดยใช้ Opensource Software เพื่อหาวิธีการที่สามารถใช้งานได้ และสามารถนำไปพัฒนาต่อยอดได้

Software ที่นำมาทดสอบ

  1. CentOS8 for Virtualbox [CentOS for VirtualBox]
    • user: root
    • pass: rooteai
  2. VirtualBox [Win] [Mac]
  3. VirtualBox Extension Pack [ดาวน์โหลด]
  4. Filezilla [Win] [Mac]
  5. putty [Win] (เฉพาะเครื่อง windows)
  6. Postfix 3.x [ดาวน์โหลด]
  7. Dovecot 2.x [ดาวน์โหลด]
  8. MariaDB 10.x [ดาวน์โหลด]
  9. Roundcube 1.4.x [ดาวน์โหลด] [tar]
  • ข้อ 1, 2, 3, 4, 5 แนะนำให้ติดตั้งเตรียมไว้ก่อนอบรม

ขั้นตอนการติดตั้ง CentOS8 for Virtualbox

  1. ดาวน์โหลดและติดตั้ง VirtualBox และ VirtualBox Extension Pack
  2. ดาวน์โหลดไฟล์ CentOS8 for Virtualbox (centos-eai-wokshop.ova) ที่จัดเตรียมไว้ให้ตามลิงค์ด้านบน
  3. ดับเบิ้ลคลิ๊กที่ไฟล์ centos-eai-wokshop.ova เพื่อ import เข้าโปรแกรม Virtualbox [1]
  4. หลังจาก import เสร็จเรียบร้อยแล้ว ที่โปรแกรม VirtualBox ให้ดับเบิ้ลคลิ๊กที่ centos-eai-wokshop ด้านซ้ายมือ เพื่อเปิด server
  5. ถ้าพบข้อผิดพลาด "ไม่สามารถเริ่มการทำงานเครื่อง centos-eai-workshop เนื่องจากไม่พบแผงวงจรเครือข่าย" ให้กด "เปลี่ยนการติดตั้งเครือข่าย" จะขึ้นหน้าเปลี่ยนเครือข่าย ให้กด "ตกลง" [2]
  6. เมื่อเปิดเครื่องได้แล้ว ให้ login ด้วย user, pass ที่เตรียมไว้ให้ข้างต้น และใช้คำสั่ง "ifconfig" เพื่อตรวจสอบ IP ของเครื่อง [3]
  7. ให้จด 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,
  ),
);