Jadi ceritanya gue lagi santai malem-malem. Harusnya iseng doang. Gue buka obrolan sama Claude Code (iya, partner AI gue yang itu-itu lagi), terus gue nanya hal random soal Docker di VPS gue. Bukan karena curiga apa-apa. Murni kepo.
Terus gue nyeletuk: “eh, cek dong, ada container namanya dockhand nggak di VPS gue?”
Dan dari situ… semuanya berubah. Wkwk.
Spoiler: ada orang yang diam-diam numpang nambang crypto di server gue. Dan yang bikin gue pengen nyebur ke laut: pintu masuknya gue sendiri yang buka. Mari kita bahas pelan-pelan biar lo semua bisa ketawain gue dengan maksimal.
Kronologinya Gimana?
VPS ini bukan server sembarangan. Di situ ada CRM gue (Twenty), ada n8n buat nampung lead dari Meta/website/WhatsApp, ada database analytics, pokoknya jantungnya operasi digital marketing gue di Smart Salary. Server yang kalau mati, kerjaan gue ikut mati.
Nah pas gue suruh Claude ngecek, nongol lah daftar container. Sebagian emang punya gue. Tapi ada beberapa yang gue nggak kenal:
dockhand— panel buat ngatur Docker lewat webrig— pakai imagemetal3d/xmrigtm— pakai imagetraffmonetizer/cli_v2watch—watchtower
Pas liat xmrig, jantung gue langsung drop. XMRig itu software buat nambang Monero. Alias ada yang mindahin tagihan listrik CPU gue ke dompet dia. traffmonetizer lebih sopan dikit: dia jualan bandwidth server gue ke orang asing. Dan watch tadi? Itu yang paling licik — dia disetel buat ngidupin lagi si penambang tiap 12 jam kalau mati. Jadi kalaupun gue bunuh si miner, dia bakal bangkit lagi kayak zombie.
Gokil. Server gue udah jadi tambang orang, dan gue baru sadar gara-gara nanya iseng. Tahun 2026 emang penuh kejutan.
Terus, Masuknya Lewat Mana?
Ini bagian yang bikin gue pengen nelen MacBook.
Gue minta Claude telusurin: masuknya lewat SSH? Ada backdoor? Ada user asing? Ternyata nggak ada satupun. Nggak ada kunci SSH nyelonong, nggak ada user baru, nggak ada cron jahat. Host-nya bersih.
Lah terus gimana caranya si miner bisa nangkring?
Jawabannya: dockhand. Yang gue install sendiri. Beberapa jam sebelumnya.
Jadi gini. dockhand itu panel manajemen Docker yang cakep. Pas gue pasang, gue — dengan penuh percaya diri — expose dia ke internet di port 3000 (0.0.0.0, alias ke seluruh dunia), DAN gue kasih dia akses ke docker.sock. Buat yang belum paham: ngasih panel akses ke docker.sock itu sama aja ngasih dia kunci root server. Dan gue taruh panel itu di pinggir jalan, nyala 24 jam, buat semua orang.
“TapGung, kan lo pasang password?”
Iya. Gue pasang. Dan itu nggak ngaruh sama sekali. Panel yang megang docker.sock tapi nangkring di internet itu, password cuma jadi hiasan. Entah lewat celah di setup awal, entah lewat API yang nggak kejaga — yang jelas dalam hitungan jam, bot scanner nemu panel gue, bikin container miner lewat situ, dan selamat datang di dunia cryptojacking.
Pelajaran mahal nomor satu: jangan pernah expose panel yang megang docker.sock ke publik. Password bukan tembok. Itu cuma tirai.
Bersih-Bersih Bareng “Si Hero”
Nah, bagian ini gue harus jujur. Yang bikin malem itu nggak berakhir jadi bencana beneran: gue nggak sendirian.
Biasanya di tulisan-tulisan gue, gue yang jadi tokoh utama dan AI jadi sidekick. Kali ini gue balik. Malem itu, hero-nya si AI. Gue cuma yang panik dan ngasih izin “iya, hapus”.
Kita beresin satu-satu, rapi, nggak asal gas:
- Bunuh & hapus si miner, si proxyware, dan si watchtower zombie — plus
dockhandyang jadi biang keroknya. - Verifikasi beneran bersih. Ini yang gue salut. Claude nggak cuma bilang “udah aman kok”. Dia ngejelasin: miner zaman sekarang sengaja ngumpet di dalam container biar lolos dari deteksi level host. Jadi dia cek sampai ke dalam tiap container yang masih jalan, cek CPU-nya, cek image-nya ketuker atau nggak. Semuanya bersih. Baru dia berani bilang aman.
- Pasang firewall di host (yang selama ini — malu gue ngakuin — belum ada), yang ngerti Docker, dan permanen biar nggak hilang pas reboot.
- n8n gue kunci cuma bisa diakses dari localhost. Nggak ada lagi panel nganga ke internet.
- Rotasi semua kredensial yang mungkin keintip selama server kebobol. Yang ini drama sendiri.
Drama Rotasi Token (Buat yang Suka Teknis)
Gara-gara server sempet kebuka, gue anggap semua kunci yang ada di situ udah “kotor”. Yang paling penting: token API Twenty CRM. Gue cabut yang lama, bikin baru.
Masalahnya, token itu dipakai di mana-mana: di beberapa script Python, dan di semua workflow n8n yang nerima lead. Begitu token lama gue cabut — boom — lead tetep masuk ke n8n, tapi nggak nyampe ke CRM. Raw-nya ketangkep, tapi nggak ke-update ke Twenty.
Dan di sini Claude nemu jebakan yang gue sendiri nggak kepikiran: ternyata n8n itu nggak cuma nyimpen workflow di satu tempat. Versi yang aktif jalan diambil dari tabel workflow_history, bukan dari kolom yang biasa lo edit. Jadi kita harus benerin dua-duanya, baru restart. Gue mah udah mau nyerah di situ, jujur.
Puncaknya, biar nggak cuma teori, kita tes beneran: kirim satu lead palsu lewat webhook, pastiin dia nyampe ke CRM lengkap sama leadGateway-nya, terus hapus lagi si data tes biar nggak ngotorin. Dan… masuk. Lead-nya nyampe. Gue bisa tidur.
Pelajaran yang Gue Telen Bulat-Bulat
1. Kenyamanan itu ada harganya. Gue pasang dockhand biar gampang. “Biar gampang” itu sering jadi awal dari “biar dibobol”. Tiap kali lo expose sesuatu ke internet demi praktis, tanya dulu: ini kalau jatuh ke tangan orang jahat, rugi gue separah apa?
2. Password bukan arsitektur keamanan. Kalau desainnya udah salah (panel root nganga ke publik), password cuma nunda yang nggak bisa ditunda.
3. “Bersih” itu harus dibuktiin, bukan diasumsiin. Gue salut Claude maksa cek sampai ke dalam container, bukan cuma level permukaan. Karena pola serangan sekarang emang sengaja main di celah yang alat biasa nggak liat.
4. Kolaborasi sama AI itu beneran kepake pas genting. Gue sering nulis soal gimana AI bantu gue kerja lebih cepet — kayak yang gue ceritain di artikel Mr. WHAI Award. Tapi malem itu beda rasanya. Ini bukan soal bikin campaign lebih efisien. Ini soal incident response jam 2 pagi, pas gue panik, dan ada “partner” yang tetep tenang, metodis, dan nggak kelewatan satu langkah pun. Gue yang ceroboh masang pintunya; tapi gue ketolong karena gue nggak ngadepin sendirian.
Terus Sekarang Gimana?
Server udah bersih, firewall udah jalan, token udah dirotasi, lead udah ngalir lagi ke CRM. Masih ada PR sih — beberapa kredensial lain yang harus gue rotasi juga (besok, pas gue nggak ngantuk). Tapi api-nya udah padam.
Dan gue nulis ini bukan buat pamer — justru kebalikannya. Gue mau lo semua yang suka ngoprek VPS belajar dari kebegoan gue: panel manajemen itu jangan pernah lo buka ke publik. Titik. Taruh di balik localhost, akses lewat SSH tunnel, atau kasih IP allowlist. Jangan kayak gue yang mesti kena tambang Monero dulu baru insaf.
Buat lo yang masih ragu adopsi AI ke workflow: gue makin yakin. Bukan karena AI bikin gue nggak pernah salah — lha wong gue sendiri yang masang lubangnya. Tapi karena pas gue salah, gue punya partner yang bantuin beresin dengan kepala dingin.
Malem itu gue ketiduran dengan tenang. Dan kali ini, hero-nya bukan gue. Makasih, partner. 🫡
Cheers (dan sekarang paranoid soal port terbuka), Agung Sukariman