Mengerahkan Berbagai Alat Kecil untuk Memblokir Bot
(lambdacreate.com)- Gitea dan blog di server pribadi tertekan oleh trafik scraping, memicu peringatan disk, CPU, dan memori berturut-turut; operator pun menggabungkan analisis log, Nginx, dan Fail2Ban untuk bertahan
- Menurut Zabbix, trafik melonjak jauh di atas biasanya; rata-rata bulanan Nginx adalah 8 request per detik, dan pada periode terburuk naik hingga 20+ request per detik
- Penyebabnya bukan lonjakan rujukan tunggal seperti dari Reddit atau Hacker News, melainkan lebih mirip scraping terdistribusi, dengan beberapa blok IP mengeruk URL di
www.lambdacreate.comdankrei.lambdacreate.com - Nginx mengembalikan 403 untuk user agent berbahaya yang dikenal dan menerapkan pembatasan request per IP; klien yang memicu 403 secara berlebihan diblokir 24 jam lewat Fail2Ban
- Pada saat penulisan, daftar blokir bertambah hingga total 735 bans, dan khususnya request yang mencoba membuat tarball untuk semua commit di repository publik Gitea meningkatkan beban server
Trafik scraping yang menekan server pribadi
- Trafik bot yang tidak diinginkan tiba-tiba membanjiri ruang internet pribadi, sampai memengaruhi layanan yang seharusnya diakses pembaca sungguhan
- Layanan yang mengindeks situs untuk tujuan pelestarian, seperti Archive.org, termasuk yang diizinkan, tetapi Amazon, Facebook, OpenAI, dan berbagai bot acak dibedakan sebagai pihak yang mengonsumsi konten untuk tujuan mereka sendiri
- Pengumpulan data internet berskala luas oleh perusahaan besar dan kebutuhan data untuk melatih model AI dianggap semakin memperbesar tekanan scraping
- Trafik ini diperlakukan bukan sebagai konsumen nyata Lambdacreate, melainkan sebagai gangguan yang menurunkan aksesibilitas bagi pembaca manusia
Zabbix lebih dulu menangkap gejala anomali
- Yang pertama memberi tahu adanya masalah adalah Zabbix, dengan peringatan bahwa disk untuk container sudah penuh
- Di lingkungan berbasis LXD, file sparse ZFS diperbesar dan situs sempat diturunkan lalu dinaikkan kembali, tetapi akar masalahnya masih tersisa
- Setelah itu, instance Gitea menghabiskan seluruh disk setiap hari dan menghasilkan data 20–30GB per hari
- Awalnya hal ini dianggap sebagai masalah Gitea yang tidak mengaktifkan pembersihan arsip repository secara default, sehingga tugas pembersihan agresif dikonfigurasi
- Tak lama kemudian peringatan CPU dan memori juga muncul;
git pulldangit pushdi Gitea menjadi sulit, dan klien weechat pun tidak bisa mempertahankan koneksi
Jumlah request melonjak hingga sekitar 10 kali dari biasanya
- Berkat monitoring out-of-band untuk membandingkan metrik masa lalu dan kondisi saat ini, pola abnormal bisa dikonfirmasi
- Di dashboard Zabbix, metrik utama adalah jumlah request Nginx dan grafik throughput jaringan
- Rata-rata request Nginx selama satu bulan berada di kisaran 8 request per detik
- Pada periode terburuk, masuk 20+ request per detik; kecil menurut standar layanan besar, tetapi bagi server pribadi itu sekitar 10 kali biasanya, sehingga dampaknya besar
- Bukan hanya jumlah request sederhana, peningkatan penggunaan disk dan CPU terkait Gitea juga muncul bersamaan, membuat beban operasional server membesar
Melacak log dengan lnav dan goaccess
- Untuk menjaga server tetap hidup cukup lama agar log bisa diperiksa, container dan Nginx dimatikan sementara lalu analisis dimulai
- Alat yang digunakan adalah lnav dan goaccess
lnavmenampilkan file log dalam TUI berwarna dan menyediakan lapisan abstraksi di atas format log umum, sehingga log bisa di-query dengan SQL- Pada
access.log, pemeriksaan berfokus pada pertanyaan berikut- Berapa banyak IP pengunjung secara keseluruhan
- Apakah ada pola alamat IP
- Apakah trafik datang dari referrer tertentu
- User agent apa yang digunakan
- IP mana yang terkait dengan user agent apa
- Hasil analisis menunjukkan bahwa ini bukan “hug of death” dari satu referrer, melainkan beberapa blok IP yang mengeruk URL di seluruh situs
403 berbasis user agent dan pembatasan request
- Respons pertama adalah membuat daftar user agent bermasalah di Nginx dan mengembalikan 403 untuk mereka
- Contoh konfigurasi menggunakan
map $http_user_agent $badagentuntuk menandai agent sepertiAdsBot-Google,Amazonbot, danAmazonbot/0.1 - Konfigurasi Nginx dasar meng-include aturan user agent dan juga menetapkan rate limit per IP
- Konfigurasi virtual host memuat perilaku berikut
- Menerapkan pembatasan request dengan
limit_req zone=krei burst=20 nodelay; - Jika
$badagentbernilai benar, memblokir akses konten denganreturn 403;
- Menerapkan pembatasan request dengan
- Cara ini membantu mengurangi pemrosesan backend, tetapi karena server tetap harus menerima request HTTP dan memproses 403, bebannya masih tersisa saat ada banyak request serentak
Mengotomatiskan blokir firewall dengan Fail2Ban
- Setelah log 403 menumpuk, IP unik yang menerima 403 bisa diperiksa dengan
lnav goaccessdigunakan untuk menganalisis log lama dan baru secara bersamaan, guna melihat jumlah request yang masuk ke server dan endpoint yang paling banyak ditargetkan- Untuk perlindungan server yang sesungguhnya, Fail2Ban ditambahkan
- Aturan Fail2Ban berbentuk sederhana: menangkap IP yang memicu respons 403 secara berlebihan di access log Nginx
- Durasi pemblokiran ditetapkan 86400 detik, yaitu 24 jam
- Hasil
fail2ban-client status nginx-forbiddenpada saat penulisan adalah sebagai berikut- Kegagalan saat ini: 13
- Total kegagalan: 57135
- Blokir saat ini: 38
- Total blokir: 735
Target sebenarnya bukan blog, melainkan pembuatan tarball Gitea
- Pada akhirnya, pembaca kembali bisa mengakses blog dan layanan Lambdacreate lainnya
- Dalam situasi harus memblokir trafik robot, bahkan menulis posting blog pun menjadi sulit
- Trafik bermasalah bukanlah scraping blog, melainkan menargetkan pembuatan tarball untuk semua commit di setiap repository publik pada instance Gitea
- Dalam jangka panjang, akan dipertimbangkan cara memperluas daftar blokir atau memberi pengecualian bagi layanan sah seperti Archive.org
- Sikapnya adalah tidak ingin konten menghilang dari mesin pencari, tetapi juga tidak ingin membiarkannya menjadi bahan bakar bagi memburuknya internet akibat AI
Belum ada komentar.