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.