Saya memiliki aplikasi Flask yang saya kembangkan yang sangat bergantung pada interaksi situs web eksternal dan diprakarsai oleh pengguna akhir. Jika saya meninggalkan aplikasi tanpa kontrol bandwidth / pembatasan tingkat apa pun maka aplikasi ini dapat disalahgunakan oleh pelaku dengan niat jahat.
Tujuan saya adalah pendekatan 2 tahap yang cukup sederhana:
Batas tingkat sumber IP individu dari melakukan lebih dari
xjumlah koneksi per menit. Ini bisa dicapai dengan mudahiptables. Inilah contoh yang mirip dengan tujuan saya:iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 15 \ --connlimit-mask 32 -j REJECT --reject-with tcp-resetNilai membatasi kemampuan aplikasi untuk melakukan lebih dari
xjumlah pencarian per URL . Contoh:APP ---- 10 pps ---> stackexchange.com PERMIT APP ---- 25 pps ---> google.com DENY / 15 SECOND BACKOFF
Sejauh yang saya tahu, iptablestidak memiliki cara untuk melacak URL terpisah. Ini hanya dapat menilai batas koneksi ini secara keseluruhan. Itu juga sepertinya bukan satu-satunya batasan untuk apa yang saya coba capai. Jika ada cara untuk mensetup iptablesdengan cara ini, itu mungkin memberikan beberapa masalah dengan aplikasi web saya karena permintaan ini diprakarsai oleh pengguna.
Saya menggunakan Flask, opsi yang mungkin menggunakan before_requesthook dan secara manual melacak tujuan-tujuan ini dengan penyimpanan data seperti Redis. Namun, ini cukup tinggi di stack untuk berurusan dengan koneksi dengan cara ini. Yang benar-benar saya butuhkan (atau pikir saya lakukan) adalah aplikasi firewall cerdas yang dapat membedah permintaan dengan cara kustom dan menutup koneksi ketika breakpoints tertentu telah tercapai.
Apakah ada cara untuk mencapai apa yang saya coba lakukan?
Jika ya, bagaimana caranya?