Bỏ qua đến nội dung chính

Hướng dẫn cài đặt Smarthost Mailtarget trong WHM/cPanel (Exim)

P
Được viết bởi Product Support
Đã cập nhật cách đây hơn 2 tháng

Tài liệu này giải thích từng bước cách chuyển hướng email gửi đi từ máy chủ WHM/cPanel qua Mailtarget SMTP (smarthost/relay) một cách an toàn, có khả năng chống chịu với các bản cập nhật cPanel và có thể dễ dàng khôi phục.

Kết quả cuối cùng: tất cả email gửi đi (trừ email gửi nội bộ) được định tuyến đến cổng smtp.mtrgt.net 587 với AUTH + TLS.

1. Điều kiện tiên quyết

  • Quyền truy cập root vào WHM (https://IP:2087).

  • Thông tin đăng nhập SMTP của Mailtarget (tên người dùng & khóa API/mật khẩu).

  • Tường lửa gửi đi cho phép TCP 587.

  • Tên miền người gửi phải có SPF/DKIM đáp ứng chính sách gửi.

2. Sao lưu & Xác thực ban đầu

  • Sao lưu cấu hình Exim: WHM → Cấu hình Dịch vụ → Trình quản lý Cấu hình Exim → Sao lưu.

  • Kiểm tra cú pháp phiên bản và ngôn ngữ:

    exim -bV
    exim -C /etc/exim.conf -bV # xác thực tệp đang hoạt động

3. Mở Trình chỉnh sửa Nâng cao

WHM → Cấu hình Dịch vụ → Trình quản lý Cấu hình Exim → tab Trình chỉnh sửa Nâng cao.

Các thay đổi được thực hiện thông qua Trình chỉnh sửa Nâng cao sẽ không bị ghi đè trong quá trình cập nhật cPanel (so với việc chỉnh sửa thủ công /etc/exim.conf).

4. Lưu trữ Thông tin Đăng nhập trong Tệp (an toàn hơn)

Không mã hóa cứng thông tin đăng nhập trong cấu hình. Hãy lưu trữ chúng trong tệp tra cứu:

  • Tạo/sửa đổi tệp thông tin đăng nhập máy khách: nano /etc/exim.passwd.client

  • Thêm các dòng sau (không có khoảng trắng ở cuối): smtp.mtrgt.net:MAILTARGET_USERNAME:MAILTARGET_APIKEY

  • Thiết lập quyền nghiêm ngặt:

    • chown root:root /etc/exim.passwd.client

    • chmod 600 /etc/exim.passwd.client

Định dạng phải chính xác: host:username:password mỗi dòng. Mỗi máy chủ có một dòng.

5. Thêm Authenticator (@AUTH@)

Trong Trình chỉnh sửa Nâng cao, tìm/mở rộng phần Thêm thiết lập cấu hình bổ sung, sau đó trong khối @AUTH@, thêm:

@AUTH@

# Xác thực đăng nhập cho kết nối ra (phía máy khách)
auth_login:
driver = plaintext
public_name = LOGIN
hide client_send = : ${lookup{$host}lsearch*{/etc/exim.passwd.client}{$value}fail}

Giải thích ngắn gọn:

  • hide client_send ngăn thông tin đăng nhập xuất hiện trong nhật ký.

  • Truy vấn lsearch* trả về giá trị username:password đầy đủ từ tệp.

6. Thêm Bộ định tuyến (@PREROUTERS@)

Vẫn trong Trình chỉnh sửa Nâng cao, trong khối @PREROUTERS@, hãy thêm:

@PREROUTERS@

# Định tuyến thủ công đến smarthost Mailtarget cho tất cả các miền không phải miền cục bộ
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

Lưu ý:

  • domains = ! +local_domains đảm bảo việc phân phối cục bộ vẫn là cục bộ.

  • ::587 buộc phải sử dụng cổng 587.

  • Đã thêm ::1 cho vòng lặp IPv6.

7. Thêm Transport (@TRANSPORTSTART@)

Trong khối @TRANSPORTSTART@, hãy thêm:

@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. Lưu & Khởi động lại

Nhấp vào Lưu ở cuối Trình soạn thảo Nâng cao. WHM sẽ xây dựng lại cấu hình và tự động khởi động lại Exim. Đảm bảo không có lỗi biên dịch nào.

9. Kiểm tra Kết nối & Phân phối

A. Kiểm tra kết nối TLS với Mailtarget

openssl s_client -starttls smtp -connect smtp.mtrgt.net:587 -servername smtp.mtrgt.net

Một chứng chỉ hợp lệ và một phiên SSL đang hoạt động sẽ xuất hiện.

B. Gửi một lần chạy thử (tùy chọn 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 "Chủ đề: Kiểm tra qua WHM→Mailtarget" --body "Xin chào từ WHM"

C. Nhật ký giám sát

tail -f /var/log/exim_mainlog

10. Tường lửa & Mạng

  • Đảm bảo cổng TCP đầu ra 587 đang mở (CSF: SMTP_PORTS hoặc OUTGOING_TCP).

  • Nếu bạn có proxy/IPS, nên thêm smtp.mtrgt.net vào danh sách trắng để đảm bảo tính ổn định.

11. Bảo mật & Vận hành

  • Thay đổi khóa API Mailtarget định kỳ.

  • Không lưu trữ thông tin đăng nhập trong tài liệu/trò chuyện.

  • Hạn chế quyền truy cập vào tệp /etc/exim.passwd.client (600).

  • Nhật ký kiểm tra: /var/log/exim_mainlog, /var/log/exim_rejectlog.

12. Hoàn tác nhanh

  • Trình chỉnh sửa nâng cao: Xóa các khối smart_route và auth_relay, và thay đổi @AUTH@ nếu nó dành riêng cho Mailtarget.

  • Lưu → Khởi động lại Exim.

  • (Tùy chọn) Đổi tên /etc/exim.passwd.client.

  • Khôi phục từ bản sao lưu nếu cần.

13. Biến thể & Ngoại lệ (Tùy chọn)

A. Chỉ định tuyến các tên miền cụ thể qua Mailtarget

# Thay đổi domains= để chỉ định các tên miền trong một danh sách cụ thể
# Ví dụ: chỉ gửi đến các tên miền bên ngoài, ngoại trừ một số tên miền đối tác
# Trước tiên, hãy tạo một danh sách tên miền: 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. Bỏ qua các tên miền/máy chủ cụ thể (không qua Mailtarget)

# Thêm trước smart_route router
skip_partner:
driver = manualroute
domains = partner.local : example.org
self = send
transport = remote_smtp # gửi trực tiếp, không phải auth_relay
no_more

14. Khắc phục sự cố nhanh

Sự cố

Nguyên nhân phổ biến

Giải pháp

AUTH không thành công (535)

Tên người dùng/khóa không đúng, dòng/định dạng trong /etc/exim.passwd.client không đúng

Thông tin đăng nhập đúng; đảm bảo định dạng là host:user:pass, không có khoảng trắng, quyền 600

Yêu cầu TLS nhưng không khả dụng

STARTTLS không khả dụng (chặn/chặn)

Kiểm tra openssl s_client, đảm bảo thoát qua 587, tắt kiểm tra TLS nếu có

Kết nối đã hết thời gian

Tường lửa chặn kết nối đi 587

Mở 587 trong CSF/iptables, kiểm tra telnet smtp.mtrgt.net 587

Lặp vòng/hoãn định tuyến

Thứ tự bộ định tuyến không chính xác

Đảm bảo smart_route nằm sau bộ định tuyến phân phối cục bộ và sử dụng no_more

550 Xác minh người gửi không thành công

SPF/DKIM không chính xác

Thiết lập SPF/DKIM cho tên miền gửi theo chính sách gửi.

15. Ví dụ tối thiểu (không khuyến khích – được mã hóa cứng)

Nếu thực sự cần thiết (tạm thời) và môi trường được kiểm soát, đây là ví dụ:

@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

Lưu ý: Chỉ sử dụng cho thử nghiệm ban đầu. Sẽ sớm chuyển thông tin đăng nhập sang /etc/exim.passwd.client.

Nội dung này có giải đáp được câu hỏi của bạn không?