บริการรับ-ส่งอีเมลของ Mercury/32 v.4.6 from localhost

mercury mail server on xampp that work with PHP
mercury mail server on xampp that work with PHP

การ config ให้เป็นบริการแบบสองทางคือ รับ กับ ส่ง
ผ่าน localhost บน winxp โดยใช้ Outlook Express

1. เปิดบริการ
เข้าโปรแกรม xampp control panel แล้วเปิดบริการ Mercury
จะพบว่า port 25 กับ 110 เปิดให้บริการแล้ว ตรวจด้วย netstat -na ใน DOS
2. สร้าง user ของ e-mail
เข้า admin ของ Mercury/32 v.4.6 ใน xampp control panel
แล้วเข้า Configuration, Manage Local User…
เพิ่มรหัสผู้ใช้อีเมล โดยกำหนดให้ User:test
Personal Name:test และ Mail Password:test
3. ทดสอบกับ e-mail client
เปิด Outlook Express ครั้งแรก ต้องกรอกข้อมูลต่าง ๆ
Display name: test และ E-mail address: test@localhost
Incoming mail: 127.0.0.1 และ Outgoing mail: 127.0.0.1
Account name: test และ Password:test
4. ทดสอบระบบรับ-ส่ง
สั่งเขียนอีเมลใน Outlook Express ให้กด Create Mail
ส่งถึง test@localhost และให้ subject กับ message เป็น “hello world”
เมื่อสั่ง Send/Recv ก็จะพบอีเมลใหม่เข้ามาใน inbox
5. เขียน code ภาษา php
ให้โปรแกรมที่เขียนขึ้นมาทำงานบน Apache ที่จัดการโดย XAMPP
<?php
mail(“test@localhost”,”hello world”,”1\n2\n”,”From: admin@localhost\r\n”);
?>
สร้างแฟ้ม x.php วางใน c:\xampp\htdocs แล้วเปิดเว็บ http://localhost/x.php
พบว่าระบบไม่ส่งอีเมลออกไป ต้องทำข้อที่เหลือก่อน โดยแก้ไข sendmail.ini และ php.ini
6. แก้ไข sendmail.ini
เปิด c:\xampp\sendmail\sendmail.ini ขึ้นมาแก้ไข
จาก smtp_server=mail.mydomain.com
เป็น smtp_server=localhost
7. แก้ไข php.ini
เปิด c:\xampp\php\php.ini ขึ้นมาแก้ไข
จาก ;sendmail_path = “\”c:\xampp\sendmail\sendmail.exe\” -t”
จาก sendmail_path = “c:\xampp\mailtodisk\mailtodisk.exe”
เป็น sendmail_path = “\”c:\xampp\sendmail\sendmail.exe\” -t”
เป็น ;sendmail_path = “c:\xampp\mailtodisk\mailtodisk.exe”
8. เมื่อ restart apache ก็จะส่งอีเมลได้แล้ว
สั่ง stop และ start apache ใหม่ แล้วเรียก x.php ผ่าน browser
ในการเรียกแต่ละครั้ง ก็จะส่งอีเมลจาก admin@localhost
แล้วพบอีเมลที่ส่งไปเข้า outlookexpress เรียบร้อยดี

พบปัญหา ส่งอีเมลไม่ออกจาก mail server

maillog
maillog

บันทึกการเข้าไปตรวจสอบ postfix บน redhat5 ดังนี้
1. เริ่มต้นด้วยการเข้าดูข้อมูลใน log
ว่าส่งแล้วมีผลเป็นอย่างไร
#tail -n 50000 maillog |grep delivery
พบว่า ไม่พบรายการที่ส่งได้ในช่วงเวลาไม่นานก่อนหน้านี้

2. ใช้ nslookup ตรวจสอบ domain name
พบว่าตัวแรกไม่ตอบ ตอบแต่ตัวที่สอง
ตัวที่ work อยู่คือ xxx.xxx.199.32
และตัวที่ไม่ work คือ xxx.xxx.55.55
สามารถใช้ http://cqcounter.com/whois/
ตรวจสอบได้ว่าอยู่ที่ใด และใครดูแลอยู่

3. เข้าไปแก้ไข resolv.conf ให้เหลือเฉพาะที่ใช้งานได้
แล้ว restart เครือข่ายใหม่
ด้วย #/etc/init.d/network restart

4. ทดสอบส่งอีเมลด้วย #mail xxx@xxx.com
เมื่อค้น delivery ด้วยคำสั่งที่ 1 ก็พบว่ามาปกติ
และที่มาก็มากันหลายฉบับ เพราะคั้งค้างระหว่างการทดสอบก่อนหน้านี้

5. สรุปว่า dns ที่เราใช้อาจตื่นบ้าง หลับบ้าง ต้องหมั่นตรวจสอบ

แก้ปัญหา forward mail ไม่ถึง gmail.com

9 ก.ย.53 วันนี้คุณแบงค์บ่นว่าไม่ได้รับ forword mail จากเครื่องบริการที่ส่งไปถึง gmail.com มานานแล้ว ผมเข้าไปตรวจใน aliases ก็พบว่ากำหนดไว้ปกติ และอัพเดทแล้ว เข้าไปตรวจใน maillog พบว่า message ว่า  Name service error for name=spamassassin type=A เมื่อตรวจสอบ ก็พบว่าปัญหาคือ ในแฟ้ม /etc/postfix/master.cf ได้กำหนด relayhost = spamassassin นั้นผิด เมื่อเปลี่ยนเป็น relay.cat.net.th ก็ไม่พบปัญหา forward mail ไม่ไปอีก

ตรวจการติด Black List หลังพบปัญหา

 

squirrel mail
squirrel mail

27 ส.ค.52 วันนี้ตรวจสอบ queue ของ smtp server พบว่ามี mail ค้างกว่าหมื่นฉบับ ตรวจพบว่าผู้ส่งคือสมาชิกในองค์กรของเรา แต่เขาไม่น่าจะเป็นผู้ส่งเมลขนาดนี้ เมื่อตรวจในรายละเอียดก็พบว่าส่งจาก squirrelmail ซึ่งเป็น webbased mail  และก็พบว่าการส่งนั้นมาจาก webbased mail ที่ถูก hack  แม้จะใช้ ssl กรองด่านแรกแล้ว แต่ spam bot ก็ยังเจาะตรงเข้าไปได้ พบว่ามี user หลายคนมีพฤติกรรมเช่นนี้ สิ่งที่เหมือนกันของผู้เป็นเหยื่อ spam bot คือกำหนดรหัสผ่านที่เหมือนกับรหัสผู้ใช้ ซึ่งเป็นข้อบกพร่องที่ผมปล่อยให้เกิดขึ้นมาหลายปี และไม่ได้กำชับให้ทุกฝ่ายเข้าใจ คาดว่า spam bot มุ่งเจาะเข้าจุดอ่อนใน squirrelmail และการกำหนดรหัสของผู้ใช้ที่หละหลวม จึงทำการแก้ไขปัญหาดังกล่าว
     เมื่อเกิดปัญหาแล้ว ก็ตามไปดูว่า ผลของปัญหาดังกล่าวมีปฏิกิริยาลูกโซ่สู่ภายนอกหรือไม่ ด้วยการตรวจว่า smtp server ตัวใหม่ของเราติด black list อีกแล้วหรือไม่ 1)ตรวจกับ spamhaus.org พบว่ามี 7 IP ที่ติดในบริการของ cat.net.th  แต่เราไม่ติดในบัญชีดำชุดนี้ 2)ตรวจกับ find-ip-address.org แล้วพบว่าเราไม่ติด 3)ตรวจกับ mxtoolbox.com ซึ่งส่ง ip ไปตรวจใน 111 เครื่องบริการ พบว่า smtp ทั้งสองเครื่องติดใน 5 เครื่องบริการคือ 3.1)sorbs.net/lookup.shtml (ขอ delist) 3.2)barracudacentral.org/rbl (remove request) 3.3)spamrats.com (Removal) 3.4)wpbl.info (Remove Record) 3.5)uceprotect.net (?)
     วิธีแก้ไข ที่ดำเนินการคือ 1)หยุดการส่ง spam จากเครื่องของเรา และตรวจสอบอยู่เสมอ 2)ขอแก้ไขกับผู้ให้บริการขึ้นบัญชี black list ทีละราย ซึ่งทำไปกับ 4 รายแล้ว 3)เปลี่ยนเครื่องบริการ smtp และต้องดูแลไม่ให้เกิดขึ้นอีก
แหล่งอ้างอิง
+ http://www.blacklistalert.org
+ http://mxtoolbox.com/blacklists.aspx
+ http://www.find-ip-address.org
+ http://www.spamhaus.org/sbl/index.lasso
+ http://whatismyipaddress.com

แก้ปัญหาจดหมายมาแล้วไม่เข้ากล่องจดหมาย

13 ส.ค.52 พบปัญหาว่าอีเมลฉบับใหม่ไม่เข้ากล่องอีเมล(inbox) ของสมาชิกหลายท่าน ทดสอบส่งด้วย  #echo “test”|sendmail hello@yonok.ac.th จะพบเวลาของกล่องอีเมลใน /var/mail เปลี่ยนไป แต่ขนาดไม่เปลี่ยน ทุกครั้งที่ตรวจสอบด้วย #ls -alt ผมก็จะตรวจแต่เวลาเท่านั้น มาทราบตอนคุณธรณินทร์ สุรินทร์ปันยศ แจ้งว่ามีสมาชิกหลายท่านรายงานปัญหานี้เข้ามา ปัญหานี้น่าจะเกิดจากการเปลี่ยนระบบบริการอีเมลจาก sendmail เป็น postfix ที่โครงสร้างการบริการอีเมลอาจแตกต่างกัน และพบปัญหากับสมาชิกเพียงบางท่าน
แต่ปัญหานี้ต้องแก้ไขเร่งด่วน จึงไม่ได้คัดกรองสมาชิกว่าคนใดมีปัญหาหรือไม่มี ส่วน smtp ก็ยังใช้บริการจาก relay.cat.net.th ใน squirrelmail ที่ยังทดสอบไม่เรียบร้อย ที่มีแผนจะใช้บริการจาก smtp virtual server ในองค์กร ซึ่ง คุณอนุชิต ยอดใจยา ติดตั้งและเปิดบริการให้ใช้เป็นเครื่องส่งอีเมลแทนเครื่องเดิม ที่ถูกขึ้นบัญชีดำโดยภายนอก
     ดำเนินการแก้ปัญหาในเบื้องต้น 3 วิธี คือ 1)แก้ไขสิทธิ ความเป็นเจ้าของ และขนาดของแฟ้มก็ยังรับใหม่ไม่ได้ 2)นำอีเมลใหม่ต่อท้ายอีเมลเก่าด้วย #cat new>>old ก็ยังรับใหม่ไม่ได้ 3)สร้าง folder ใหม่แล้วย้ายกล่องจดหมายเข้า(inbox) ไปทับ folder ที่สร้างขึ้น เป็นทางออกให้สมาชิกสามารถรับอีเมลใหม่ได้ปกติ ส่วนอีเมลเก่าก็จะกลายเป็น folder ชื่อ oldmail อยู่ด้านซ้ายของ squirrelmail
       รายละเอียดของการดำเนินการวิธีที่ 3 คือ 1)คัดลอกรายชื่อกล่องจดหมายเข้าใน /var/mail ด้วย #ls -al ไปใช้ใน excel แล้วเลือกเฉพาะชื่อ ไปเก็บไว้ใน column a1 2)เขียนฟังก์ชันสร้าง folder สำหรับ squirrelmail อัตโนมัติ =”echo mail/oldmail>>/home/” & A1 &”/mail/.subscriptions” แล้วคัดลอกไปวางใน Linux Shell ทั้ง column 3)ตรวจว่าผู้ใช้เคยใช้เว็บเมลหรือไม่ เพราะถ้าไม่เคยก็จะไม่มีห้อง mail จึงต้องเลือกดำเนินการกับผู้ใช้ที่ไม่เคยใช้บริการ แต่มีอีเมลถึงผู้ใช้เหล่านั้นมากมาย =”ls -al /home/”& A1 &”/mail” 4)ย้ายกล่องจดหมาเข้า(inbox) ไปเป็น folder ชื่อ oldmail ด้วย =”mv “& A1 &” /home/” & A1 &”/mail/mail/oldmail” ต้องทำทีละบรรทัด เพราะผู้ใช้บางท่านมีกล่องอีเมลใหญ่ถึง 300 MB 5)ลบสมาชิกด้วย 3 ขั้นตอนคือ #userdel -r hello และ #rm /home/hello -Rf และ #rm /var/mail/hello