Selama saya menangani email server Zimbra, terdapat beberapa kesempatan dimana saya harus melakukan pengecekan history akun yang login ke email server Zimbra, baik untuk kebutuhan troubleshoot maupun permintaan dari klien. Selain itu pengecekan ataupun monitoring history login ini merupakan bagian penting dalam menjaga keamanan server. Kita perlu tahu siapa yang login, menggunakan protokol apa (Webmail, Mobile/ActiveSync, atau IMAP?), dari IP mana saja, dan apakah fitur keamanan seperti 2FA sudah aktif atau belum. Semua data ini sebenarnya sudah tercatat pada file log /opt/zimbra/log/audit.log. Namun, file log tersebut bentuknya “raw” dan mungkin sulit dibaca langsung, apalagi oleh rekan-rekan yang jarang melakukan debugging melalui rawlog.
Sebenarnya saya sudah sempat cari & sudah lama juga menemukan tools untuk melakukan pengecekan hitory login email server Zimbra dengan mudah dari Zimbra Forum, tepatnya pada thread https://forums.zimbra.org/viewtopic.php?t=73157&sid=e2fdd8849daad7670ec3ea9636bbdc29 tapi saya belum sempat coba hehe. Script ini dikembangkan oleh beberapa pengguna Zimbra yang menjadi contributor pada thread tersebut. Script yang dibuat menggunakan bahasa pemograman perl untuk menampilkan history akun yang login ke email server Zimbra dengan tampilan yang lebih mudah dibaca. Berikut contoh penggunaannnya:
# /srv/raihan/zm-audit-log +----------------------------------------+------------------------------------+----------------------------------------------+ | Email | Last Seen | Auth Methods | IP Addresses | +----------------------------------------+------------------------------------+----------------------------------------------+ | user1@colamen.id | 2026-03-04 07:51:07 | WebClient, 2FA (Trusted) | 180.252.116.66 | | user2@colamen.id | 2026-03-04 10:04:11 | WebClient | 112.215.152.203 | | user3@colamen.id | 2026-03-04 07:44:55 | ActiveSync, WebClient, AppSpecific | 103.120.170.1, 103.130.18.40, 180.252.116.66 | | user4@raihan.net | 2026-03-04 08:03:42 | WebClient, 2FA (Trusted) | 103.130.18.40 | +----------------------------------------+------------------------------------+----------------------------------------------+
Fungsi Dasar Script Perl
Secara default, script zm-audit-log memiki kemampuan berikut:
- Parsing Multiple Protokol: Mendeteksi akses via WebClient, ActiveSync (Mobile), POP3, dan IMAP
- Security Tracking: Melihat status penggunaan 2FA dan App-Specific Passwords
- Visualisasi Tabel: Menghasilkan output tabel ASCII yang rapi di terminal
- Investigasi User: Bisa melihat detail aktivitas untuk satu user spesifik
Script Perl Baru
Meskipun tampilan tabelnya sudah cukup rapih jika dilihat melalui terminal, saya menemukan kendala saat ingin melakukan filtering. Tabel ASCII menggunakan karakter separator seperti | dan +---+, serta memecah daftar IP yang panjang ke baris baru agar muat di terminal. Hal ini membuat tool command seperti awk atau grep menjadi tidak akurat karena satu data row bisa terpecah menjadi beberapa baris. Akhirnya, saya memodifikasi script ini agar mendukung format CSV dengan menggunakan separator yang standard serta format JSON supaya mudah jika hendak di integrasikan dengan aplikasi loggin lainnya.
Saya sudah menyesuaikan beberapa bagian pada script perl zm-audit-log supaya bisa menampilkan history login email server Zimbra dengan format CSV atau JSON. Script tersebut bisa rekan-rekan download dari URL https://colamen.id/zimbra/zm-audit-log dengan perintah-perintah berikut melalui email server Zimbra:
# cd /srv # wget -c https://colamen.id/zimbra/zm-audit-log # chmod u+x zm-audit-log
Saya biasanya simpan script email server Zimbra di direktori /srv/, namun jika rekan-rekan mau simpan di direktori lain atau direktori bin Linux, seperti /usr/bin/, /usr/local/sbin, dll juga gapapa, yang penting jangan simpan di /tmp/ karena bisa hilang secara otomatis. Berikut adalah contoh penggunaan script supaya menghasilkan history dengan format CSV:
# /srv/zm-audit-log --format=csv Processing /opt/zimbra/log/audit.log... Email;Last Seen;Auth Methods;IP Addresses user1@colamen.id;2026-03-04 07:51:07;"WebClient, 2FA (Trusted)";"180.252.116.66" user2@colamen.id;2026-03-04 12:27:18;"WebClient, AppSpecific";"103.3.61.207, 112.215.152.203" user3@colamen.id;2026-03-04 07:44:55;"ActiveSync, WebClient, AppSpecific";"103.120.170.1, 103.130.18.40, 180.252.116.66" user4@raihan.net;2026-03-04 08:03:42;"WebClient, 2FA (Trusted)";"103.130.18.40"
Lalu berkut adalah contoh penggunaan script supaya menghasilkan history dengan format JSON:
# /srv/zm-audit-log --format=json
Processing /opt/zimbra/log/audit.log...
[
{
"email" : "user1@colamen.id",
"last_seen" : "2026-03-04 07:51:07",
"methods" : [
"WebClient",
"2FA (Trusted)"
],
"ips" : [
"180.252.116.66"
]
},
{
"email" : "user2@colamen.id",
"last_seen" : "2026-03-04 12:27:18",
"methods" : [
"WebClient",
"AppSpecific"
],
"ips" : [
"103.3.61.207",
"112.215.152.203"
]
},
{
"email" : "user3@colamen.id",
"last_seen" : "2026-03-04 07:44:55",
"methods" : [
"ActiveSync",
"WebClient",
"AppSpecific"
],
"ips" : [
"103.120.170.1",
"103.130.18.40",
"180.252.116.66"
]
},
{
"email" : "user4@raihan.net",
"last_seen" : "2026-03-04 12:32:35",
"methods" : [
"WebClient",
"2FA (Trusted)"
],
"ips" : [
"180.247.60.225"
]
}
]
Beberapa penyesuaian yang saya lakukan adalah sebagai berikut:
- Menambahkan library
use JSON::PP; - Menambahkan opsi
formatpadaGetOptions - Menysuaikan logic CSV agar list IP yang banyak tetap berada dalam data row (dibungkus tanda kutip) supaya tidak merusak struktur row saat diparsing
Adapun, fungsi –format=csv & –format=json ini hanya bisa digunakan secara independen tanpa parameter lain. Jadi misalnya kita menjalankan “/srv/zm-audit-log –format=json –user=user1@colamen.id” maka format yang akan muncul tetap script default, dengan format table ASCII.
Panduan Penggunaan Script
Setelah melakukan modifikasi, script ini menjadi lebih fleksibel dengan berbagai opsi parameter:
- –list
Hanya menampilkan list user yang ditemukan di file log. - –all
Parameter ini akan melakukan inspection pada semua file audit.log* di direktori /opt/zimbra/log. Script ini sudah otomatis bisa membaca file.gz../zm-audit-log.pl --all --list - –user=EMAIL
Digunakan untuk audit history login satu akun tertentu../zm-audit-log.pl --user=raihan@excellent.co.id - –format=STR
Menentukan format output script. Pilihannya:
table(default),csv, ataujson.-
CSV: Menggunakan semicolon (
;) sebagai pemisah kolom agar aman dibuka di Excel../zm-audit-log.pl --format=csv --list -
JSON: Format terbaik untuk integrasi ke aplikasi lain.
./zm-audit-log.pl --format=json
-
- –file=FILE & –dir=DIR
Digunakan jika kita ingin melihat history dari file selain audit.log yang tidak berada di direktori /opt/zimbra/log.
Script ini bisa membantu proses analisis lebih lanjut atau alert sistem email server Zimbra. Kita bisa dengan mudah mengambil list email dengan bersih hanya menggunakan satu baris perintah: ./zm-audit-log.pl --format=csv | awk -F ';' '{print $1}'.
Apabila rekan-rekan mengalami kesulitan atau ada kebutuhan format data audit yang diperlukan, Excellent menyediakan layanan maintenance email server Zimbra dan sudah mencakup konfigurasi script diatas. Bagi rekan-rekan yang berminat untuk jasa layanan tersebut bisa langsung kontak & tanya-tanya ke email sales@excellent.co.id.