เอกสารนี้จะอธิบายวิธีการเปลี่ยนเส้นทางอีเมลขาออกจากเซิร์ฟเวอร์ WHM/cPanel ของคุณอย่างปลอดภัยทีละขั้นตอนผ่าน Mailtarget SMTP ในรูปแบบที่ทั้งทนทานต่อการอัปเดต cPanel และย้อนกลับได้อย่างง่ายดาย
ผลลัพธ์สุดท้าย: อีเมลขาออกทั้งหมด (ยกเว้นการจัดส่งภายใน) จะถูกส่งไปยังพอร์ต 587 ของ smtp.mtrgt.net ด้วย AUTH + TLS
1. ข้อกำหนดเบื้องต้น
สิทธิ์การเข้าถึงรูทของ WHM (https://IP:2087)
ข้อมูลประจำตัว Mailtarget SMTP (ชื่อผู้ใช้และคีย์ API/รหัสผ่าน)
ไฟร์วอลล์ขาออกรองรับ TCP 587
โดเมนผู้ส่งต้องมี SPF/DKIM ที่ตรงตามนโยบายการส่ง
2. การสำรองข้อมูลและการตรวจสอบเบื้องต้น
สำรองข้อมูลการกำหนดค่า Exim: WHM → การกำหนดค่าบริการ → ตัวจัดการการกำหนดค่า Exim → สำรองข้อมูล
ตรวจสอบเวอร์ชันและไวยากรณ์ของโลแคล:
exim -bV
exim -C /etc/exim.conf -bV # active file validation
3. เปิดตัวแก้ไขขั้นสูง
WHM → การกำหนดค่าบริการ → ตัวจัดการการกำหนดค่า Exim → แท็บตัวแก้ไขขั้นสูง
การเปลี่ยนแปลงที่ทำผ่านตัวแก้ไขขั้นสูงจะไม่ถูกเขียนทับระหว่างการอัปเดต cPanel (เมื่อเทียบกับการแก้ไขไฟล์ /etc/exim.conf ด้วยตนเอง)
4. จัดเก็บข้อมูลประจำตัวไว้ในไฟล์ (ปลอดภัยยิ่งขึ้น)
อย่าฮาร์ดโค้ดข้อมูลประจำตัวในการกำหนดค่า ให้เก็บไว้ในไฟล์ค้นหา:
สร้าง/แก้ไขไฟล์ข้อมูลประจำตัวของไคลเอ็นต์:
nano /etc/exim.passwd.clientเพิ่มบรรทัดต่อไปนี้ (ไม่มีช่องว่างต่อท้าย):
smtp.mtrgt.net:MAILTARGET_USERNAME:MAILTARGET_APIKEYตั้งค่าสิทธิ์ที่เข้มงวด:
chown root:root /etc/exim.passwd.client
chmod 600 /etc/exim.passwd.client
รูปแบบต้องตรงเป๊ะ: host:username:password ต่อบรรทัด บรรทัดละหนึ่งโฮสต์
5. เพิ่ม Authenticator (@AUTH@)
ในตัวแก้ไขขั้นสูง ให้ค้นหา/ขยายส่วน "เพิ่มการตั้งค่าการกำหนดค่าเพิ่มเติม" จากนั้นในบล็อก @AUTH@ ให้เพิ่ม:
@AUTH@
# Login authenticator for outbound (client side)
auth_login:
driver = plaintext
public_name = LOGIN
hide client_send = : ${lookup{$host}lsearch*{/etc/exim.passwd.client}{$value}fail}
คำอธิบายสั้นๆ:
hide client_send ป้องกันไม่ให้ข้อมูลประจำตัวปรากฏในบันทึก
การค้นหา lsearch* คืนค่า username:password แบบเต็มจากไฟล์
6. เพิ่มเราเตอร์ (@PREROUTERS@)
ยังคงอยู่ใน Advanced Editor ในบล็อก @PREROUTERS@ ให้เพิ่ม:
@PREROUTERS@
# Manual route to smarthost Mailtarget for all non-local domains
smart_route:
driver = manualroute
domains = ! +local_domains
ignore_target_hosts = 127.0.0.0/8 : ::1
route_list = * smtp.mtrgt.net::587
transport = auth_relay
no_more
หมายเหตุ:
domains = ! +local_domains เพื่อให้แน่ใจว่าการจัดส่งภายในเครื่องยังคงเป็นแบบโลคอล
::587 บังคับให้ใช้พอร์ต 587
เพิ่ม ::1 สำหรับ IPv6 loopback
7. เพิ่ม Transport (@TRANSPORTSTART@)
ในบล็อก @TRANSPORTSTART@ ให้เพิ่ม:
@TRANSPORTSTART@
auth_relay:
driver = smtp
hosts_require_auth = smtp.mtrgt.net
hosts_require_tls = smtp.mtrgt.net
# tls_require_ciphers = NORMAL:!VERS-SSL3.0:!VERS-TLS1.2
8. บันทึกและรีสตาร์ท
คลิกบันทึกที่ด้านล่างของ Advanced Editor WHM จะสร้างการกำหนดค่าใหม่และรีสตาร์ท Exim โดยอัตโนมัติ ตรวจสอบให้แน่ใจว่าไม่มีข้อผิดพลาดในการสร้าง
9. ทดสอบการเชื่อมต่อและการจัดส่ง
ก. ตรวจสอบการเชื่อมต่อ TLS กับ Mailtarget
openssl s_client -starttls smtp -connect smtp.mtrgt.net:587 -servername smtp.mtrgt.net
ควรปรากฏใบรับรองที่ถูกต้องและเซสชัน SSL ที่ใช้งานอยู่
B. ส่งการทดสอบการทำงาน (ตัวเลือกที่ 1 – swaks)
swaks --to [email protected] \
--from [email protected] \
--server smtp.mtrgt.net --port 587 --tls \
--auth LOGIN --auth-user MAILTARGET_USERNAME --auth-password MAILTARGET_APIKEY \
--header "Subject: Test via WHM→Mailtarget" --body "Hello from WHM"
C. บันทึกการตรวจสอบ
tail -f /var/log/exim_mainlog
10. ไฟร์วอลล์และเครือข่าย
ตรวจสอบให้แน่ใจว่าพอร์ต TCP ขาออก 587 เปิดอยู่ (CSF: SMTP_PORTS หรือ OUTGOING_TCP)
หากคุณมีพร็อกซี/IPS ขอแนะนำให้เพิ่ม smtp.mtrgt.net ลงในไวท์ลิสต์เพื่อความเสถียร
11. ความปลอดภัยและการดำเนินงาน
หมุนเวียนคีย์ API ของ Mailtarget เป็นระยะ
อย่าเก็บข้อมูลประจำตัวไว้ในเอกสาร/ห้องแชท
จำกัดการเข้าถึงไฟล์ /etc/exim.passwd.client (600)
บันทึกการตรวจสอบ: /var/log/exim_mainlog, /var/log/exim_rejectlog
12. ย้อนกลับอย่างรวดเร็ว
ตัวแก้ไขขั้นสูง: ลบบล็อก smart_route และ auth_relay และเปลี่ยน @AUTH@ หากเป็นของ Mailtarget
บันทึก → รีสตาร์ท Exim
(ไม่บังคับ) เปลี่ยนชื่อ /etc/exim.passwd.client
กู้คืนจากข้อมูลสำรองหากจำเป็น
13. รูปแบบและข้อยกเว้น (ไม่บังคับ)
A. กำหนดเส้นทางเฉพาะโดเมนที่กำหนดผ่าน Mailtarget
# Change domains= to only specify domains in a specific list
# For example: send only to external domains, excluding some partner domains
# Create a domainlist first: domainlist relay_only = d1.com : d2.net
smart_route:
driver = manualroute
domains = +relay_only
route_list = * smtp.mtrgt.net::587
transport = auth_relay
no_more
B. ข้ามโดเมน/โฮสต์เฉพาะ (ไม่ผ่าน Mailtarget)
# Add before smart_route router
skip_partner:
driver = manualroute
domains = partner.local : example.org
self = send
transport = remote_smtp # send directly, not auth_relay
no_more
14. การแก้ไขปัญหาอย่างรวดเร็ว
ปัญหา | สาเหตุทั่วไป | สารละลาย |
การตรวจสอบสิทธิ์ล้มเหลว (535) | ชื่อผู้ใช้/คีย์ไม่ถูกต้อง บรรทัด/รูปแบบไม่ถูกต้องใน /etc/exim.passwd.client | ข้อมูลประจำตัวที่ถูกต้อง ตรวจสอบให้แน่ใจว่าอยู่ในรูปแบบโฮสต์:ผู้ใช้:รหัสผ่าน โดยไม่มีช่องว่าง และมีการอนุญาตเป็น 600 |
จำเป็นต้องมี TLS แต่ไม่สามารถใช้งานได้ | STARTTLS ไม่พร้อมใช้งาน (สกัดกั้น/บล็อก) | ตรวจสอบ openssl s_client ให้แน่ใจว่าออกผ่าน 587 และปิดใช้งานการตรวจสอบ TLS หากใช้ได้ |
การเชื่อมต่อหมดเวลา | ไฟร์วอลล์ขาออกบล็อก 587 | เปิด 587 ใน CSF/iptables ทดสอบ telnet smtp.mtrgt.net 587 |
การวนซ้ำ/เลื่อนเส้นทาง | ลำดับเราเตอร์ไม่ถูกต้อง | ตรวจสอบให้แน่ใจว่า smart_route อยู่หลังเราเตอร์การจัดส่งในพื้นที่และใช้ no_more |
550 การตรวจสอบผู้ส่งล้มเหลว | SPF/DKIM ไม่ถูกต้อง | ตั้งค่า SPF/DKIM สำหรับโดเมนผู้ส่งตามนโยบายการส่ง |
15. ตัวอย่างขั้นต่ำ (ไม่แนะนำ – ฮาร์ดโค้ด)
หากจำเป็นจริงๆ (ชั่วคราว) และสภาพแวดล้อมได้รับการควบคุม นี่คือตัวอย่าง:
@AUTH@
auth_login:
driver = plaintext
public_name = LOGIN
hide client_send = : MAILTARGET_USERNAME : MAILTARGET_APIKEY
@PREROUTERS@
smart_route:
driver = manualroute
domains = ! +local_domains
ignore_target_hosts = 127.0.0.0/8 : ::1
route_list = * smtp.mtrgt.net::587
transport = auth_relay
no_more
@TRANSPORTSTART@
auth_relay:
driver = smtp
hosts_require_auth = smtp.mtrgt.net
hosts_require_tls = smtp.mtrgt.net
หมายเหตุ: ใช้สำหรับการทดสอบเบื้องต้นเท่านั้น เร็วๆ นี้ โปรดย้ายข้อมูลประจำตัวไปที่ /etc/exim.passwd.client