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

จาก Wiki_EAI
ไปยังการนำทาง ไปยังการค้นหา
 
(ไม่แสดง 46 รุ่นระหว่างกลางโดยผู้ใช้ 3 คน)
แถว 1: แถว 1:
== EAI Email Server ==
+
<languages/>
 +
<translate>
  
คู่มือนี้ได้จัดทำขึ้นมาเพื่อทดสอบและเป็นแนวทางการติดตั้ง Email Server ในรูปแบบรองรับภาษาไทย (EAI) โดยใช้ Opensource Software ในการทดสอบเพื่อหาวิธีการที่สามารถใช้งานได้ และสามารถนำไปพัฒนาต่อยอดได้ ซึ่งค่า configure ที่ผู้จัดทำใช้นั้น ไม่ได้ตายตัว สามารถลองทดสอบในรูปแบบอื่นๆได้
+
= EAI Email Server = <!--T:1-->
Software ที่นำมาทดสอบ:
+
 
• OS
+
<!--T:2-->
  • CentOS8 x86_64 [[http://mirror.kku.ac.th/centos/8.3.2011/isos/x86_64/CentOS-8.3.2011-x86_64-boot.iso ISO]] [[https://1drv.ms/u/s!AkENbjQNPN9dy8AAKqY20RgAWj7sxw?e=TZPQxS CentOS for VirtualBox]]
+
คู่มือนี้ได้จัดทำขึ้นมาเพื่อทดสอบและเป็นแนวทางการติดตั้ง Email Server ให้สามารถรับส่ง email address ภาษาไทย หรือ Email Address Internationalization (EAI) โดยใช้ Opensource Software เพื่อหาวิธีการที่สามารถใช้งานได้ และสามารถนำไปพัฒนาต่อยอดได้  
  • VirtualBox [[https://download.virtualbox.org/virtualbox/6.1.18/VirtualBox-6.1.18-142142-Win.exe Win]] [[https://download.virtualbox.org/virtualbox/6.1.18/VirtualBox-6.1.18-142142-OSX.dmg Mac]]
+
 
  • Filezilla [[https://dl4.cdn.filezilla-project.org/client/FileZilla_3.52.2_win64-setup.exe?h=nRlrhWw7NLjal-h8S-C__A&x=1615717392 Win]] [[https://dl4.cdn.filezilla-project.org/client/FileZilla_3.52.2_macosx-x86.app.tar.bz2?h=jSIej0fAkYK7rWgFBbsUPA&x=1615717392 Mac]]
+
== Software ที่นำมาทดสอบ == <!--T:3-->
  • putty [[https://the.earth.li/~sgtatham/putty/latest/w64/putty-64bit-0.74-installer.msi Win]]
+
# CentOS8 for Virtualbox [[https://1drv.ms/u/s!AkENbjQNPN9dy8AAKqY20RgAWj7sxw?e=TZPQxS CentOS for VirtualBox]]  
Postfix 3.x [[http://www.postfix.org/download.html ดาวน์โหลด]]
+
#* user: root
Dovecot 2.x [[https://www.dovecot.org/download ดาวน์โหลด]]
+
#* pass: rooteai
MariaDB 10.x [[https://downloads.mariadb.org/ ดาวน์โหลด]]
+
# VirtualBox [[https://download.virtualbox.org/virtualbox/6.1.18/VirtualBox-6.1.18-142142-Win.exe Win]] [[https://download.virtualbox.org/virtualbox/6.1.18/VirtualBox-6.1.18-142142-OSX.dmg Mac]]
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]]
+
# VirtualBox Extension Pack [[https://download.virtualbox.org/virtualbox/6.1.18/Oracle_VM_VirtualBox_Extension_Pack-6.1.18.vbox-extpack ดาวน์โหลด]]
 +
# Filezilla [[https://dl4.cdn.filezilla-project.org/client/FileZilla_3.52.2_win64-setup.exe?h=nRlrhWw7NLjal-h8S-C__A&x=1615717392 Win]] [[https://dl4.cdn.filezilla-project.org/client/FileZilla_3.52.2_macosx-x86.app.tar.bz2?h=jSIej0fAkYK7rWgFBbsUPA&x=1615717392 Mac]]
 +
# putty [[https://the.earth.li/~sgtatham/putty/latest/w64/putty-64bit-0.74-installer.msi Win]] (เฉพาะเครื่อง windows)
 +
# Postfix 3.x [[http://www.postfix.org/download.html ดาวน์โหลด]]
 +
# Dovecot 2.x [[https://www.dovecot.org/download ดาวน์โหลด]]
 +
# MariaDB 10.x [[https://downloads.mariadb.org/ ดาวน์โหลด]]
 +
# 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 แนะนำให้ติดตั้งเตรียมไว้ก่อนอบรม
 +
 
 +
== ขั้นตอนการติดตั้ง CentOS8 for Virtualbox == <!--T:5-->
 +
# ดาวน์โหลดและติดตั้ง VirtualBox และ VirtualBox Extension Pack
 +
# ดาวน์โหลดไฟล์ 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]
 +
# หลังจาก import เสร็จเรียบร้อยแล้ว ที่โปรแกรม VirtualBox ให้ดับเบิ้ลคลิ๊กที่ centos-eai-wokshop ด้านซ้ายมือ เพื่อเปิด server
 +
# ถ้าพบข้อผิดพลาด "ไม่สามารถเริ่มการทำงานเครื่อง 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]
 +
# ให้จด 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])
 +
 
 +
<!--T:6-->
 +
* หมายเหตุ
 +
: คู่มือนี้ไม่ได้อธิบายถึงการติดตั้ง Centos 8
 +
: Postfix ต้องเป็น Version 3.x.x ขึ้นไป จะรองรับ EAI
 +
: หากจะนำไปใช้งานจริงจะต้องจดทะเบียนโดเมน และมี dns server ด้วย
 +
 
 +
= การติดตั้ง EAI Email Server = <!--T:7-->
 +
 
 +
== 1. ตั้งค่า hostname == <!--T:8-->
 +
 
 +
<!--T:9-->
 +
1. อัพเดตแพคเกจของ mail serverให้เป็นเวอร์ชั่นล่าสุด ด้วยคำสั่ง
 +
'''# yum -y update'''
 +
 
 +
<!--T:10-->
 +
2. กำหนดชื่อ hostname ในตัวอย่างนี้กำหนดชื่อว่า mail.eai.in.th ด้วยคำสั่ง
 +
'''# hostnamectl set-hostname ''[[mail.eai.in.th]]'''''
 +
 
 +
<!--T:11-->
 +
3. เพิ่มค่า hostname ชื่อเดียวกับชื่อที่กำหนดข้างต้นในไฟล์ hosts
 +
'''# vi /etc/hosts'''
 +
 
 +
<!--T:12-->
 +
''ตัวอย่างไฟล์ 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]]'''''
 +
 
 +
<!--T:13-->
 +
''*ระวัง envelopment ของทาง partner ว่าติดตั้ง centos ในรูปแบบใดมาให้ (อาจจะต้องติดตั้ง service เพิ่ม หากติดตั้งมาแบบ minimal เช่นใช้คำสั่ง vi ไม่ได้)''
 +
 
 +
<!--T:14-->
 +
4. ติดตั้ง wget เพื่อใช้ดาวน์โหลดซอฟแวร์ที่จำเป็นต้องใช้งานเพิ่ม
 +
'''# yum -y install wget'''
 +
 
 +
<!--T:15-->
 +
5. ติดตั้ง telnet เพื่อทดสอบการทำงานของ email server
 +
'''# yum -y install telnet'''
 +
 
 +
== 2. ตั้งค่า firewall == <!--T:16-->
 +
1. ตรวจสอบสถานะ firewalld service บน mail server
 +
*ต้องมีสถานะ active (running)
 +
 
 +
<!--T:17-->
 +
'''# systemctl status firewalld'''
 +
 
 +
<!--T:18-->
 +
''ตัวอย่าง''
 +
 
 +
<!--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 ที่เปิดอยู่
 +
'''# firewall-cmd --get-active-zones'''
 +
''ตัวอย่าง''
 +
'''public
 +
'''interfaces: ens32
 +
 
 +
<!--T:21-->
 +
3. ตรวจสอบรายการ services ของ firewall ที่เปิดอยู่ที่ zone public
 +
'''# firewall-cmd --zone=public --list-services'''
 +
 
 +
<!--T:22-->
 +
''ตัวอย่าง''
 +
''' cockpit dhcpv6-client ssh '''
 +
 
 +
<!--T:23-->
 +
4. เปิด firewall services ที่ zone public ของ mail server (สามารถเปิดเท่าต้องการได้)
 +
'''# firewall-cmd --permanent --zone=public --add-service={http,https,mysql,smtp,smtps,imap,imaps}
 +
'''# firewall-cmd --reload
 +
 
 +
<!--T:24-->
 +
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)''
 +
'''# firewall-cmd --zone=public --list-services'''
 +
 
 +
<!--T:26-->
 +
''ตัวอย่าง''
 +
''' cockpit dhcpv6-client <span style='color:red'>http https imap imaps mysql smtp smtps</span> ssh '''
 +
 
 +
<!--T:27-->
 +
6. ในตัวอย่างนี้เราแนะนำให้ปิดการทำงานของ SELinux เพื่อความสะดวกในการตั้งค่า (ไม่แนะนำให้ทำกับเครื่อง production)
 +
*เปลี่ยน SELinux=enforcing เป็น SELinux=disabled
 +
'''# vi /etc/selinux/config'''
 +
 
 +
<!--T:28-->
 +
''ตัวอย่าง''
 +
 
 +
<!--T:29-->
 +
'''# 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=<span style='color:red'>disabled</span>
 +
'''# 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'''
 +
 
 +
<!--T:30-->
 +
''ตัวอย่าง''
 +
 
 +
<!--T:31-->
 +
''' disabled '''
 +
 
 +
== 3. สร้าง SSL Cert == <!--T:32-->
 +
*เป็นขั้นตอนการสร้าง SSL key เตรียมไว้ใช้งานกับ postfix และ dovecot
 +
1. สร้าง private key
 +
'''# cd /etc/pki/tls/certs
 +
'''# /usr/bin/openssl genrsa -aes128 2048 > '''[[eai.key]]'''
 +
 
 +
<!--T:33-->
 +
'' ตัวอย่าง ''
 +
'''Generating RSA private key, 2048 bit long modulus
 +
'''...
 +
'''...
 +
'''e is 65537 (0x10001)
 +
'''Enter pass phrase: '''[[#set passphrase]]'''
 +
'''Verifying - Enter pass phrase:  '''[[#confirm]]'''
 +
 
 +
<!--T:34-->
 +
2. ถอด Passphase ออกจาก private key ที่สร้างขึ้น
 +
'''# /usr/bin/openssl rsa -in '''[[eai.key]]''' -out '''[[eai.key]]'''
 +
 
 +
<!--T:35-->
 +
'' ตัวอย่าง ''
 +
 
 +
<!--T:36-->
 +
'''Enter pass phrase for eai.key:  '''[[#input passphrase]]'''
 +
'''writing RSA key'''
 +
 
 +
<!--T:37-->
 +
3. สร้าง 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
 +
'''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]]'''
 +
 
 +
<!--T:39-->
 +
4. ทำการ generate key
 +
'''# /usr/bin/openssl x509 -in '''[[eai.csr]]''' -out '''[[eai.crt]]''' -req -signkey '''[[eai.key]]''' -days 365'''
 +
 
 +
<!--T:40-->
 +
'' ตัวอย่าง ''
 +
 
 +
<!--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
 +
'''Getting Private key'''
 +
 
 +
 
 +
== 4. ติดตั้ง mariadb, postfix, dovecot == <!--T:42-->
 +
1. ติดตั้ง mariadb , Postfix , Dovecot และ Packet ที่จำเป็นกับ Server
 +
'''# yum -y install postfix dovecot mariadb-server dovecot-mysql postfix-mysql'''
 +
 
 +
<!--T:43-->
 +
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'''
 +
 
 +
<!--T:44-->
 +
3. ดูสถานะการทำงานของ postfix, dovecot, maridb
 +
'''# systemctl status postfix'''
 +
'''# systemctl status dovecot'''
 +
'''# systemctl status mariadb'''
 +
 
 +
== 5. ตั้งค่า mariadb == <!--T:45-->
 +
1. ตั้งค่า UTF8 ให้กับ mysql เพื่อให้รองรับภาษาไทย โดยเพิ่มคำสั่งด้าล่างลงใน /etc/my.cnf.d/maridb-server.cnf ใต้ [mysqld]
 +
'''# vi /etc/my.cnf.d/mariadb-server.cnf'''
 +
 
 +
<!--T:46-->
 +
#
 +
# 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]
 +
 
 +
<!--T:47-->
 +
2. สั่ง restart mariadb
 +
'''# systemctl restart mariadb'''
 +
 
 +
<!--T:48-->
 +
3. ตั้งค่าความปลอดภัยการเข้างาน mysql โดยจะมีการตั้ง password ของ root user เพื่อ login เข้าใช้งาน (*กำหนดเพียง password ใหม่ และในส่วนอื่นๆให้ enter ผ่านได้เลย)
 +
'''#  mysql_secure_installation'''
 +
 
 +
<!--T:49-->
 +
4. Login ข้าใช้งาน mysql โดยใช้ password ของ root user ที่ได้ตั้งไว้
 +
'''# mysql -u root -p'''
 +
 
 +
<!--T:50-->
 +
5. สร้าง DB เพื่อใช้งานการเก็บข้อมูลของการใช้งาน Email Server
 +
'''# CREATE DATABASE ''[[eaimail]]'';'''
 +
'''# USE ''[[eaimail]]'';'''
 +
 
 +
<!--T:51-->
 +
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;'''
 +
 
 +
<!--T:52-->
 +
7. ตรวจสอบ userที่สร้างขึ้นใหม่โดย
 +
'''# SHOW GRANTS FOR ''[['yourdbuser']]''@'localhost';'''
 +
 
 +
<!--T:53-->
 +
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) );'''
 +
 
 +
<!--T:54-->
 +
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']]));'''
 +
 
 +
<!--T:55-->
 +
10. กำหนด Email ที่เข้ามายัง Email Account ภาษาไทย ให้ forward เข้า Email-Account ภาษาอังกฤษ เนื่องจากระบบไม่สามารถสร้าง mailbox เป็น ภาษาไทยได้
 +
'''# INSERT INTO forwardings (source,destination) VALUES ([['ไทย@อีเอไอ.ไทย']],[['thai@eai.in.th']]);'''
 +
'''# quit'''
 +
 
 +
== 6. ตั้งค่า postfix == <!--T:56-->
 +
=== สร้างไฟล์เชื่อมต่อระหว่าง postfix และ mariadb ===
 +
* สร้างไฟล์ script เพื่อใช้สำหรับเรียกค่า domain จาก DB
 +
'''# vi /etc/postfix/mysql-virtual_domains.cf'''
 +
 
 +
<!--T:57-->
 +
user = '''''[[yourdbuser]]'''''
 +
password = '''''[[yourdbpassword]]'''''
 +
dbname = '''''[[eaimail]]'''''
 +
query = SELECT domain AS virtual FROM domains WHERE domain='%s'
 +
hosts = 127.0.0.1
 +
 
 +
<!--T:58-->
 +
* สร้างไฟล์ script เพื่อใช้สำหรับ forward email
 +
'''# vi /etc/postfix/mysql-virtual_forwardings.cf'''
 +
 
 +
<!--T:59-->
 +
user = '''''[[yourdbuser]]'''''
 +
password = '''''[[yourdbpassword]]'''''
 +
dbname = '''''[[eaimail]]'''''
 +
query = SELECT destination FROM forwardings WHERE source='%s'
 +
hosts = 127.0.0.1
 +
 
 +
<!--T:60-->
 +
* สร้างไฟล์ script เพื่อใช้สำหรับ สร้าง mailbox และใช้ login
 +
'''# vi /etc/postfix/mysql-virtual_mailboxes.cf'''
 +
 
 +
<!--T:61-->
 +
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
 +
 
 +
<!--T:62-->
 +
* สร้างไฟล์ script เพื่อใช้สำหรับ ส่งต่อ email ทั้งหมด ไปยัง smtp server อื่น ซึ่งใช้ในกรณีที่ host เป็น IP Address
 +
'''# vi /etc/postfix/mysql-virtual_email2email.cf'''
 +
 
 +
<!--T:63-->
 +
user = '''''[[yourdbuser]] '''''
 +
password = '''''[[yourdbpassword]]'''''
 +
dbname = '''''[[eaimail]]'''''
 +
query = SELECT email FROM users WHERE email='%s'
 +
hosts = 127.0.0.1
 +
 
 +
<!--T:64-->
 +
* กำหนดสิทธิ์ให้กับ script ที่สร้างขึ้น
 +
'''# chmod 640 /etc/postfix/mysql-virtual_*.cf && chgrp postfix /etc/postfix/mysql-virtual_*.cf'''
 +
 
 +
=== สร้าง user vmail สำหรับอ่าน/เขียน mailbox === <!--T:65-->
 +
* สร้าง group เพื่อใช้กับ mailbox
 +
'''# groupadd -g 5000 vmail'''
 +
'''# useradd -g vmail -u 5000 vmail -d /home/vmail -m'''
 +
 
 +
=== แก้ไขไฟล์ "/etc/postfix/main.cf" === <!--T:66-->
 +
'''# 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"
 +
 
 +
<!--T:67-->
 +
* ตัวอย่างไฟล์
 +
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" === <!--T:68-->
 +
'''# 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}"
 +
 
 +
<!--T:69-->
 +
* ตัวอย่างไฟล์
 +
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}'''
 +
 
 +
<!--T:70-->
 +
*  restart postfix
 +
'''# systemctl restart postfix'''
 +
 
 +
== 7. ตั้งค่า dovecot == <!--T:71-->
 +
=== สร้างไฟล์เชื่อมต่อระหว่าง dovecot และ mariadb ===
 +
* สร้าง script เพื่อให้ dovecot ใช้งานกับ SQL ที่เราได้กำหนดก่อนหน้านี้
 +
'''# vi /etc/dovecot/dovecot-sql.conf.ext'''
 +
 
 +
<!--T:72-->
 +
'''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';'''
 +
 
 +
<!--T:73-->
 +
* กำหนดสิทธิ์อนุญาตให้ user ที่อยู่ใน dovecot group ใช้งาน
 +
'''# chmod 640 /etc/dovecot/dovecot-sql.conf.ext && chgrp dovecot /etc/dovecot/dovecot-sql.conf.ext
 +
 
 +
=== แก้ไขไฟล์ "/etc/dovecot/dovecot.conf" === <!--T:74-->
 +
* Backup ค่า config เดิมไว่ก่อน
 +
'''# mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf-backup'''
 +
 
 +
<!--T:75-->
 +
* ตั้งค่า config dovecot โดยสร้างไฟล์ให้ และใส่คำสั่งตามด้านล่าง
 +
'''# vi /etc/dovecot/dovecot.conf'''
 +
''ตัวอย่าง''
 +
 
 +
<!--T:76-->
 +
'''protocols = imap pop3 lmtp
 +
'''log_timestamp = "%Y-%m-%d %H:%M:%S "
 +
'''mail_location = maildir:/home/vmail/%d/%n/Maildir
 
   
 
   
*คู่มือนี้ไม่ได้อธิบายถึงการติดตั้ง Centos 8
+
'''ssl_cert = </etc/pki/tls/certs/'''[[eai.crt]]'''
*Postfix ต้องเป็น Version 3.x.x ขึ้นไป จะรองรับ EAI
+
'''ssl_key = </etc/pki/tls/certs/'''[[eai.key]]'''
*ผู้จัดทำได้ทำการจด domain เป็น eai.in.th และ อีเอไอ.ไทย ไว้เสร็จเรียบร้อยแล้ว
+
'''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
 +
'''}'''
 +
 
 +
<!--T:77-->
 +
* สั่ง restart dovecot
 +
'''# systemctl restart dovecot'''
 +
 
 +
== 8. ทดสอบการทำงานของ EAI Email Server == <!--T:78-->
 +
1. ทดสอบ imap
 +
'''# telnet localhost imap'''
 +
 
 +
<!--T:79-->
 +
2. ได้ผลตามด้านล่าง และ ใช้คำสั่ง quit เพื่ออแกจาก telnet
 +
'''Trying 127.0.0.1...'''
 +
'''Connected to localhost.localdomain.'''
 +
'''Escape character is '^]'.'''
 +
'''+OK Dovecot ready.'''
 +
 
 +
<!--T:80-->
 +
3. แก้ใขไฟล์ /etc/aliases โดยเพิ่มบรรทัดตามด้านล่าง
 +
'''# vi /etc/aliases'''
 +
 
 +
<!--T:81-->
 +
'''mailer-daemon: postmaster'''
 +
'''postmaster: root'''
 +
'''''[[root: postmaster@eai.in.th]]'''''
 +
 
 +
<!--T:82-->
 +
4 สั่ง update aliases และ restart postfix
 +
'''# newaliases'''
 +
'''# systemctl restart postfix'''
 +
 
 +
<!--T:83-->
 +
5. ทดสอบ smtp server
 +
'''# telnet localhost 25'''
 +
'''# ehlo localhost'''
 +
 
 +
<!--T:84-->
 +
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'''
 +
 
 +
<!--T:85-->
 +
7. ติดตั้ง mailx และทดสอบส่ง email
 +
'''# yum install mailx'''
 +
'''# mailx thai@eai.in.th ''(ใส่ subject แล้ว enter ตามด้วยเนื้อหา และใช้ Ctrl+D เพื่อส่งออก)'''''
 +
 
 +
<!--T:86-->
 +
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'''
 +
 
 +
<!--T:87-->
 +
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'''
 +
 
 +
<!--T:88-->
 +
10. ตรวจสอบ mailbox เมื่อมีการรับส่ง-ส่ง Email จะสร้างขึ้นโดย dovecot ซึ่งจะได้ผลตามภาพ
 +
'''# cd /home/vmail/eai.in.th/thai/Maildir'''
 +
'''# find'''
 +
 
 +
<!--T:89-->
 +
'''.'''
 +
'''./dovecot-uidlist'''
 +
'''./cur'''
 +
'''./new'''
 +
'''./new/1285609582.P6115Q0M368794.li172-137'''
 +
'''./dovecot.index'''
 +
'''./dovecot.index.log'''
 +
'''./tmp'''
 +
 
 +
<!--T:90-->
 +
11. ตรวจสอบ mailbox โดยใช้ mail client คือ mutt เพื่อดู email ภายใน mailbox
 +
'''# yum install mutt'''
 +
'''# mutt -f .'''
 +
 
 +
<!--T:91-->
 +
12. ทดสอบการส่งเมลในรูปแบบ eai
 +
'''# telnet localhost 25'''
 +
'''# EHLO localhost'''
 +
'''# MAIL FROM: ธนากานต์@อีเอไอ.ไทย SMTPUTF8'''
 +
'''# RCPT TO: ธนากานต์@คน.ไทย'''
 +
'''# data'''
 +
'''# Subject: eai test'''
 +
'''# เทสอีเมลส์ภาษาไทย'''
 +
'''# .'''
 +
*ใช้เครื่องหมาย “.” เพื่อจบข้อความและส่งข้อความ
 +
*กด Ctrl+] เพื่อออก
 +
 
 +
== 9. ติดตั้ง roundcube webmail == <!--T:92-->
 +
 
 +
=== ติดตั้ง apache php === <!--T:93-->
 +
 
 +
<!--T:94-->
 +
* ติดตั้ง 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
 +
 
 +
<!--T:95-->
 +
* ใช้คำสั่งติดตั้ง 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
 +
 
 +
<!--T:96-->
 +
* ใช้คำสั่ง start service apache และ php และให้เริ่มทำงานโดยอัติโนมัติทุกครั้งที่เปิดเครื่อง
 +
'''# systemctl start httpd && systemctl start php-fpm
 +
'''# ​systemctl enable httpd && systemctl enable php-fpm
 +
 
 +
<!--T:97-->
 +
* ตรวจสอบสถานะการทำงานของ apache และ
 +
'''# systemctl status httpd
 +
'''# systemctl status php-fpm
 +
 
 +
=== ตั้งค่า php === <!--T:98-->
 +
* ตั้งค่า timezone (เราจะตั้งค่าเฉพาะส่วนที่จำเป็นต่อการใช้งาน roundcube)
 +
'''# vi /etc/php.ini
 +
 
 +
<!--T:99-->
 +
[Date]
 +
; Defines the default timezone used by the date functions
 +
; http://php.net/date.timezone
 +
date.timezone = Asia/Bangkok
 +
 
 +
=== ตั้งค่า mariadb database === <!--T:100-->
 +
* สร้าง database roundcubemail โดยกำหนด username=rcmail, password=passrc
 +
'''# mysql -u root -p
 +
 
 +
<!--T:101-->
 +
'''# CREATE DATABASE roundcubemail CHARACTER SET utf8 COLLATE utf8_general_ci;
 +
'''# GRANT ALL PRIVILEGES ON roundcubemail.* TO rcmail@localhost IDENTIFIED BY 'passrc';
 +
'''# FLUSH PRIVILEGES;
 +
 
 +
=== ตั้งค่า roundcube === <!--T:102-->
 +
'''# 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 === <!--T:103-->
 +
'''# vi /etc/httpd/conf.d/rcmail.conf
 +
 
 +
<!--T:104-->
 +
<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>
 +
 
 +
<!--T:105-->
 +
'''# systemctl restart httpd
 +
 
 +
<!--T:106-->
 +
* ทดสอบเข้าเว็บโซต์
 +
'''http://mail.eai.in.th/installer/
 +
 
 +
<!--T:107-->
 +
* ตั้งค่าเชื่อมต่อ database
 +
 
 +
<!--T:108-->
 +
host = localhost
 +
dbname =roundcubemail
 +
user = rcmail
 +
password = passrc
 +
db_prefix = rc_
 +
 
 +
<!--T:109-->
 +
* ตั้งค่า IMAP
 +
ssl://mail.eai.in.th
 +
993
 +
 
 +
<!--T:110-->
 +
* ตั้งค่า SMTP
 +
ssl://mail.eai.in.th
 +
465
 +
 
 +
<!--T:111-->
 +
* user, pass ของ eai email
 +
thai@eai.in.th และ ไทย@อีเอไอ.ไทย
 +
thaiuserpassword
 +
 
 +
<!--T:112-->
 +
* การใช้ 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,
 +
  ),
 +
);
  
== การติดตั้ง EAI Email Server ==
+
</translate>
=== [[ตั้งค่า hostname]] ===
 
  
=== [[2. ตั้งค่า firewall ของ EAI Email Server บน CentOS 8]] ===
+
[[Category: EAI]]
=== [[3. สร้าง SSL ของ EAI Email Server บน CentOS 8]] ===
 
=== [[4. ติดตั้ง mariadb, postfix, dovecot ของ EAI Email Server บน CentOS 8]] ===
 
=== [[5. ตั้งค่า mariadb ของ EAI Email Server บน CentOS 8]] ===
 
=== [[6. ตั้งค่า postfix ของ EAI Email Server บน CentOS 8]] ===
 
=== [[7. ตั้งค่า dovecot ของ EAI Email Server บน CentOS 8]] ===
 
=== [[8. ทดสอบ EAI Email Server บน CentOS 8]] ===
 
=== [[9. ติดตั้ง squirrelmail ของ EAI Email Server บน CentOS 8]] ===
 

รุ่นแก้ไขปัจจุบันเมื่อ 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,
  ),
);