ข้ามไปที่เนื้อหาหลัก

คู่มือการตั้งค่า Smarthost Mailtarget ใน WHM/cPanel (Exim)

P
เขียนโดย Product Support
อัปเดตแล้ววันนี้

เอกสารนี้จะอธิบายวิธีการเปลี่ยนเส้นทางอีเมลขาออกจากเซิร์ฟเวอร์ 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

นี่ไม่ใช่คำตอบที่ต้องการใช่ไหม