Cara DOM Cloud mengatasi Spam

Semua platform dan website yang bisa digunakan untuk publik, pasti bakal menjadi sasaran empuk spam internet. Meski platform itu se-"unpopuler" DOM Cloud.

Motif spam dalam konteks computing platform bisa apa saja, yang aku temui selama ini itu ini:

Seberapa Aman DOM Cloud dari day 1

Aku paham keamanan linux dari pertama DOM Cloud berdiri. Yang penting:

  1. User Tidak Diberi Akses Sudo
    User tidak diberikan akses sudo untuk mencegah mereka merampok data website orang lain dan melakukan perubahan sistem yang berbahaya.

  2. Pengaturan yang Harus Lewat Sudo Dibuatkan Skrip
    Config penting seperti NGINX dan DNS dilakukan pakai skrip yang dikontrol dengan ketat dan profesional mirip Vercel.

  3. Limitasi Komputasi: Konsumsi Storage dan Network
    Setiap pengguna memiliki batasan pada penyimpanan dan penggunaan jaringan untuk mencegah penyalahgunaan sumber daya.

  4. Tak perlu fitur niche (.HTACCESS, Email & FTP)
    Aku menghindari fitur problematik yang ada di hostingan tradisional (cPanel) seperti .htaccess, email dan FTP. Alternatifnya aku harus ngajarin orang ngatur NGINX, nge-block fitur menerima email, dan mengganti FTP dengan SFTP (FTP via SSH).

Tapi ternyata setelah rilis pun kadang server down sendiri wkkw gara2 kreativitas user gratisan. Aku ceritakan insiden yang sudah terjadi di DOM Cloud, dari pertama kali dia berdiri.

1. Masuk ke Abuse IPDB

Sekitar tahun 2021, IP server singapura masuk ke Abuse IPDB. Pertama kali itu terjadi aku langsung panik. Karena kalau masuk Abuse IPDB, berarti cepat atau lambat bakal dikontak sama tim Security Digital Ocean dan itu kayak... aku harus bertindak cepat atau nanti di suspend.

Biasanya... abuse yang seperti ini karena ada yang iseng masang DoS-Bot. Jadi mereka scan website WordPress di internet terus mereka coba bobol login nya pakai brute force. Dan biasanya ini cepat sekali diinstall lagi sekali di blok. Kayak mereka rela baca-baca dokumentasi automatic deployment gitu wkw. Jadi kalo sekali di-ban, mereka bikin lagi akun baru.

Solusinya adalah aku pasang whitelist firewall. Jadi lewat iptables, aku setting outgoing networknya seperti begini:

// Perbolehkan ping
-A OUTPUT -o lo -j ACCEPT
// Perbolehkan koneksi keluar yang sudah disambung (request dari NGINX misal)
-A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
// Perbolehkan koneksi keluar SSH
-A OUTPUT -p tcp --dport 22 -j ACCEPT
// Perbolehkan koneksi keluar DNS
-A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT
-A OUTPUT -p udp -m udp --dport 53 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 53 -j ACCEPT
-A OUTPUT -p udp -m udp --sport 53 -j ACCEPT
// Blokir koneksi keluar SMTP jadul
-A OUTPUT -p tcp -m tcp --dport 25 -j REJECT
-A OUTPUT -p tcp -m tcp --sport 25 -j REJECT
// Perbolehkan koneksi keluar untuk IP yang sudah di whitelist
-A OUTPUT -m set -j ACCEPT --match-set whitelist dst
// Blokir koneksi selain rule diatas untuk user berikut
-A OUTPUT -m owner --uid-owner 5121 -j REJECT -m comment --comment "usergratisan1"
-A OUTPUT -m owner --uid-owner 5122 -j REJECT -m comment --comment "usergratisan2"
-A OUTPUT -m owner --uid-owner 5123 -j REJECT -m comment --comment "usergratisan3"

Untuk setting whitelist nya aku gunakan script yang meng-indeks IP dari whitelist domain, kemudian IP nya di simpan di ipset dan /etc/hosts.

Sekarang setiap akun gratisan bakal punya firewall aktif dan itu gak bisa dimatikan sampai dia bayar.

Trik ini ampuh untuk mengusir spam bot dan orang-orang yang iseng menggunakan platform sebagai VPN. Gak enaknya, kalau kamu butuh third-party API, kamu harus bayar. Tapi ini menurutku tradeoff yang bagus, karena biasanya third-party API itu berbayar, jadi kenapa tidak mau bayar ke DOM Cloud?

2. Laporan Phising

Kejadian ini pernah terjadi di tahun 2021. Domain domcloud.io sering banget kena peringatan "hati-hati phishing" merah dari Chrome. Ini gara-gara ada pengguna gratisan yang nakal dan bikin website phishing di dalamnya.

Bayangkan seperti mereka bikin username "instagram" sehingga nama domainnya jadi "instragram.domcloud.io", terus dikasih halaman mirip seperti login IG. Sudah pas itu dipakai untuk phising, karena orang gaptek gak sadar.

Dan itu ada 10 pas dapat laporan pertama kali wkwk. Setelah diblokir, mereka muncul lagi.

Parah lagi, domcloud.io, yang jadi domain umbrella untuk semua user, diblokir dari level registrar. Ini karena ada laporan phishing atas nama bank BNI.

Akhirnya, dengan harapan terakhir aku coba atasi dengan merandom nama di domain. Jadi, semua domain di domcloud.io dirandom belakangnya.

Tapi masalah belum selesai, laporan tetap masuk dan akhirnya domcloud.io diban permanen. Wkwk.

Kemudian, dengan domain baru, aku pisahkan antara .dom.my.id untuk yang dirandom, dan .domcloud.dev yang bisa dikustom. Nah, yang bisa dikustom ini harus bayar, biar kalau sampai diblokir lagi, aku nggak terlalu sedih. Wkwk.

3. Server DoS

Ya iyalah, DOM Cloud baik banget bagi-bagi komputasi gratis pakai akses SSH cuma-cuma lagi. Pasti bisa juga diinstall buat mining crypto.

Aku sudah lama mengantisipasi ini dan kompleks banget aku bikin ini preventif.

Cara yang paling ampuh saat ini yaitu aku pasang script cron 5 menit sekali untuk melihat proses yang jalan di level user, dan kalau ada dangling proses yang nerjalan lebih dari 5 menit dan tidak dispawn dari NGINX, dan tidak sesi SSH yang lagi berjalan (agar nggak nge-kill vscode server misalkan) maka proses itu di kill.

Fungsi utamanya adalah biar mereka tidak makan RAM. Dan ini pun gak cukup. Kadang ada orang yang naif nge-run Java di server dan itu bikin server langsung hang karena RAM nya full.

Akhirnya aku pasang Early OOM dan meski sempet bikin server gak respon selama 5 menit, paling tidak dia masih bisa recover sendiri. Daripada sebelum itu, dimana sekali nge-hang aku harus turun gunung untuk restart server.

Itu masih RAM. Belum Storage.

Storage aku sudah pasang beberapa instruksi di cronjob dalam root level untuk menghapus cache secara otomatis karena orang-orang malas menghapus cache mereka sendiri, tapi aku peduli setiap MB yang habis dalam server!

Berikut setingan cron dalam server yang relevan untuk monitoring RAM dan Storage:

// Cron job gak boleh lebih dari sejam sekali!
0 * * * * find '/var/spool/cron/' -not -name root -type f | xargs sed -i '/^\s*(\*|\d+,)/d'
// Background proses selain root dan systemd harus di monitor dan di kill
*/5 * * * * /usr/bin/node /home/bridge/public_html/sudokill.js -i bridge,do-agent,dbus,earlyoom,mysql,named,nobody,postgres,polkitd,rpc
// Cache system dari sendmail, certbot dan webmin
@weekly find /var/spool/clientmqueue /var/webmin/diffs -mindepth 1 -delete
@monthly find /etc/letsencrypt/{csr,keys} -name *.pem -type f -mtime +180 -exec rm -f {} ';'
// Cache habis installasi hapus setelah seminggu ngendap
@weekly find /home -maxdepth 1 -type d -ctime +7 -exec rm -rf {}/{.cache,.npm,Downloads,public_html/.yarn/cache,public_html/node_modules/.cache,.composer/cache} \;
// File yang generated (bukan dari script/user) harus di hard-link kalau bisa (mirip pnpm)
// note: hard-link juga ngelink owner & mod file! jadi perlu disegment per home dir user :(
@monthly find /home -maxdepth 1 -type d -ctime +7 -exec rdfind -minsize 100000 -makehardlinks true -makeresultsfile false {}/{.vscode-server,.pyenv,.rvm,.cargo,.local,go,.rustup,public_html/node_modules} \;

Satu fakta unik lagi itu, aku sebenarnya pengen matikan NGINX access log. Tapi dia berguna untuk menghitung network usage dan deteksi DoS.

Bagaimana dengan serangan dari network?

Tentu saja. Serangan DoS itu seperti serangan fajar. Sekali dapet langsung CPU 100%. Dan ini sering terjadi. DOM Cloud menganalisis log trafik dari web dan ngeblokir otomatis pakai Fail2Ban. Yang diblokir:

Kok bisa kepikiran? Karena pas nemu CPU 100% biasanya log traffiknya gak normal. Apalagi WordPress itu parah banget. Karena biasanya orang trafiknya 1% dari user, 99% dari bot. Dan karena bot itu nge-DoS, jadi prosesnya nyala terus. Buang-buang komputasi memang wkwkw.

4. Abusive Register

Karena layanan gratisnya, pasti jadi korban oleh temporary email. DOM Cloud sekarang punya login Google dan GitHub dan sudah didesain segampang mungkin agar orang lebih milih login pakai itu daripada via Email.

Jika harus pakai Email, bakal ada recaptcha, dan DOM Cloud hanya mau menerima registrasi dari email whitelist (seperti @gmail.com atau @*.ac.id) yang sekiranya proven bebas dari akun bot.

Tujuan semula kenapa ini dilakukan untuk mengurangi orang-orang yang pakai service ini untuk bot dan VPN. Tapi secara implementasi yang ampuh tuh memang nge-ban mereka dengan cara firewall tadi.

5. Nge-prevent Abuse Lainnya

Banyak yang aku temukan lain yang purely maintenance. Salah satu senjataku yang ampuh adalah aku ada monitoring system.

Kalau di gambar ini, kiri adalah internal (di cek hourly) sedangkan yang kanan di cek 5 menit sekali. Bedanya, yang kanan itu status kritikal, jadi make sure semua service di system daemon lagi jalan semua, sedangkan yang satunya tidak terlalu urgent, seperti deteksi disk space dan config-config error yang bikin modifikasi setingan macet.

Dua-dua nya kalau ada error langsung dikirim email sama uptime robot dan langsung aku tangani. Lumayan bagus sih untuk layanan monitoring gratis wkwk.

Karena user kalau dapat beginian memang memalukan wkwk.

Kalau mau lebih banyak info masalah keaman di DOM Cloud, coba baca Security Features, Security Measures dan Self-Hosting.

test