📑 Daftar Isi
- Pendahuluan
- Gejala — Apa yang Terjadi?
- Root Cause — Apa yang Salah?
- Kenapa Ini Brute Force, Bukan User Lupa Password?
- Bagaimana Membaca Log Ini Detail
- Kenapa Server Tidak Langsung Blok?
- Step-by-Step Solution — Mengamankan Server Email
- Langkah 1: Cek Aktivitas Brute Force
- Langkah 2: Install & Konfigurasi Fail2Ban
- Langkah 3: Rate Limiting di Dovecot
- Langkah 4: Blok IP Brute Force via Firewall
- Langkah 5: Verifikasi
- Langkah 6: Buat Script Monitoring Brute Force
- Pro Tips & Warnings
- FAQ
- Q: Apakah error 535 selalu berarti brute force?
- Q: Bagaimana cara membedakan brute force dan user yang lupa password?
- Q: Apakah Fail2Ban bisa memblokir IP yang salah (false positive)?
- Q: Kenapa HELO string random itu indikasi bot?
- Kesimpulan
Pendahuluan
Suatu sore, saya lagi asyik monitor email queue di server production. Tiba-tiba saya lihat ada dua baris log yang kelihatannya sepele — tapi setelah saya perhatikan lebih dekat, isinya cukup bikin waspada:
2026-07-20 16:38:05 dovecot_login authenticator failed for H=(aGrT3z2j) [10.0.0.1]:61890: 535 Incorrect authentication data (set_id=info@client-a.com)
2026-07-20 16:38:06 dovecot_login authenticator failed for H=(jAvmHBGX) [10.0.0.2]:55446: 535 Incorrect authentication data (set_id=info@client-b.com)
Dua percobaan login email gagal dalam waktu 1 detik, dari dua IP berbeda, mengincar dua email berbeda pula. Tapi ada satu pola yang mencurigakan: HELO string-nya acak — aGrT3z2j dan jAvmHBGX. Manusia biasanya pakai nama domain yang jelas (mail.client.com), bukan string random seperti ini.
Ini awal mula saya menyadari bahwa server email kita sedang jadi target brute force — dan log ini hanyalah puncak gunung es.
Gejala — Apa yang Terjadi?
Log ini muncul di /var/log/exim/mainlog (atau /var/log/maillog di beberapa distro). Isinya:
2026-07-20 16:38:05 dovecot_login authenticator failed for H=(aGrT3z2j) [10.0.0.1]:61890: 535 Incorrect authentication data (set_id=info@client-a.com)
2026-07-20 16:38:06 dovecot_login authenticator failed for H=(jAvmHBGX) [10.0.0.2]:55446: 535 Incorrect authentication data (set_id=info@client-b.com)
Gejala-gejalanya:
- Ada percobaan login ke email (SMTP authentication) yang gagal
- Error code
535— “Incorrect authentication data” (password salah) - HELO string berupa karakter acak random — indikasi bot
- Dua IP berbeda dalam 1 detik — indikasi serangan distributed
- Email yang diincar:
info@client-a.comdaninfo@client-b.com— alamat umum yang sering jadi target
Root Cause — Apa yang Salah?
Tidak ada yang “salah” dari sisi server — server bekerja dengan benar. Authentication failed memang karena password-nya salah. Tapi masalahnya adalah serangan brute force yang sedang berlangsung.
Kenapa Ini Brute Force, Bukan User Lupa Password?
Ada beberapa tanda yang membedakan:
- HELO string acak —
aGrT3z2jdanjAvmHBGXadalah string random. Manusia yang login dari Outlook/Thunderbird biasanya pakai HELO sepertimail.client.comatau nama komputer (DESKTOP-ABC123). String random adalah ciri khas bot/script - Dua IP berbeda dalam 1 detik — terlalu cepat untuk user yang sama. Ini distributed attack
- Email target:
info@— alamat email generik sepertiinfo@,admin@,support@adalah target utama brute force karena sering punya password lemah - Error code 535 — “Incorrect authentication data” artinya password yang dicoba memang salah. Bot mencoba ribuan kombinasi password
Bagaimana Membaca Log Ini Detail
Mari kita bongkar setiap bagian dari log ini satu per satu:
2026-07-20 16:38:05 dovecot_login authenticator failed for H=(aGrT3z2j) [10.0.0.1]:61890: 535 Incorrect authentication data (set_id=info@client-a.com)
| Bagian | Nilai | Arti |
2026-07-20 16:38:05 |
Timestamp | Waktu kejadian (20 Juli 2026, jam 16:38:05) |
dovecot_login |
Authenticator | Jenis autentikasi yang digunakan — Dovecot SASL (Simple Authentication and Security Layer). Artinya Exim menggunakan Dovecot untuk memverifikasi username/password |
authenticator failed |
Status | Autentikasi gagal — password tidak cocok |
H=(aGrT3z2j) |
HELO hostname | Nama host yang dikirim client saat SMTP handshake. String random = bot. Manusia pakai nama domain/komputer yang jelas |
[10.0.0.1] |
Source IP | IP address yang mencoba login. IP private ini menunjukkan serangan datang dari dalam jaringan atau via VPN/tunnel |
:61890 |
Source port | Port yang digunakan client. Port tinggi (>1024) adalah normal untuk client |
535 |
SMTP error code | Kode error SMTP. 535 = “Authentication credentials invalid” (password salah atau user tidak ada) |
Incorrect authentication data |
Error message | Pesan error: data autentikasi tidak benar (password salah) |
set_id=info@client-a.com |
Email target | Email yang dicoba login. info@ adalah target umum brute force |
Kenapa Server Tidak Langsung Blok?
Exim/Dovecot secara default tidak memblokir IP setelah beberapa percobaan gagal. Mereka hanya mencatat log dan melanjutkan. Tanpa konfigurasi tambahan (Fail2Ban, rate limiting, atau firewall rules), brute force bisa berlangsung selama berhari-hari tanpa terdeteksi — kecuali Anda rajin membaca log.
Step-by-Step Solution — Mengamankan Server Email
Mengubah config Dovecot/Exim atau firewall rules bisa memutus akses email seluruh server. Sebelum melanjutkan:
- Backup config yang ada —
cp -r /etc/dovecot /etc/dovecot.bakdancp /etc/exim.conf /etc/exim.conf.bak - Pastikan Anda punya akses alternatif — jika email down, Anda masih bisa hubungi client via Telegram/WhatsApp
- Test config sebelum restart —
doveconf -nuntuk test Dovecot,exim -bVuntuk test Exim - Jangan blok IP internal secara permanen — IP private bisa berubah, dan Anda bisa terkunci dari server sendiri
Langkah 1: Cek Aktivitas Brute Force
Pertama, kita perlu tahu seberapa parah serangan ini. Jalankan command berikut untuk melihat percobaan login gagal dalam 1 jam terakhir:
# Hitung jumlah percobaan login gagal per IP dalam 1 jam terakhir
grep "dovecot_login authenticator failed" /var/log/exim/mainlog |
grep "$(date -d '1 hour ago' +'%d/%b/%Y:%H:')" |
grep -oE '[[0-9]+.[0-9]+.[0-9]+.[0-9]+]' |
sort | uniq -c | sort -rn | head -n 10
Contoh output:
15423 10.0.0.1
12847 10.0.0.2
9834 10.0.0.3
8721 10.0.0.4
7654 10.0.0.5
Jika angkanya ribuan per IP, itu sudah pasti brute force. Sekarang cek email mana yang paling banyak diincar:
# Cek email target paling banyak dicoba
grep "dovecot_login authenticator failed" /var/log/exim/mainlog |
grep "$(date -d '1 hour ago' +'%d/%b/%Y:%H:')" |
grep -oE 'set_id=[^)]+' |
sort | uniq -c | sort -rn | head -n 10
Contoh output:
8432 set_id=info@client-a.com
6721 set_id=admin@client-a.com
5432 set_id=support@client-a.com
4321 set_id=info@client-b.com
3210 set_id=admin@client-b.com
Email info@, admin@, support@ selalu jadi target utama karena alamat ini umum dikenal dan sering punya password default/lemah.
Langkah 2: Install & Konfigurasi Fail2Ban
Fail2Ban adalah solusi paling efektif untuk memblokir IP yang melakukan brute force. Install jika belum ada:
# Install Fail2Ban (CentOS/RHEL)
yum install -y fail2ban
# Install Fail2Ban (Ubuntu/Debian)
apt install -y fail2ban
Buat config khusus untuk email brute force di /etc/fail2ban/jail.local:
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
[dovecot]
enabled = true
port = smtp,465,submission,imap,pop3,pop3s
filter = dovecot
logpath = /var/log/exim/mainlog
maxretry = 3
bantime = 86400
[exim]
enabled = true
port = smtp,465,submission
filter = exim
logpath = /var/log/exim/mainlog
maxretry = 5
bantime = 3600
Penjelasan config:
maxretry = 3— setelah 3 percobaan gagal, IP diblokirbantime = 86400— blokir selama 24 jam (86400 detik)findtime = 600— jendela waktu 10 menit untuk menghitung percobaan
Start Fail2Ban:
# Start dan enable Fail2Ban
systemctl enable --now fail2ban
# Cek status
fail2ban-client status dovecot
fail2ban-client status exim
Langkah 3: Rate Limiting di Dovecot
Selain Fail2Ban, kita bisa menambahkan rate limiting langsung di Dovecot. Edit /etc/dovecot/conf.d/10-auth.conf:
# Tambahkan di akhir file
auth_mechanisms = plain login
# Rate limiting — maksimal 5 percobaan per menit per IP
service auth {
process_min_avail = 1
process_limit = 10
}
# Disable plaintext auth tanpa SSL (keamanan tambahan)
disable_plaintext_auth = yes
Restart Dovecot:
systemctl restart dovecot
Langkah 4: Blok IP Brute Force via Firewall
Jika Anda sudah tahu IP mana yang melakukan brute force, bisa blok langsung via firewall:
# Cek IP yang paling banyak brute force
grep "dovecot_login authenticator failed" /var/log/exim/mainlog |
grep -oE '[[0-9]+.[0-9]+.[0-9]+.[0-9]+]' |
sort | uniq -c | sort -rn | head -n 5
# Blok IP dengan iptables (ganti IP yang sesuai)
iptables -I INPUT -s 10.0.0.1 -j DROP
iptables -I INPUT -s 10.0.0.2 -j DROP
# Simpan rule agar persisten setelah reboot
service iptables save
Langkah 5: Verifikasi
Setelah konfigurasi diterapkan, cek apakah brute force masih berlangsung:
# Monitor log secara real-time
tail -f /var/log/exim/mainlog | grep "dovecot_login authenticator failed"
Jika Fail2Ban sudah aktif, seharusnya IP brute force sudah diblokir dan log menunjukkan pesan [dovecot] Ban 10.0.0.x.
Langkah 6: Buat Script Monitoring Brute Force
Buat script sederhana untuk alert jika brute force terdeteksi:
#!/bin/bash
# /usr/local/bin/check-email-brute-force.sh
LOG="/var/log/exim/mainlog"
THRESHOLD=100
HOURS=1
COUNT=$(grep "dovecot_login authenticator failed" "$LOG" |
grep "$(date -d "${HOURS} hour ago" +'%d/%b/%Y:%H:')" | wc -l)
if [ "$COUNT" -gt "$THRESHOLD" ]; then
echo "WARNING: $COUNT failed email logins in last $HOURS hour(s)" |
mail -s "Email Brute Force Alert" admin@your-server.com
fi
Jalankan script ini via cron setiap 30 menit:
# Edit crontab
crontab -e
# Tambahkan baris ini
*/30 * * * * /usr/local/bin/check-email-brute-force.sh
Pro Tips & Warnings
- Gunakan password kuat untuk email — email
info@sering punya password default dari panel. Segera ganti dengan password minimal 16 karakter - Nonaktifkan email yang tidak terpakai — jika ada email
info@yang tidak digunakan, disable atau hapus. Lebih baik tidak ada email daripada email dengan password lemah - Gunakan SPF, DKIM, dan DMARC — ini melindungi domain Anda dari spoofing, bukan dari brute force. Tapi tetap penting untuk keamanan email secara keseluruhan
- Monitor log secara berkala — jangan tunggu sampai ada alert. Cek log minimal sekali sehari
- Gunakan IP dari RFC 5737 untuk testing — jika Anda ingin test apakah Fail2Ban bekerja, gunakan IP dari range RFC 5737 (192.0.2.x, 198.51.100.x, 203.0.113.x) agar tidak memblokir IP production
- Backup config sebelum edit — selalu backup
/etc/dovecotdan/etc/exim.confsebelum mengubah apapun
FAQ
Q: Apakah error 535 selalu berarti brute force?
Tidak selalu. Error 535 bisa muncul karena user lupa password, email typo, atau konfigurasi client yang salah. Tapi jika angkanya ribuan dalam satu jam dari banyak IP berbeda dengan HELO string random — itu sudah pasti brute force. Selalu cek konteks sebelum mengambil kesimpulan.
Q: Bagaimana cara membedakan brute force dan user yang lupa password?
Perhatikan polanya: (1) User lupa password biasanya hanya 1-2 IP yang sama, (2) HELO string-nya jelas (nama komputer/domain), (3) Waktu percobaan tidak seragam. Brute force: banyak IP berbeda, HELO random, percobaan seragam dalam waktu singkat.
Q: Apakah Fail2Ban bisa memblokir IP yang salah (false positive)?
Bisa, jika maxretry terlalu rendah. Misal, user yang benar-benar lupa password dan mencoba 5 kali bisa kena blokir. Untuk menghindari ini, set maxretry = 5 atau lebih tinggi, dan gunakan findtime yang cukup besar (misal 600 detik = 10 menit). Juga, pastikan IP internal (misal IP kantor) tidak terblokir — tambahkan di ignoreip di config Fail2Ban.
Q: Kenapa HELO string random itu indikasi bot?
Karena klien email normal (Outlook, Thunderbird, Apple Mail) secara otomatis mengirim HELO berupa nama komputer atau domain yang dikonfigurasi. Bot/script brute force biasanya mengirim HELO berupa string random karena mereka tidak peduli dengan HELO — yang penting bagi mereka adalah mencoba password sebanyak mungkin. HELO random seperti aGrT3z2j atau jAvmHBGX tidak akan pernah dihasilkan oleh klien email normal.
Kesimpulan
Log dovecot_login authenticator failed adalah salah satu tanda pertama bahwa server email Anda sedang jadi target brute force. Dengan membaca log secara detail — memahami arti setiap bagian dari timestamp, HELO string, source IP, error code, hingga email target — Anda bisa mengenali serangan sejak dini dan mengambil langkah pencegahan.
Solusi paling efektif adalah kombinasi dari tiga lapisan: Fail2Ban untuk memblokir IP secara otomatis, rate limiting di Dovecot untuk membatasi percobaan per IP, dan password yang kuat untuk semua akun email — terutama alamat generik seperti info@ dan admin@. Ketiga lapisan ini bekerja bersama untuk membuat server email Anda jauh lebih sulit di-brute force.
Pelajaran terbesar dari insiden ini: jangan pernah remehkan log yang “kecil”. Dua baris log yang tampak sepele bisa jadi awal dari serangan masif yang mengancam keamanan seluruh infrastruktur email Anda.
Author: NOC Engineer — ditulis berdasarkan pengalaman mendeteksi dan memitigasi brute force email di server production.