Jika ada masalah, blokir di level IP
(boston.conman.org)- Baru-baru ini, saat menganalisis trafik web, ditemukan bahwa web bot bernama Thinkbot menghasilkan trafik paling banyak
- Bot tersebut mengabaikan
robots.txt, dan bahkan kalimat perkenalannya sangat tidak serius, hanya kurang lebih berbunyi “kalau ada masalah, blokir saja IP-nya” - Selama satu bulan, bot ini menggunakan 74 IP yang berbeda, yang tersebar di 41 blok jaringan
- Hasil investigasi menunjukkan bahwa semua blok jaringan ini dimiliki oleh Tencent, sehingga muncul kecurigaan apakah ini terkait dengan kemungkinan melimpahkan biaya Great Firewall ke pihak luar
- Pada akhirnya ditambahkan aturan pemblokiran besar-besaran yang mencakup lebih dari sekitar 470 ribu IP
Kemunculan Thinkbot
- Saat menganalisis trafik web, ditemukan bahwa web bot bernama Thinkbot menempati porsi teratas
- String User-Agent-nya sangat tidak serius, seperti berikut
“Mozilla/5.0 (compatible; Thinkbot/0.5.8; +In_the_test_phase,_if_the_Thinkbot_brings_you_trouble,_please_block_its_IP_address._Thank_you.)”.
- Selain kalimat “jika menimbulkan masalah pada tahap pengujian, silakan blokir IP-nya”, bahkan tidak ada URL rujukan
- Bot ini sama sekali tidak menghormati file
robots.txtdan tetap melakukan crawling - Sebagai pengelola situs, upaya untuk memblokirnya juga sulit karena bot ini tidak memakai satu IP saja, melainkan 74 alamat IP
- Setelah ditelusuri balik dan dicek ASN-nya, trafik ini berasal dari 41 blok jaringan
- Ini berarti pertahanan dengan pemblokiran satu IP saja tidak mungkin memadai
Keterkaitan dengan Tencent
- Ke-41 blok jaringan ini semuanya dimiliki oleh Tencent
- Penulis mencurigai bahwa pemerintah Tiongkok bisa saja membiarkan atau mendorong hal ini, dan menafsirkannya sebagai upaya untuk melimpahkan biaya Great Firewall ke dunia luar
- Di dalam Tiongkok, pengumpulan konten tetap diizinkan, dan meskipun diblokir dari luar, dari sudut pandang CCP hal itu bukan masalah; namun bagi negara atau situs lain yang mencoba memblokirnya, ini menjadi beban tambahan
Tindakan pemblokiran firewall
- Penulis secara langsung menambahkan blok jaringan Tencent ke aturan firewall badbots
- Contoh:
43.130.0.0/18,101.32.0.0/20,150.109.96.0/19dan lain-lain - Total lebih dari 40 blok jaringan ditambahkan; meskipun ini tidak mencakup seluruh IP milik Tencent, aturan tersebut tetap mencakup lebih dari 476.590 IP unik
Kesimpulan dan analogi
- Penulis menggambarkan situasi ini sebagai kenyataan bahwa di internet kita tidak bisa lagi memiliki hal-hal baik
- Ini bukan sekadar contoh pemblokiran trafik bot, melainkan kasus yang menunjukkan menurunnya kepercayaan di seluruh ekosistem internet dan respons defensif yang tak terhindarkan
6 komentar
Kalau memang ada masalah, blokir saja di level IP
Sebenarnya, narasi ancaman Tiongkok di bidang lain sudah lama menjadi kenyataan, dan sekarang Tiongkok tampaknya mulai mengancam keberlangsungan ekosistem internet secara keseluruhan juga.
Ini bukan sekadar pernyataan yang muncul dari sentimen kebencian atau bias politik, melainkan sesuatu yang benar-benar sedang menjadi kenyataan, dan tampaknya banyak orang perlu menyadari hal itu.
Kenapa setiap kali kejadian seperti ini dibongkar, ujung-ujungnya CCP..
Wow.. benar-benar keren..
Keren..
Ini China lagi.
Opini Hacker News
Saat mengembangkan web crawler, saya berusaha membuatnya seramah mungkin. Saya memeriksa
robots.txtdengan ketat, melakukan crawling secara lambat, mencantumkan identitas dengan jelas di string User Agent, dan hanya menggunakan satu alamat IP. Namun, saya jadi mengalami berbagai trik anti-bot yang diterapkan justru pada filerobots.txtitu sendiri. Baru-baru ini,robots.txtdiunduh sangat lambat seperti serangan slow loris, sehingga tanpa sengaja saya menganggapnya sebagai 404 lalu terus melakukan crawling. Setelah pengalaman itu, saya mengubah kode agar jika timeout maka diperlakukan sebagaiDisallow /. Ironisnya, bahkan saat berusaha mematuhi aturan, saya malah harus menulis kode untuk mendeteksi alat anti-botRasanya seperti menyembunyikan bel pintu demi mencegah pencuri
Seperti di aplikasi server, di sisi klien pun jika lawan terlihat jahat atau berperilaku salah, saya diam-diam memutus koneksi TCP. Pihak sana harus menyadari sendiri setelah membuang-buang sumber daya untuk sementara waktu
Saya rasa besar kemungkinan fenomena ini tidak disengaja. Bot jahat yang memang tidak mematuhi aturan
robots.txtsejak awal juga tidak akan mengunduh file itu, jadi ini bisa jadi lebih karena kesalahan atau ketidakmampuan daripada niat burukSanksi yang hanya menghukum orang yang berusaha patuh pada aturan justru terasa kontraproduktif
Saya menghargai usaha untuk benar-benar mematuhi aturan. Membatasi
robots.txtmungkin bisa jadi sebuah kesalahan, tetapi beberapa crawler memang mencari halaman yang lebih menarik darirobots.txt, jadi memperlambatnya bisa membantu menghindari masalah dengan cepat. Pada akhirnya, cara seperti ini menghalangi informasi bot dan memperlambat mereka, dan dari sudut pandang operator situs yang dirugikan bot jahat, mereka mau tak mau jadi tidak terlalu peduli membedakan bot jujur dari yang tidakSaya penasaran apa kesamaan situs web yang benar-benar dirugikan parah oleh bot. Saya sudah bertahun-tahun menjalankan web server dari rumah dengan TLD
.com, peringkatnya juga lumayan tinggi di Google untuk kata kunci terkait, dan saya tidak punya pengaturan khusus pemblokiran bot di router maupun server. Saya pernah menghitung permintaan bot karena penasaran, tetapi kebanyakan hanya melakukan port scan atau mengambil halaman indeks, dan hampir tidak mengikuti tautan yang dimuat secara dinamis. Baik di era Apache 2 maupun sekarang saat menjalankan beberapa situs dengan Axum, saya tidak melihat dampak mencolok dari bot. Mungkin karena directory listing, saya tidak tahu, jadi saya ingin mendengar penjelasannyaRasanya banyak orang pintar terlalu terobsesi dengan isu web scraping. Kalau aktivitas bot itu tidak benar-benar menimbulkan beban besar atau masalah serius pada situs, selain beberapa pengecualian tentu saja, kebanyakan ini cuma permainan ‘merebut bendera’ yang tidak berarti. Bedanya, di permainan ini Anda bahkan tidak pernah menemukan bendera lawan, hanya kehilangan waktu. Menurut saya, respons terbaik adalah membuat produk web yang cepat dan dirancang dengan baik meskipun ada banyak peserta yang menyebar dan sulit diidentifikasi yang menimbulkan beban. Secara realistis, pendekatan ini juga sangat meningkatkan kepuasan pengguna manusia yang sesungguhnya
Dari pengalaman saya, mungkin Anda hanya belum menyadari seberapa serius masalah ini. Di pekerjaan sebelumnya saya menangani performa aplikasi untuk web app, dan sebagian pengguna memang sangat cepat, tetapi kebanyakan lambat. Saat menganalisis log performa, ternyata 60% dari seluruh request berasal dari bot yang sudah dikenal, belum termasuk bot aneh lainnya. Bahkan ada beberapa perusahaan yang pada praktiknya melakukan serangan DoS ke layanan kami, dan ini pernah membuat situs down. Masalahnya, bot selalu hanya mengambil respons yang sudah di-cache, sehingga percakapan pengguna nyata terus terdorong keluar dari cache LRU. Ada bot yang meng-scrape ulang semua halaman yang pernah dikunjungi setiap beberapa menit, ada juga yang terus menaikkan throughput sampai layanan melambat. Kadang mereka juga mencoba menjalankan JavaScript dan mengirim form. Hanya Googlebot yang satu-satunya berperilaku sopan. Bahkan 40% traffic masuk yang nyata terkonsentrasi pada satu URL saja, jadi manfaat yang didapat dari bot ini pun nyaris tidak ada. Baru belakangan saya sadar bahwa banyak bot itu dipakai perusahaan AI tahap awal untuk mengumpulkan data
Seorang teman menjalankan instance gitea kecil yang terbuka untuk publik tetapi hanya dipakai sesama teman. Namun, setiap jam ada ribuan request bot masuk. Walaupun tidak berdampak langsung ke layanannya, setidaknya itu terasa seperti gangguan
Saya membayar mahal untuk mendapatkan data demi membuat produk web yang cepat. Jadi dengan memblokir entitas seperti ini, itu bukan buang waktu, melainkan benar-benar bisa menghemat bandwidth dan biaya server. Berkat itu, pelanggan sungguhan juga tetap mendapat manfaat yang sama tanpa kontennya di-scrape. Saya tidak paham logika yang menganggap ini sebagai eksploitasi terhadap seseorang
Menurut saya ini lebih mirip permainan whack-a-mole daripada 'capture the flag'. Dari pengalaman pribadi, di forum yang mencoba mengidentifikasi dan memblokir 'bot jahat', selalu muncul lebih banyak bot lagi tanpa akhir
Memang banyak orang pintar di antara kita, tetapi kita juga cenderung terlalu terobsesi pada masalah teknis. Jika tidak melakukan apa-apa, rasanya akan terus mengganggu pikiran, dan setidaknya kalau memblokir sesuatu rasanya jadi sedikit kurang menjengkelkan
Saya selalu heran betapa banyak orang di Hacker News yang menganggap serius
robots.txt. Sangat mengesankan bahwa ada begitu banyak orang dengan niat baik. Tetapirobots.txtbukan solusi yang nyata. Orang harus tahu bahwarobots.txtitu ada, lalu harus menambahkan kode pemeriksaanrobots.txtke crawler mereka, jadi ada kompleksitas tambahan. Saya penasaran apakah ada solusi praktis lain. Hal-hal seperti ‘micropayment’ atau ‘Merkle tree besar untuk verifikasi identitas asli’ sudah lama dibicarakan, tetapi tidak pernah benar-benar diimplementasikanRasanya hampir tidak ada pengembang bot yang tidak tahu soal
robots.txt. Hanya saja ada orang-orang yang keliru mengira proyek mereka adalah kasus istimewa yang boleh mengabaikan aturan semua orangrobots.txttidak punya kekuatan hukumKami juga melihat pola bot seperti itu di log kami. Cukup mengganggu, tetapi setidaknya mereka mengaku sebagai bot dan traffic nyatanya tidak banyak. Sebagian besar traffic justru berasal dari bot yang berpura-pura sebagai browser sungguhan, atau masuk dari berbagai IP di Brasil dan Asia. Saya sudah mencoba segala macam cara selama seminggu terakhir untuk memblokir bot, jadi saya bagikan pengalaman yang mungkin berguna.
Ada request dari ratusan IP, tetapi masing-masing hanya beberapa kali sehari, dan semuanya menyamar dengan UA nyata
Mereka hampir tidak pernah mengirim URL referrer, tetapi bot Huawei Cloud kadang mengirim referrer juga, meski traffic-nya kecil
Upaya utama saya adalah membatasi bandwidth URL yang mengandung
id=menjadi 1Kb/s dengan harapan jika lambat mereka akan menyerah, tetapi bot sama sekali tidak peduli dan tetap terus memintaMereka juga beradaptasi dengan koneksi keep-alive, jadi saya mematikan keep-alive sepenuhnya di
/cgit/, tetapi tetap saja mereka menghabiskan semua koneksiMetode yang saya pakai sekarang adalah hanya mengizinkan URL dengan
id=jika ada query stringnotbot; jika tidak ada referrer, saya tampilkan pesan 403 yang memberi tahu bahwa jika Anda pengguna sah, tambahkan parameternotbot. Cara ini mengurangi beban dan memperbaiki koneksi pengguna sah, tetapi bot tetap terus meminta dan hanya menerima 403 berulang-ulangKesimpulannya, sepertinya hanya ada dua pilihan: memakai pendekatan ad hoc yang disesuaikan per situs, atau menyerahkannya ke pihak seperti Cloudflare yang punya sumber daya cukup besar. Solusi pemblokiran bot yang standar punya keterbatasan karena pihak yang punya banyak sumber daya pada akhirnya bisa mengakalinya atau sanggup menanggung biayanya
Ada juga cara memblokir lebih awal dengan 403 untuk substring UA yang jarang dipakai seperti
MSIE 3.0atauHP-UX. Setelah itu kumpulkan log 403 dan blokir ASN yang bermasalah secara terpisah, lalu ulangi lagi permainan whack-a-mole ituSaya memakai perangkat lunak keluarga publicfile dari djbwares milik Bernstein. Saya juga menambahkan alat static GEMINI UCSPI-SSL, dan mengambil ide dari spesifikasi GEMINI untuk melarang fragment dan query parameter dalam URL request. Alasannya sama seperti logika pelarangan di GEMINI, dan itu juga bisa diterapkan pada layanan HTTP statis. Dalam konfigurasi server, untuk menangani query parameter dengan benar saya harus membuat banyak nama file aneh secara terpisah, dan itu tidak realistis. Berkat ide ini, percobaan serangan terhadap kerentanan CGI atau PHP bahkan tidak pernah mencapai filesystem, karena sudah disaring di tahap pemecahan request. Bagi operator situs statis, saya merekomendasikan memblokir query parameter seperti di GEMINI. Tentu saja ini pengecualian jika dalam kategori situs statis Anda benar-benar ingin memakai query parameter
Sejak suatu waktu saya mulai bertanya-tanya apakah pendekatan menggunakan whitelist rentang IP benar-benar mungkin dilakukan. Saya juga membayangkan pendekatan yang dikelola lewat upaya komunitas seperti daftar adblock
Sayangnya, justru bot yang paling patuh biasanya memakai IP yang stabil, sedangkan pelaku jahat kapan saja bisa memakai proxy rumahan. Jika Anda melarang IP proxy residensial, pengguna nyata bisa ikut terdampak, dan pelaku jahat tinggal pindah ke tempat lain. Dari pengalaman menghadapi ribuan IP nyata, informasi berbasis IP saja sulit dijadikan dasar keputusan; perlu informasi tambahan
Perusahaan Pokémon Go juga pernah mencoba cara ini untuk mencegah scraping setelah peluncuran. Mereka membagi IP ke dalam tiga kategori: blacklist (
Google Cloud,AWS, dll.), IP tidak tepercaya (residensial), dan whitelist (IPv4 normal, dll.). Awalnya cara ini berhasil menangkap scraper utama, tetapi scraper terbesar justru mengoperasikan peternakan modem terminal untuk mengakalinya. Akibatnya, pengguna biasa menyerah bermain tanpa peta, sementara pemain hardcore malah meningkatkan penggunaan scraper berbayar. Pada akhirnya beban server justru bertambah. Saya menganggap ini salah satu dari banyak keputusan buruk yang pernah dibuat Pokémon GoBanyak perusahaan AS sudah menerapkan ini. Namun, saat Anda berada di luar negeri dan mereka tetap menagih tanpa menyediakan cara untuk membatalkan layanan, itu jelas tidak masuk akal
Whitelist dan blacklist tidak harus dipilih secara biner. Sebagian besar traffic ada di wilayah abu-abu. Jika suatu IP sudah dimasukkan ke whitelist lalu terdeteksi gejala aneh, Anda harus menghapusnya dari whitelist, mengumumkannya, memberi tahu pihak terkait, menerima notifikasi, lalu berkoordinasi lagi sampai masalahnya dianggap selesai; secara praktis ini sangat rumit. Whitelist hanya efektif di antara mitra yang punya hubungan saling percaya. Blacklist berguna untuk memblokir alamat yang bermasalah, atau CIA, Rusia, Tiongkok, penyedia cloud, dan sebagainya. Pendekatan realistisnya adalah hanya memasukkan ke whitelist tempat-tempat seperti host internal perusahaan yang punya sistem anti-penyalahgunaan yang kuat
Saya sedang membuat whitelist bot positif melalui proyek open source GoodBots. PR sangat diterima
Saya memakai cara mengirim semua request dengan header kustom, lalu memblokir semua request lainnya
Di sisi luar saya memakai proxy Cloudflare, dan secara internal saya menempatkan Crowdsec dan Modsecurity CRS di depan Traefik. Setelah disetel agar mengurangi false positive, sistem ini berjalan sangat stabil. IP yang diblokir sementara dan IP yang dilaporkan saya kirim ke Crowdsec, lalu log-nya diposting ke kanal Discord. Rata-rata saya memblokir puluhan IP berbeda per hari. Dari pengamatan saya, percobaan mengakses resource privat atau menargetkan CVE jauh lebih sering datang dari IP AS daripada IP Tiongkok. Saya tidak peduli pada crawling konten publik; sisanya semua hanya bisa diakses lewat SSO atau intranet. Memblokir upaya exploit atau flooding itu sendiri lebih efektif daripada memblokir negara tertentu
Pendekatan seperti Crowdsec memang menarik, tetapi saya menganggap menyerahkan seluruh traffic server ke perusahaan komersial sebagai risiko besar
Pada akhirnya percobaan serangan yang serius kemungkinan besar sudah diblokir di tempat seperti Cloudflare WAF
Banyak gedung apartemen hanya bisa keluar ke internet lewat beberapa alamat IP saja (lihat Carrier-grade NAT)
Lebih dari separuh traffic saya berasal dari bot Bing, Claude, dan Facebook. Mereka bukan penyumbang traffic utama, tetapi hanya menghabiskan sumber daya server dan menjadi penyebab utama saat situs melambat (AI, Microsoft, dan Facebook sering kali mengabaikan akal sehat). Tiongkok dan sejenisnya hanya sebagian dari traffic jahat; masalah sebenarnya adalah perusahaan-perusahaan AS yang mengabaikan
robots.txtatau DNS rate limit