• Indonesian
  • English
  • Cara Mendeteksi & Hapus Email Spam di Server cPanel

    Kecepatan:

    Pendahuluan

    Jam 3 pagi, HP saya bunyi — alarm dari monitoring system. Server yang handle email untuk salah satu client tiba-tiba load-nya naik 300%. Bukan karena web traffic, bukan karena database, tapi karena mail queue yang menumpuk ratusan ribu email. Pada pertama saya cek, ternyata ada satu akun cPanel yang compromi — password email-nya berhasil ditebak, dan dari situ spam dikirim ke mana-mana. Dalam waktu kurang dari 6 jam, server sudah mengantongi 847.000 email di queue. Dari pengalaman itu, saya belajar satu hal: spam itu bukan masalah sepele. Bukan cuma bikin server lemot, tapi bisa bikin IP server masuk blacklist dan email legit kamu nggak akan pernah sampai ke tujuan.

    Kalau kamu manage server cPanel, masalah email spam ini pasti pernah — atau akan pernah — kamu hadapi. Yang bikin frustasi, kadang kamu nggak sadar server kamu lagi nge-spam sampai ada yang complain “kok email saya masuk spam folder?” atau sampai IP server kamu masuk Spamhaus blacklist. Waktu itu saya pernah handle kasus di mana satu client bilang email proposal-nya nggak sampai ke customer. Ternyata? Email-nya ditolak karena IP server kita sudah masuk blacklist gara-gara spam yang nggak terdeteksi selama 3 hari.

    Di artikel ini saya akan tunjukkan cara deteksi email spam di server cPanel menggunakan perintah Exim — tool mail transfer default di hampir semua server cPanel. Semua command di bawah sudah saya pakai berkali-kali di lapangan dan terbukti ampuh menemukan akun yang compromi. Yuk, kita mulai.

    Gejala Server cPanel Terkena Spam

    Sebelum masuk ke command troubleshooting, penting untuk tahu dulu gejala-gejala yang menandakan server kamu sedang digunakan untuk spam. Dari pengalaman saya, berikut ciri-ciri yang paling sering muncul:

    • Load server naik tiba-tiba — terutama pada proses Exim. Kamu bisa cek dengan top atau htop dan cari proses exim atau exim4.
    • Mail queue menumpuk — jumlah email di queue terus naik dan nggak turun-turun. Normalnya queue kosong atau cuma beberapa email stuck.
    • RAM terpakai habis — Exim yang memproses ribuan email bisa makan RAM gede. Kalau free -h menunjukkan used memory hampir full tapi nggak jelas aplikasi apa yang make, cek mail queue.
    • IP masuk blacklist — bisa dicek di MXToolbox Blacklist Check. Kalau IP kamu masuk Spamhaus atau blacklist lain, kemungkinan besar ada spam yang lolos.
    • Email bounce back masuk ratusan — ini namanya bounce back storm. Spam dikirim ke alamat yang nggak valid, dan server tujuan mengirim balik error message. Error message ini sendiri bisa bikin queue makin menumpuk.
    • Log Exim membesar drastis — file log Exim (/var/log/exim_mainlog) tiba-tiba jadi gigaan dalam hitungan jam.

    Gejala-gejala di atas nggak selalu berarti server kamu kena serangan besar. Kadang cuma satu akun email yang compromi sudah cukup untuk bikin semuanya kacau. Yang penting adalah kamu tahu cara deteksinya secara dini.

    Root Cause: Kenapa Email Bisa Jadi Spam?

    Sebelum kita masuk ke troubleshooting, saya mau jelaskan dulu kenapa email di server cPanel bisa jadi spam. Supaya kamu nggak cuma tahu cara fix, tapi juga tahu cara mencegahnya.

    1. Password Akun Email Lemah

    Ini penyebab nomor satu yang paling sering saya temui. Password seperti password123, namaanda123, atau qwerty itu udah seperti undangan terbuka untuk hacker. Mereka pakai script brute force yang mencoba ribuan kombinasi password per menit. Begitu mereka dapat akses, mereka langsung kirim spam sepuasnya sampai kamu sadar.

    2. Script PHP yang Compromi

    Kadang bukan password email yang bermasalah, tapi ada script PHP di website yang sudah di-hack. Script ini bisa dipakai untuk mengirim email lewat fungsi mail() PHP atau lewat SMTP auth. Biasanya ini terjadi di website yang pakai CMS lama atau plugin yang nggak diupdate.

    3. Forwarder yang Salah Konfigurasi

    Satu forwarder yang mengarah ke alamat nggak valid bisa bikin bounce back storm. Email dikirim ke alamat yang nggak ada, server tujuan bounce back, dan proses ini terus berulang sampai queue penuh. Saya pernah handle kasus di mana satu forwarder ke alamat Yahoo yang sudah dihapus bikin 50.000 email stuck di queue dalam waktu 2 jam.

    4. Akun Email yang Tidak Aktif

    Akad email yang nggak dipakai tapi masih aktif itu berisiko. Biasanya akun-akun seperti info@domain.com, test@domain.com, atau newsletter@domain.com yang lupa dihapus. Kalau password-nya lemah, hacker pasti akan coba.

    Command #1: Lihat Semua Email di Queue

    Langkah pertama saat curiga ada spam adalah melihat isi mail queue secara keseluruhan. Perintah ini akan menunjukkan semua email yang sedang menunggu diproses oleh Exim:

    exim -bp

    Output dari perintah ini kurang lebih seperti ini:

      25h  3.2K 1xP5vg-0004KQ-VA <spammer@compromi.com> user@victim.com
      24h  2.1K 1xP6Ab-0005LR-BC <spammer@compromi.com> another@somewhere.org
      23h  1.8K 1xP7Cd-0006MS-DE <spammer@compromi.com> contact@business.net
       3m  4.2K 1xQ8Ef-0007NT-FG <legit@yourserver.com> client@company.com

    Setiap baris menunjukkan:

    • Kolom 1 (25h) — berapa lama email sudah menunggu di queue. Kalau ada email yang sudah menunggu berhari-hari, itu sudah mencurigakan.
    • Kolom 2 (3.2K) — ukuran email dalam kilobytes.
    • Kolom 3 (1xP5vg-0004KQ-VA) — ID unik email di Exim queue.
    • Kolom 4 (<spammer@compromi.com>) — alamat pengirim (sender/envelope sender).
    • Kolom terakhir (user@victim.com) — alamat tujuan (recipient).

    Kalau kamu lihat ratusan atau ribuan baris dari alamat pengirim yang sama, itu sudah sangat mencurigakan. Tapi membaca output exim -bp secara manual untuk ribuan baris itu melelahkan dan nggak praktis. Untuk itu, kita perlu command selanjutnya.

    Command #2: Identifikasi Pengirim Email Terbanyak di Queue

    Ini adalah command pertama yang selalu saya pakai saat troubleshooting spam di server cPanel. Command ini akan menghitung dan mengurutkan alamat email mana yang paling banyak mengirim email di queue:

    exim -bp | awk {'print $4'} | sort | uniq -c | sort -nk 1

    Mari kita bedah command ini satu per satu agar kamu paham apa yang dilakukan masing-masing bagian:

    Penjelasan Tiap Bagian

    1. exim -bp — Menampilkan seluruh isi mail queue. Setiap baris berisi informasi tentang satu email yang sedang menunggu diproses.

    2. | awk {'print $4'} — Pipe output ke awk untuk mengambil kolom ke-4, yaitu alamat pengirim (sender). Di output exim -bp, kolom ke-4 adalah field yang berisi alamat email pengirim dalam kurung sudut <>.

    3. | sort — Mengurutkan semua alamat pengirim secara alfabetis. Ini diperlukan agar uniq bisa bekerja dengan benar (karena uniq hanya menghapus duplikat yang bersebelahan).

    4. | uniq -c — Menghitung jumlah kemunculan setiap alamat pengirim yang unik. Output-nya berupa angka diikuti alamat email, contoh: 5847 <spammer@compromi.com>

    5. | sort -nk 1 — Mengurutkan hasil berdasarkan angka (kolom pertama) secara numerik. Jadi email dengan jumlah terbanyak akan muncul di bagian paling bawah.

    Contoh Output

          1 <info@domainanda.com>
          3 <marketing@domainanda.com>
        147 <newsletter@domainanda.com>
       5847 <spammer@compromi.com>

    Dari output di atas, sudah sangat jelas: alamat spammer@compromi.com mengirim 5.847 email di queue. Ini adalah pelaku utama spam di server kamu.

    Apa yang Harus Dilakukan Setelah Tahu?

    Setelah kamu tahu alamat pengirim spam, langkah selanjutnya:

    • Cek password akun tersebut — langsung ganti dari cPanel atau WHM. Jangan cuma ganti, tapi pastikan password-nya kuat (minimal 16 karakter, campuran huruf besar-kecil, angka, dan simbol).
    • Cek forwarder — kadang ada forwarder yang mengarah ke alamat luar, dan forwarder inilah yang dipakai untuk spam. Hapus forwarder yang mencurigakan.
    • Cek akses log — kalau kamu bisa, cak IP address mana yang login ke webmail atau SMTP untuk mengirim email ini. Bisa dicek di /var/log/exim_mainlog atau log akses cPanel.
    • Force delivery atau cutten queue — untuk email spam yang sudah terlanjur ada di queue, kamu bisa hapus dengan command yang akan saya jelaskan di bawah.

    Command #3: Identifikasi Alamat Tujuan Terbanyak

    Selain tahu siapa yang ngirim spam, kamu juga perlu tahu ke mana saja email spam itu dikirim. Ini penting untuk mengetahui apakah server kamu sedang dipakai untuk brute force email, atau untuk mengirim spam ke alamat acak. Berikut command-nya:

    exim -bp | grep -v '^[0-9]' | grep @ | awk '{print $NF}' | sort | uniq -c | sort -nk1

    Mari kita bedah juga:

    Penjelasan Tiap Bagian

    1. exim -bp — Sama seperti sebelumnya, menampilkan isi mail queue.

    2. | grep -v '^[0-9]'Menyaring baris yang BUKA diawali angka. Di output exim -bp, baris yang diawali angka adalah baris header yang berisi summary (total email, ukuran, dll). Kita tidak perlu baris ini — kita hanya butuh baris detail email.

    3. | grep @ — Hanya menampilkan baris yang mengandung karakter @. Ini memastikan kita hanya memproses baris yang berisi alamat email, bukan baris kosong atau baris kosmetik lainnya.

    4. | awk '{print $NF}'$NF adalah variabel awk yang merujuk pada field terakhir di setiap baris. Di output exim -bp, field terakhir adalah alamat email tujuan (recipient).

    5. | sort | uniq -c | sort -nk1 — Sama seperti sebelumnya: urutkan, hitung unik, urutkan berdasarkan jumlah.

    Contoh Output

          2 admin@random-domain.xyz
          5 support@another-suspect.net
        312 user@victim-email.com
       2891 inbox@target-corporation.com

    Dari output ini, kamu bisa lihat pattern spam-nya. Kalau email tujuannya ke ribuan alamat yang berbeda, kemungkinan besar ini bulk spam — email massal yang dikirim ke daftar alamat yang dibeli atau di-scrape dari internet. Kalau email tujuannya ke satu atau beberapa alamat yang sama, bisa jadi ini upaya phishing atau DDoS via email.

    Command Tambahan: Hitung Total Email di Queue

    Sebelum kita mulai cleanup, penting untuk tahu seberapa besar masalahnya. Berikut command untuk menghitung total email di queue:

    exim -bp | grep -c '^[0-9]'

    Atau versi yang lebih detail:

    exim -bp | tail -1

    Baris terakhir dari exim -bp biasanya berisi summary seperti: 15847 emails shelved for retry, 3246 waiting for routing.

    Kalau jumlahnya di atas 1.000, kamu perlu bertindak cepat. Kalau di atas 10.000, server kamu sudah dalam kondisi kritis dan perlu segera diambil alih.

    PERINGATAN KEAMANAN: Backup Sebelum Menghapus Email Spam dari Queue

    Sebelum kita masuk ke cara menghapus email spam, ada satu hal yang WAJIB kamu lakukan: backup mail queue. Kenapa? Karena perintah penghapusan di Exim itu tidak bisa di-undo. Begitu email dihapus dari queue, email itu hilang selamanya. Kalau kebetulan ada email legit (invoice, kontrak, email penting) yang ikut terhapus, kamu tidak bisa mengembalikannya.

    Saya pernah alami sendiri: saya hapus email spam pakai perintah exim -bp | awk '{print $3}' | xargs exim -Mrm tanpa filter yang spesifik. Ternyata ada 23 email legit client yang ikut terhapus — email kontrak yang sudah ditunggu-tunggu. Client marah besar, dan saya harus menjelaskan kenapa email kontrak mereka hilang. Sejak saat itu, saya selalu backup dulu sebelum hapus apapun dari queue.

    Langkah Backup (WAJIB Dilakukan)

    Backup seluruh mail queue ke file teks sebelum melakukan apapun:

    exim -bp > /tmp/mailqueue-backup-$(date +%Y%m%d-%H%M).txt

    Command ini akan menyimpan seluruh isi mail queue ke file seperti /tmp/mailqueue-backup-20240115-0823.txt. Setelah backup, verifikasi bahwa backup berhasil dengan mengecek ukuran file dan isinya:

    ls -lh /tmp/mailqueue-backup-$(date +%Y%m%d-%H%M).txt
    cat /tmp/mailqueue-backup-$(date +%Y%m%d-%H%M).txt | wc -l

    Langkah Verifikasi Sebelum Hapus (WAJIB Dilakukan)

    Setelah backup, jangan langsung hapus. Verifikasi dulu target yang akan kamu hapus. Pastikan hanya email spam yang muncul di hasil filter:

    exim -bp | grep "spammer@compromi.com"

    PENTING: Perhatikan hasil grep-nya. Pastikan hanya email dari alamat spammer yang muncul. Jika ada email dari alamat lain yang ikut muncul (misalnya karena filter terlalu longgar), jangan jalankan perintah hapus. Gunakan filter yang lebih spesifik.

    Contoh filter yang benar:

    exim -bp | awk '/spammer@compromi.com/{print $3}' | xargs exim -Mrm

    Perhatikan backslash sebelum titik (.) — ini penting agar regex tidak salah match alamat lain.

    Yang Terjadi Jika TANPA Backup & Verifikasi

    Jika kamu langsung jalankan exim -bp | awk '{print $3}' | xargs exim -Mrm tanpa filter yang spesifik, kamu akan menghapus SEMUA email di queue — termasuk email legit. Email kontrak, invoice, notifikasi, semuanya hilang dalam satu detik. Tidak ada cara untuk mengembalikannya.

    Jadi, selalu: backup → verifikasi → baru hapus. Jangan pernah langkah-langkah ini dibalik.

    Cara Hapus Email Spam dari Queue

    Setelah tahu siapa pelakunya, saatnya bersih-bersih. Ada beberapa cara menghapus email spam dari Exim queue, dari yang paling aman sampai yang paling agresif.

    Cara 1: Hapus Berdasarkan Pengirim

    Kalau kamu sudah tahu alamat pengirim spam dari Command #2, kamu bisa hapus semua email dari alamat tersebut:

    exim -bp | awk '/<spammer@compromi.com>/{print $3}' | xargs exim -Mrm

    Command ini:

    • exim -bp | awk '/<spammer@compromi.com>/{print $3}' — mencari semua baris yang mengandung alamat spammer, lalu mengambil ID email-nya (kolom ke-3)
    • | xargs exim -Mrm — menghapus setiap email berdasarkan ID-nya

    Peringatan: Pastikan kamu pakai alamat yang benar. Jangan sampai kamu hapus email legit yang kebetulan dikirim dari server yang sama.

    Cara 2: Hapus Email yang Sudah Menunggu Terlalu Lama

    Kalau kamu ingin menghapus semua email yang sudah menunggu lebih dari waktu tertentu (misalnya 24 jam), pakai command ini:

    exiqgrep -z -d 24h | xargs exim -Mrm

    exiqgrep adalah tool untuk filter Exim queue. Flag -z memilih email yang gagal (bounced), dan -d 24h memfilter email yang lebih tua dari 24 jam.

    Cara 3: Hapus SEMUA Email di Queue (Nuklir)

    Cara ini sangat agresif dan hanya boleh dipakai kalau kamu yakin SEMUA email di queue adalah spam atau sudah tidak relevan:

    exim -bp | exiqgrep -i | xargs exim -Mrm

    Atau versi yang lebih brutal:

    for queue_id in $(exim -bp | awk '{print $3}'); do exim -Mrm $queue_id; done

    Warning keras: Jangan pakai cara ini kalau ada email legit di queue. Backup dulu list email-nya dengan command ini sebelum dihapus:

    exim -bp > /tmp/mailqueue-backup-$(date +%Y%m%d).txt

    Pro Tips: Pencegahan Spam di Server cPanel

    1. Gunakan password yang kuat untuk semua akun email — minimal 16 karakter. Saya selalu anjurkan pakai password manager seperti Bitwarden atau KeePass.
    2. Enable SpamAssassin di cPanel — fitur bawaan cPanel yang sangat powerful untuk memfilter spam sebelum sampai ke inbox. Bisa diaktifkan dari cPanel → Email → Spam Filters.
    3. Install CSF (ConfigServer Security & Firewall) — ini firewall yang sangat powerful untuk server cPanel. Salah satu fiturnya adalah mendeteksi dan mem-block IP yang melakukan brute force SMTP.
    4. Rate limit SMTP connections — batasi jumlah koneksi SMTP per IP di Exim configuration. Bisa diatur dari WHM → Exim Configuration Manager.
    5. Nonaktifkan akun email yang nggak dipakai — jangan biarkan akun email nganggur tetap aktif. Kalau nggak dipakai, nonaktifkan atau hapus.
    6. Monitor mail queue secara berkala — jangan menunggu sampai alarm bunyi. Saya biasanya set cron job untuk alert kalau jumlah email di queue melebihi 100: exim -bp | grep -c '^[0-9]' | awk '{if ($1 > 100) print "ALERT: Mail queue high - "$1" emails"}'
    7. Update CMS dan plugin secara berkala — sebagian besar kompromi akun email dimulai dari script PHP yang vulnerable di website.

    FAQ

    Bagaimana cara cek apakah IP server sudah masuk blacklist email?

    Kunjungi MXToolbox Blacklist Check dan masukkan IP server kamu. Tool ini akan mengecek IP kamu terhadap 80+ blacklist terkenal termasuk Spamhaus, SpamCop, dan Barracuda. Kalau IP masuk blacklist, biasanya karena ada spam yang terkirim dari server kamu dalam 24-72 jam terakhir.

    Apakah aman menghapus semua email di queue sekaligus?

    Tergantung situasi. Kalau kamu yakin 100% semua email di queue adalah spam, aman. Tapi kalau ada email legit (misalnya invoice, newsletter pelanggan, atau email transaksi), jangan hapus semuanya. Selalu backup queue dulu dengan exim -bp > /tmp/backup.txt sebelum melakukan mass deletion.

    Kenapa email spam terus muncul meskipun sudah diganti passwordnya?

    Kemungkinan ada beberapa penyebab: (1) ada script PHP di website yang masih compromi, (2) ada forwarder atau auto-responder yang masih aktif, (3) hacker sudah membuat akun email baru dari panel, atau (4) ada aplikasi lain (CRM, ERP, dll) yang menyimpan kredensial lama dan terus mencoba mengirim. Cek log Exim di /var/log/exim_mainlog untuk menemukan IP asal koneksi.

    Berapa jumlah email di queue yang dianggap normal untuk server cPanel?

    Untuk server shared hosting normal, mail queue idealnya kosong atau di bawah 50 email. Kalau queue consistently di atas 100, ada sesuatu yang perlu ditelusuri. Kalau di atas 1.000, itu sudah masuk kategori urgent. Untuk server dedicated yang handle email volume tinggi, mungkin normal sampai 500, tapi lebih dari itu perlu investigasi.

    Related Issues

    Kesimpulan

    Deteksi email spam di server cPanel sebenarnya nggak serumit yang dibayangkan, asalkan kamu tahu command yang tepat. Dua command utama yang harus kamu hafalkan adalah:

    • exim -bp | awk {'print $4'} | sort | uniq -c | sort -nk 1 — untuk menemukan siapa pengirim spam terbanyak
    • exim -bp | grep -v '^[0-9]' | grep @ | awk '{print $NF}' | sort | uniq -c | sort -nk1 — untuk menemukan alamat tujuan terbanyak

    Dengan kedua command ini, kamu bisa dengan cepat mengidentifikasi akun yang compromi dan mengambil tindakan yang tepat — entah itu mengganti password, menghapus forwarder, atau menghapus email spam dari queue. Yang terpenting, jangan menunggu sampai masalah jadi besar. Monitor mail queue secara berkala, dan set alert otomatis kalau queue mulai menumpuk. Lebih baik cegah daripada harus cleanup ratusan ribu email di tengah malam, percaya deh — saya pernah ngalamin dan nggak mau ngalamin lagi.