ผลต่างระหว่างรุ่นของ "พัฒนาบน CentOS 8"
ไม่มีความย่อการแก้ไข |
Photchanan (คุย | ส่วนร่วม) ล Photchanan ย้ายหน้า พัฒนาบน CentOS 8 (Thai Version) ไปยัง พัฒนาบน CentOS 8 |
||
| (ไม่แสดง 3 รุ่นระหว่างกลางโดยผู้ใช้คนเดียวกัน) | |||
| บรรทัดที่ 1: | บรรทัดที่ 1: | ||
= 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 = | |||
== 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''' | |||
[[8. ทดสอบ EAI Email Server | 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/ | |||
'''# ทดสอบรับและส่งเมล''' | |||
[[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/
# ทดสอบรับและส่งเมล