ผลต่างระหว่างรุ่นของ "พัฒนาบน CentOS 8"

จาก Wiki_EAI
ไปยังการนำทาง ไปยังการค้นหา
It (คุย | ส่วนร่วม)
ไม่มีความย่อการแก้ไข
Photchanan (คุย | ส่วนร่วม)
ล Photchanan ย้ายหน้า พัฒนาบน CentOS 8 (Thai Version) ไปยัง พัฒนาบน CentOS 8
 
(ไม่แสดง 3 รุ่นระหว่างกลางโดยผู้ใช้คนเดียวกัน)
บรรทัดที่ 1: บรรทัดที่ 1:
== EAI Email Server ==
= EAI Email Server =


คู่มือนี้ได้จัดทำขึ้นมาเพื่อทดสอบและเป็นแนวทางการติดตั้ง Email Server ในรูปแบบรองรับภาษาไทย (EAI) โดยใช้ Opensource  Software ในการทดสอบเพื่อหาวิธีการที่สามารถใช้งานได้ และสามารถนำไปพัฒนาต่อยอดได้ ซึ่งค่า configure ที่ผู้จัดทำใช้นั้น ไม่ได้ตายตัว สามารถลองทดสอบในรูปแบบอื่นๆได้  
คู่มือนี้ได้จัดทำขึ้นมาเพื่อทดสอบและเป็นแนวทางการติดตั้ง Email Server ในรูปแบบรองรับภาษาไทย (EAI) โดยใช้ Opensource  Software ในการทดสอบเพื่อหาวิธีการที่สามารถใช้งานได้ และสามารถนำไปพัฒนาต่อยอดได้ ซึ่งค่า configure ที่ผู้จัดทำใช้นั้น ไม่ได้ตายตัว สามารถลองทดสอบในรูปแบบอื่นๆได้  
บรรทัดที่ 13: บรรทัดที่ 13:
*ผู้จัดทำใช้ putty และ winscp เป็นเครื่องมือในการจัดการ server
*ผู้จัดทำใช้ putty และ winscp เป็นเครื่องมือในการจัดการ server


== การติดตั้ง EAI Email Server ==
= การติดตั้ง EAI Email Server =
[[1. ตั้งค่า hostname ของ EAI Email Server บน CentOS 8]]


[[2. ตั้งค่า firewall ของ EAI Email Server บน CentOS 8]]
== 1. ตั้งค่า hostname ของ EAI Email Server ==
1. อัพเดตแพคเกจของ mail serverให้เป็นเวอร์ชั่นล่าสุด ด้วยคำสั่ง
'''# yum -y update'''


[[3. สร้าง SSL ของ EAI Email Server บน CentOS 8]]
2. กำหนดชื่อ hostname ในตัวอย่างนี้กำหนดชื่อว่า mail.eai.in.th ด้วยคำสั่ง
'''# hostnamectl set-hostname ''[[mail.eai.in.th]]'''''


[[4. ติดตั้ง mariadb, postfix, dovecot ของ EAI Email Server บน CentOS 8]]
3. เพิ่มค่า hostname ชื่อเดียวกับชื่อที่กำหนดข้างต้นในไฟล์ hosts
'''# vi /etc/hosts'''


[[5. ตั้งค่า mariadb ของ EAI Email Server บน CentOS 8]]
''ตัวอย่างไฟล์ 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]]'''''


[[6. ตั้งค่า postfix ของ EAI Email Server บน CentOS 8]]
''*ระวัง envelopment ของทาง partner ว่าติดตั้ง centos ในรูปแบบใดมาให้ (อาจจะต้องติดตั้ง service เพิ่ม หากติดตั้งมาแบบ minimal เช่นใช้คำสั่ง vi ไม่ได้)''


[[7. ตั้งค่า dovecot ของ EAI Email Server บน CentOS 8]]
4. ติดตั้ง wget เพื่อใช้ดาวน์โหลดซอฟแวร์ที่จำเป็นต้องใช้งานเพิ่ม
'''# yum install wget'''


[[8. ทดสอบ EAI Email Server บน CentOS 8]]
5. ติดตั้ง telnet เพื่อทดสอบการทำงานของ email server
'''# yum install telnet'''
 
 
== 2. ตั้งค่า firewall ของ EAI Email Server ==
1. ตรวจสอบสถานะ firewalld service บน mail server
*ต้องมีสถานะ active (running)
 
'''# systemctl status firewalld'''
 
''ตัวอย่าง''
 
'''Active: <span style='color:red'>active (running)</span> 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
'''# firewall-cmd --permanent --zone=public --add-service=https
'''# firewall-cmd --permanent --zone=public --add-service=mysql
'''# firewall-cmd --permanent --zone=public --add-service=smtp
'''# firewall-cmd --permanent --zone=public --add-service=smtps
'''# firewall-cmd --permanent --zone=public --add-service=imap
'''# firewall-cmd --permanent --zone=public --add-service=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 <span style='color:red'>http https imap imaps mysql smtp smtps</span> 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=<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'''
 
''ตัวอย่าง''
 
''' disabled '''
 
 
== 3. สร้าง SSL ของ EAI Email Server ==
*เป็นขั้นตอนการสร้าง 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 3650'''
 
'' ตัวอย่าง ''
 
'''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 ของ EAI Email Server ==
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 ของ EAI Email Server ==
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. สร้างตารางใช้เก็บค่า Domain
'''# CREATE TABLE domains (domain varchar(50) NOT NULL, PRIMARY KEY (domain) );'''
 
9. สร้างตารางใช้สำหรับ forward mail
'''# CREATE TABLE forwardings (source varchar(80) NOT NULL, destination TEXT NOT NULL, PRIMARY KEY (source) );'''
 
10. สร้างตาราง user เพื่อใช้สร้าง mailbox และออกจาก mysql
'''# CREATE TABLE users (email varchar(80) NOT NULL, password varchar(20) NOT NULL, PRIMARY KEY (email) );'''
'''# quit'''
 
11. สั่ง restart mariadb
'''# systemctl restart mariadb'''
 
12. Login เข้า mariadb
'''# mysql -u root -p'''
 
13. เลือก DB ของ mail server และกำหนด Domain ภาษาอังกฤษ และภาษาไทย และ Email-Account ภาษาอังกฤษ) พร้อม password เพื่อเริ่มใช้งาน
'''# USE eaimail;'''
'''# 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']]));'''
 
14. กำหนด Email ที่เข้ามายัง Email Account ภาษาไทย ให้ forward เข้า Email-Account ภาษาอังกฤษ เนื่องจากระบบไม่สามารถสร้าง mailbox เป็น ภาษาไทยได้
'''# INSERT INTO forwardings (source,destination) VALUES ([['ไทย@อีเอไอ.ไทย']],[['thai@eai.in.th']]);'''
'''# quit'''
 
 
== 6. ตั้งค่า postfix ของ EAI Email Server ==
1. สร้างไฟล์ 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
 
 
2. สร้างไฟล์ 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
 
 
3. สร้างไฟล์ 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
 
 
4. สร้างไฟล์ 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
 
 
5. กำหนดสิทธิ์ให้กับ script ที่สร้างขึ้น
'''# chmod o= /etc/postfix/mysql-virtual_*.cf'''
'''# chgrp postfix /etc/postfix/mysql-virtual_*.cf'''
 
 
6. สร้าง group เพื่อใช้กับ mailbox
'''# groupadd -g 5000 vmail'''
'''# useradd -g vmail -u 5000 vmail -d /home/vmail -m'''
 
 
1. แก้ไขไฟล์ /etc/postfix/main.cf โดยเปิดการใช้งานหรือเพิ่มค่า configure ตามด้านล่าง *(สังเกตุหัวข้อ virtual_alias_domains ที่เพิ่มเป็น Domain ภาษาไทย)
'''# vi /etc/postfix/main.cf'''
 
myhostname = '''[[mail.eai.in.th]]'''
mydomain = '''[[eai.in.th]]'''
myorigin = $mydomain
inet_interfaces = all
inet_protocols = ipv4
mydestination =  localhost, localhost.localdomain
mynetworks = 127.0.0.1
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
readme_directory = no
smtpd_tls_cert_file = /etc/pki/tls/certs/'''[[eai.crt]]'''
smtpd_tls_key_file = /etc/pki/tls/certs/'''[[eai.key]]'''
smtpd_tls_security_level = may
 
meta_directory = /etc/postfix
shlib_directory = no
message_size_limit = 30720000
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'''
 
2. แก้ไขไฟล์ /etc/postfix/master.cf โดยเพิ่มคำสั่งลงด้านล่างสุดของไฟล์ และเปิดใช้งาน หรือเพิ่ม เพียงแค่คำสั่งด้าานล่าง นอกเหนือจากนั้น ให้ปิดการใช้งาน #
'''# vi /etc/postfix/master.cf'''
 
'''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}'''
 
3. สั่งใช้งานการส่ง email ภาษาไทยและทำการ restart postfix
'''# postconf "smtputf8_enable = yes"'''
'''# postfix reload'''
'''# systemctl restart postfix.service'''
 
 
== 7. ตั้งค่า dovecot ของ EAI Email Server ==
1. Back-up ค่า config เดิมไว่ก่อน
'''# mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf-backup'''
 
 
2. ตั้งค่า 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
'''}'''
 
 
3. สร้าง 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';'''
 
 
4. กำหนดสิทธิ์อนุญาตให้ user ที่อยู่ใน dovecot group ใช้งาน
'''# chgrp dovecot /etc/dovecot/dovecot-sql.conf.ext'''
'''# chmod o= /etc/dovecot/dovecot-sql.conf.ext'''
'''# systemctl restart dovecot.service'''
 
 
== 8. ทดสอบ EAI Email Server ==
1. ติดตั้ง telnet
'''# yum install telnet'''
'''# telnet localhost pop3'''
 
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.service'''
 
1. ทดสอบ smtp server
'''# telnet localhost 25'''
'''# ehlo localhost'''
 
2. จะได้ผลลัพธ์ตามด้านล่าง
'''250-mail.eai.in.th'''
'''250-PIPELINING'''
'''250-SIZE 30720000'''
'''250-VRFY'''
'''250-ETRN'''
'''250-STARTTLS'''
'''250-ENHANCEDSTATUSCODES'''
'''250-8BITMIME'''
'''250-DSN'''
'''250 SMTPUTF8'''
 
1. ติดตั้ง mailx และทดสอบส่ง email
'''# yum install mailx'''
'''# mailx thai@eai.in.th ''(ใส่ subject แล้ว enter ตามด้วยเนื้อหา และใช้ Ctrl+D เพื่อส่งออก)'''''
 
2. ตรวจสอบ 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'''
 
3. ตรวจสอบ 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'''
 
4. ตรวจสอบ 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'''
 
5. ตรวจสอบ mailbox โดยใช้ mail client คือ mutt เพื่อดู email ภายใน mailbox
'''# yum install mutt'''
'''# mutt -f .'''
 
6. ทดสอบการส่งเมลในรูปแบบ eai
'''# telnet localhost 25'''
'''# EHLO localhost'''
'''# MAIL FROM: ธนากานต์@อีเอไอ.ไทย SMTPUTF8'''
'''# RCPT TO: ธนากานต์@คน.ไทย'''
'''# data'''
'''# Subject: eai test'''
'''# เทสอีเมลส์ภาษาไทย'''
'''# .'''
*ใช้เครื่องหมาย “.” เพื่อจบข้อความและส่งข้อความ
*กด Ctrl+] เพื่อออก
 
 
== 9. ติดตั้ง squirrelmail ของ EAI Email Server ==
1. ติดตั้ง squirrelmail โดย Centos 8 ยังไม่มี squirrelmail ใน repo ทำให้ติดตั้งโดยใช้คำสั่ง yum ไม่ได้ จึงต้องติดตั้งด้วยตัวเอง
*ติดตั้ง php , Apache
'''# yum install php'''
'''# systemctl start php-fpm.service'''
'''# systemctl enable php-fpm.service'''
'''# yum install httpd'''
'''# systemctl start httpd'''
'''# systemctl enable httpd'''
 
2. นำ squirrelmail ที่ได้เตรียมไว้ให้นำไปไว้ที่ /varwww/html/
'''# cd var/www/html/'''
(copy squirrelmail ไปไว้ /varwww/html/ ซึ่งผู้จัดทำใช้ winscp ในการทำงาน)
 
3. สร้าง directory เพิ่มให้กับ squirrelmail
'''# mkdir /var/lib/squirrelmail'''
'''# cd /var/lib/squirrelmail/data'''
'''# chmod ugo+rwx /var/lib/squirrelmail/data'''
'''# mkdir /var/spool/squirrelmail'''
'''# mkdir /var/spool/squirrelmail/attach/'''
'''# chmod ugo+rwx /var/spool/squirrelmail/attach'''
 
4. ทดสอบ login เข้าใช้งานผ่าน web browsers โดยใช้ IP ของ Server ที่ได้รับและตามด้วย /squirrelmail  เช่น http://192.168.1.10/squirrelmail/
'''# ทดสอบรับและส่งเมล'''


[[9. ติดตั้ง squirrelmail ของ EAI Email Server บน CentOS 8]]


[[Category: EAI]]
[[Category: EAI]]

รุ่นแก้ไขปัจจุบันเมื่อ 03:16, 12 กรกฎาคม 2564

EAI Email Server

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

Software ที่นำมาทดสอบ:
• Centos8_x64_1905
• Postfix 3.3.1
• Dovecot 2.2.36
• MariaDB 10.3.11
• Squirrelmail .1.4.23
  • คู่มือนี้ไม่ได้อธิบายถึงการติดตั้ง Centos 8
  • Postfix ต้องเป็น Version 3.x.x ขึ้นไป จะรองรับ EAI
  • ผู้จัดทำได้ทำการจด domain เป็น eai.in.th และ อีเอไอ.ไทย ไว้เสร็จเรียบร้อยแล้ว
  • ผู้จัดทำใช้ putty และ winscp เป็นเครื่องมือในการจัดการ server

การติดตั้ง EAI Email Server

1. ตั้งค่า hostname ของ EAI Email Server

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 install wget

5. ติดตั้ง telnet เพื่อทดสอบการทำงานของ email server

# yum install telnet


2. ตั้งค่า firewall ของ EAI Email Server

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
# firewall-cmd --permanent --zone=public --add-service=https
# firewall-cmd --permanent --zone=public --add-service=mysql
# firewall-cmd --permanent --zone=public --add-service=smtp
# firewall-cmd --permanent --zone=public --add-service=smtps
# firewall-cmd --permanent --zone=public --add-service=imap
# firewall-cmd --permanent --zone=public --add-service=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 ของ EAI Email Server

  • เป็นขั้นตอนการสร้าง 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 3650

ตัวอย่าง

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 ของ EAI Email Server

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 ของ EAI Email Server

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. สร้างตารางใช้เก็บค่า Domain

# CREATE TABLE domains (domain varchar(50) NOT NULL, PRIMARY KEY (domain) );

9. สร้างตารางใช้สำหรับ forward mail

# CREATE TABLE forwardings (source varchar(80) NOT NULL, destination TEXT NOT NULL, PRIMARY KEY (source) );

10. สร้างตาราง user เพื่อใช้สร้าง mailbox และออกจาก mysql

# CREATE TABLE users (email varchar(80) NOT NULL, password varchar(20) NOT NULL, PRIMARY KEY (email) );
# quit

11. สั่ง restart mariadb

# systemctl restart mariadb

12. Login เข้า mariadb

# mysql -u root -p

13. เลือก DB ของ mail server และกำหนด Domain ภาษาอังกฤษ และภาษาไทย และ Email-Account ภาษาอังกฤษ) พร้อม password เพื่อเริ่มใช้งาน

# USE eaimail;
# 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'));

14. กำหนด Email ที่เข้ามายัง Email Account ภาษาไทย ให้ forward เข้า Email-Account ภาษาอังกฤษ เนื่องจากระบบไม่สามารถสร้าง mailbox เป็น ภาษาไทยได้

# INSERT INTO forwardings (source,destination) VALUES ('ไทย@อีเอไอ.ไทย','thai@eai.in.th');
# quit


6. ตั้งค่า postfix ของ EAI Email Server

1. สร้างไฟล์ 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


2. สร้างไฟล์ 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


3. สร้างไฟล์ 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


4. สร้างไฟล์ 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


5. กำหนดสิทธิ์ให้กับ script ที่สร้างขึ้น

# chmod o= /etc/postfix/mysql-virtual_*.cf
# chgrp postfix /etc/postfix/mysql-virtual_*.cf


6. สร้าง group เพื่อใช้กับ mailbox

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


1. แก้ไขไฟล์ /etc/postfix/main.cf โดยเปิดการใช้งานหรือเพิ่มค่า configure ตามด้านล่าง *(สังเกตุหัวข้อ virtual_alias_domains ที่เพิ่มเป็น Domain ภาษาไทย)

# vi /etc/postfix/main.cf
myhostname = mail.eai.in.th
mydomain = eai.in.th
myorigin = $mydomain
inet_interfaces = all
inet_protocols = ipv4
mydestination =  localhost, localhost.localdomain
mynetworks = 127.0.0.1
alias_maps = hash:/etc/aliases	
alias_database = hash:/etc/aliases
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
readme_directory = no
smtpd_tls_cert_file = /etc/pki/tls/certs/eai.crt
smtpd_tls_key_file = /etc/pki/tls/certs/eai.key
smtpd_tls_security_level = may
meta_directory = /etc/postfix
shlib_directory = no
message_size_limit = 30720000
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

2. แก้ไขไฟล์ /etc/postfix/master.cf โดยเพิ่มคำสั่งลงด้านล่างสุดของไฟล์ และเปิดใช้งาน หรือเพิ่ม เพียงแค่คำสั่งด้าานล่าง นอกเหนือจากนั้น ให้ปิดการใช้งาน #

# vi /etc/postfix/master.cf
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}

3. สั่งใช้งานการส่ง email ภาษาไทยและทำการ restart postfix

# postconf "smtputf8_enable = yes"
# postfix reload
# systemctl restart postfix.service


7. ตั้งค่า dovecot ของ EAI Email Server

1. Back-up ค่า config เดิมไว่ก่อน

# mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf-backup


2. ตั้งค่า 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
}


3. สร้าง 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';


4. กำหนดสิทธิ์อนุญาตให้ user ที่อยู่ใน dovecot group ใช้งาน

# chgrp dovecot /etc/dovecot/dovecot-sql.conf.ext
# chmod o= /etc/dovecot/dovecot-sql.conf.ext
# systemctl restart dovecot.service


8. ทดสอบ EAI Email Server

1. ติดตั้ง telnet

# yum install telnet
# telnet localhost pop3

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.service

1. ทดสอบ smtp server

# telnet localhost 25
# ehlo localhost

2. จะได้ผลลัพธ์ตามด้านล่าง

250-mail.eai.in.th
250-PIPELINING
250-SIZE 30720000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250 SMTPUTF8

1. ติดตั้ง mailx และทดสอบส่ง email

# yum install mailx
# mailx thai@eai.in.th (ใส่ subject แล้ว enter ตามด้วยเนื้อหา และใช้ Ctrl+D เพื่อส่งออก)

2. ตรวจสอบ 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

3. ตรวจสอบ 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

4. ตรวจสอบ 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

5. ตรวจสอบ mailbox โดยใช้ mail client คือ mutt เพื่อดู email ภายใน mailbox

# yum install mutt
# mutt -f .

6. ทดสอบการส่งเมลในรูปแบบ eai

# telnet localhost 25
# EHLO localhost
# MAIL FROM: ธนากานต์@อีเอไอ.ไทย SMTPUTF8		
# RCPT TO: ธนากานต์@คน.ไทย
# data
# Subject: eai test
# เทสอีเมลส์ภาษาไทย
# .
  • ใช้เครื่องหมาย “.” เพื่อจบข้อความและส่งข้อความ
  • กด Ctrl+] เพื่อออก


9. ติดตั้ง squirrelmail ของ EAI Email Server

1. ติดตั้ง squirrelmail โดย Centos 8 ยังไม่มี squirrelmail ใน repo ทำให้ติดตั้งโดยใช้คำสั่ง yum ไม่ได้ จึงต้องติดตั้งด้วยตัวเอง

  • ติดตั้ง php , Apache
# yum install php
# systemctl start php-fpm.service
# systemctl enable php-fpm.service
# yum install httpd
# systemctl start httpd
# systemctl enable httpd

2. นำ squirrelmail ที่ได้เตรียมไว้ให้นำไปไว้ที่ /varwww/html/

# cd var/www/html/

(copy squirrelmail ไปไว้ /varwww/html/ ซึ่งผู้จัดทำใช้ winscp ในการทำงาน)

3. สร้าง directory เพิ่มให้กับ squirrelmail

# mkdir /var/lib/squirrelmail
# cd /var/lib/squirrelmail/data
# chmod ugo+rwx /var/lib/squirrelmail/data
# mkdir /var/spool/squirrelmail
# mkdir /var/spool/squirrelmail/attach/
# chmod ugo+rwx /var/spool/squirrelmail/attach

4. ทดสอบ login เข้าใช้งานผ่าน web browsers โดยใช้ IP ของ Server ที่ได้รับและตามด้วย /squirrelmail เช่น http://192.168.1.10/squirrelmail/

# ทดสอบรับและส่งเมล