Banjir pengikis pada pelan Percuma Cloudflare: apa yang menghentikannya, dan apa yang kami biarkan dimatikan

Operasi

Pada suatu pagi, sebuah laman senarai produk kami berhenti dibuka. Cloudflare memaparkan ralat 524 kepada pengunjung, pelayan asal mengambil masa dua hingga enam minit setiap halaman, dan tiada apa yang memaklumkan kami selama kira-kira sepuluh jam. Punca masalah ialah pengikis yang menggunakan proksi kediaman pada kadar kira-kira 225 permintaan sesaat.

Bentuk banjir tersebut

Setiap halaman dipaparkan untuk setiap permintaan, jadi setiap pekerja memasukkan beratus-ratus paparan ke dalam barisan dan mencapai had CPU-nya.

Mengapa had setiap alamat tidak dapat membantu

Had kadar mengira permintaan setiap alamat. Dengan satu hingga tiga permintaan daripada setiap beribu-ribu alamat, tiada satu pun alamat yang menghampiri had. Menyekat negara akan menyekat pengunjung kami. Apa yang pengikis tidak mampu palsukan dengan murah ialah berkelakuan seperti pelayar yang pernah melawat laman tersebut.

Di tepi Cloudflare: tiga peraturan percuma

Pelan Percuma membenarkan lima peraturan tersuai WAF setiap zon. Kami menggunakan tiga, kesemuanya dengan cabaran terkawal dan bukan sekatan, supaya orang yang tersilap tangkap boleh klik untuk melepasi:

Ketiga-tiganya membenarkan bot yang disahkan Cloudflare, agen pengguna yang memperkenalkan diri sebagai robot, alamat kami sendiri, laluan API dan webhook, serta fail yang bukan halaman. Dua hari kemudian, banjir itu masih berterusan: dalam satu jam, peraturan pelayar palsu mencabar lebih daripada 10,000 permintaan. 10,000 peristiwa yang dikembalikan Cloudflare setiap pertanyaan berasal daripada 9,627 alamat, tiada satu pun melebihi 4.

Di asal: satu pintu masuk dalam aplikasi

Separuh tanpa kepala mempunyai kepala pelayar penuh, jadi peraturan tepi sahaja tidak menangkapnya semasa peraturan kecemasan dimatikan. Dalam aplikasi itu sendiri, kami meletakkan perisian perantara kecil di hadapan perender halaman:

Pada minit pertama, pintu masuk itu menolak kira-kira 6,700 pelayar palsu dan menghalau kira-kira 6,700 orang asing, sambil melayan orang asing pada kira-kira 9 halaman sesaat. Permintaan perlahan jatuh kepada sifar, CPU pekerja turun daripada had mereka kepada 12 hingga 15 peratus, dan memori mereka daripada 4 hingga 5 GB setiap satu kepada 0.65 GB.

Apa yang kami biarkan dimatikan

Pengajaran utama

Banjir melalui proksi perumahan mudah dikesan berdasarkan apa yang tiada: kepala fetch pelayar, kuki dan Referer. Cabar itu di tepi, kekalkan orang asing dalam had yang boleh dirender oleh pekerja anda, dan pastikan sesuatu di luar pelayar menyedari apabila halaman berhenti dibuka. Night Watch membungkus ketiga-tiganya: pemantau, peraturan dengan suis automatik untuk yang kecemasan, dan pintu masuk untuk aplikasi web Python.

Dikemas kini: