Dokumen ini menjelaskan langkah demi langkah mengarahkan outbound email server WHM/cPanel melalui Mailtarget SMTP (smarthost/relay) secara aman, tahan update cPanel, dan mudah di‐rollback.
Hasil akhir: seluruh email keluar (kecuali local delivery) diroutekan ke smtp.mtrgt.net port 587 dengan AUTH + TLS.
1. Prasyarat
Akses root ke WHM (https://IP:2087).
Kredensial SMTP Mailtarget (username & API key/password).
Outbound firewall mengizinkan TCP 587.
Domain pengirim sudah memiliki SPF/DKIM yang sesuai kebijakan pengiriman.
2. Backup & Validasi Awal
Backup konfigurasi Exim: WHM → Service Configuration → Exim Configuration Manager → Backup.
Cek versi & sintaks lokal:
exim -bV exim -C /etc/exim.conf -bV # validasi file aktif
3. Buka Advanced Editor
WHM → Service Configuration → Exim Configuration Manager → tab Advanced Editor.
Perubahan via Advanced Editor aman dari overwrite saat update cPanel (dibanding edit manual /etc/exim.conf).
4. Simpan Kredensial di File (lebih aman)
Jangan hardcode kredensial di konfigurasi. Simpan di file lookup:
Buat/ubah file kredensial client:
nano /etc/exim.passwd.client
Tambahkan baris berikut (tanpa spasi tambahan):
smtp.mtrgt.net:MAILTARGET_USERNAME:MAILTARGET_APIKEY
Atur permission ketat:
chown root:root /etc/exim.passwd.client
chmod 600 /etc/exim.passwd.client
Format harus persis: host:username:password per baris. Satu host per baris.
5. Tambahkan Authenticator (@AUTH@)
Di Advanced Editor, cari/expand bagian Add additional configuration setting lalu pada blok @AUTH@ tambahkan:
@AUTH@
# Login authenticator untuk outbound (client side) auth_login:
driver = plaintext
public_name = LOGIN
hide client_send = : ${lookup{$host}lsearch*{/etc/exim.passwd.client}{$value}fail}
Penjelasan singkat:
hide client_send mencegah kredensial muncul di log.
Lookup lsearch* mengembalikan nilai lengkap username:password dari file.
6. Tambahkan Router (@PREROUTERS@)
Masih di Advanced Editor, pada blok @PREROUTERS@ tambahkan:
@PREROUTERS@
# Rute manual ke smarthost Mailtarget untuk semua domain non-lokal
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
Catatan:
domains = ! +local_domains memastikan lokal tetap local delivery.
::587 memaksa port 587.
Tambahan ::1 untuk loopback IPv6.
7. Tambahkan Transport (@TRANSPORTSTART@)
Pada blok @TRANSPORTSTART@ tambahkan:
@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. Simpan & Restart
Klik Save di bagian bawah Advanced Editor. WHM akan membangun ulang konfigurasi dan restart Exim otomatis. Pastikan tidak ada error build.
9. Uji Koneksi & Pengiriman
A. Cek koneksi TLS ke Mailtarget
openssl s_client -starttls smtp -connect smtp.mtrgt.net:587 -servername smtp.mtrgt.net
Harus muncul sertifikat valid dan SSL-Session aktif.
B. Kirim uji coba (opsi 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. Monitoring log
tail -f /var/log/exim_mainlog
10. Firewall & Jaringan
Pastikan outbound TCP 587 dibuka (CSF: SMTP_PORTS atau OUTGOING_TCP).
Jika ada proxy/IPS, whitelisting smtp.mtrgt.net disarankan untuk stabilitas.
11. Keamanan & Operasional
Rotasi API key Mailtarget secara berkala.
Jangan menyimpan kredensial di dokumentasi/chat.
Restriksi akses file /etc/exim.passwd.client (600).
Audit log: /var/log/exim_mainlog, /var/log/exim_rejectlog.
12. Rollback Cepat
Advanced Editor: hapus blok smart_route & auth_relay, serta perubahan @AUTH@ jika khusus untuk Mailtarget.
Simpan → Exim restart.
(Opsional) rename /etc/exim.passwd.client.
Restore dari Backup jika diperlukan.
13. Variasi & Pengecualian (Opsional)
A. Hanya rute domain tertentu lewat Mailtarget
# Ganti domains= agar hanya domain di list tertentu
# Misal: kirim hanya untuk domain eksternal, kecuali beberapa domain partner
# Buat dulu domainlist: 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. Bypass domain/host tertentu (tidak via Mailtarget)
# Tambahkan sebelum smart_route router
skip_partner:
driver = manualroute
domains = partner.local : example.org
self = send
transport = remote_smtp # kirim langsung, bukan auth_relay
no_more
14. Troubleshooting Cepat
Kendala | Penyebab Umum | Solusi |
AUTH failed (535) | Username/Key salah, baris/format di /etc/exim.passwd.client salah | Perbaiki kredensial; pastikan format host:user:pass, tanpa spasi, permission 600 |
TLS required but not available | STARTTLS tak tersedia (intercept/blokir) | Cek openssl s_client, pastikan keluar via 587, matikan inspeksi TLS jika ada |
Connection timed out | Firewall outbound blok 587 | Buka 587 di CSF/iptables, uji telnet smtp.mtrgt.net 587 |
Looping/route defer | Router urutan salah | Pastikan smart_route ada setelah router local delivery dan memakai no_more |
550 Sender verification failed | SPF/DKIM belum benar | Setup SPF/DKIM domain pengirim sesuai kebijakan pengiriman |
15. Contoh Minimal (tidak disarankan – hardcode)
Jika benar‐benar perlu (sementara) dan lingkungan terkendali, berikut contohnya:
@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
Catatan: Gunakan hanya untuk testing awal. Segera pindahkan kredensial ke /etc/exim.passwd.client.