Ujian
Saya hanya akan memberitahu anda cara mengkonfigurasi modul permintaan terhad nginx dan cara ia melindungi tapak web anda daripada diserang oleh DDoS atau serangan Penafian perkhidmatan berasaskan http yang lain.
Dalam ujian ini, saya menyimpan halaman sampel dalam blitz.io (kini perkhidmatan percuma) dan menamakannya about.html untuk menguji arahan limit_req
Mula-mula, saya menyimpannya pada blitz Gunakan perintah berikut untuk memulakan 1075 permintaan serentak dan bertahan selama satu minit Masa respons ditetapkan kepada 2 minit, rantau ini adalah California, dan semua negeri lain kecuali status 200 ditetapkan kepada status tidak normal.
-p 1-1075:60 --status 200 -t 2000 -r california http://kbeezie.com/about.html
Tidak teruk, bukan? Tetapi jika ini adalah dokumen php Kemungkinan besar sesetengah pengguna akan menyebabkan status 502/504 proses php, menjadikan pelayan ranap atau menjadi tidak bertindak balas pelayan murah lain akan mempunyai kadar kegagalan yang lebih tinggi. (Iklan asal, disekat di sini)
Sudah tentu anda boleh menggunakan caching atau alat lain untuk meningkatkan prestasi dan responsif pelayan Contohnya, jika anda menggunakan wordpress, anda mesti menggunakan plugin caching wordpress da untuk jenis tersebut orang yang kita boleh gunakan modul permintaan had.
Dalam nginx kita mencipta rantau http { }, saya memanggilnya blitz untuk menetapkan 5 permintaan sesaat, dan jumlah maksimum data yang boleh ditampung ialah 10mb yang saya gunakan $binary_remote_addr sebagai pembolehubah sesi Benarkan diri anda mengakses lebih daripada 10mb ruang daripada pelawat biasa ke $remote_addr.
Salin kod Kod adalah seperti berikut:
limit_req_zone $binary_remote_addr zone=blitz: Kadar 10m=5r/s;
Ran Zhou mentakrifkan peraturan ini dalam pelayan:
Salin kod Kod adalah seperti berikut:
lokasi = /about.html {
limit_req zone=blitz nodelay;
}
Kemudian muat semula konfigurasi nginx dan lihat kesannya:
Anda akan mendapati bahawa hanya 285 orang boleh mengakses pelayan sekarang , bilangan permintaan sesaat ialah 4.75, yang tidak melebihi 5 kali sesaat yang kami tetapkan Periksa log dan anda akan mendapati bahawa permintaan yang tidak diakses adalah http 503, dan permintaan yang diakses semuanya adalah http 200.
Gunakan ini Tetapan ini membantu jika anda ingin menyekat akses ke rantau, ia juga boleh digunakan untuk semua permintaan php >
php Guna Had PermintaanJika anda ingin menyekat semua Untuk menggunakan had pada PHP, anda boleh melakukan ini:
Salin kod Kod adalah seperti berikut:
lokasi ~ .php {
limit_req zone=banjir; sertakan php_params.conf;
fastcgi_pass unix:/tmp/php5-fpm.sock;
}
Ia boleh membantu anda bermain dengan beberapa tetapan seperti pecutan atau nyahpecutan untuk menghadapi keperluan secara tiba-tiba atau tiada kelewatan, Klik di sini: httplimitreqmodule.
Anda mungkin perasan bahawa carta di atas ialah. diuji dengan 1075 permintaan pengguna, yang mengelirukan kerana semua permintaan akses datang daripada IP yang sama di California (50.18.0.223).
Jika anda mempunyai memori dan lebar jalur yang mencukupi, ia sangat mudah untuk diuji dengan alamat IP tunggal. Dengan alat ini, anda boleh mencapai: concurrency tinggi, ab, beban terbuka, dll. Ia hanya dalam antara muka terminal, tanpa UI .
Sudah tentu anda perlu mengujinya sendiri, ingat gunakan bendera status, kerana blitz akan membalas permintaan akses selepas kira-kira 5 saat.
Pelan penggantian yang lebih baikSaya tidak akan menjelaskan terlalu banyak butiran di sini, tetapi jika anda serius untuk menghentikan serangan DDoS atau pelbagai perkhidmatan daripada menyerang pelayan anda, terdapat alat perisian hebat lain seperti iptables (linux), pf (penapis paket untuk bsd), atau jika pelayan anda menyediakan perkakasan, anda boleh menggunakan perkakasan anda firewall. Modul sekatan di atas hanya akan menghalang serangan banjir melalui permintaan http Ia tidak akan menghalang serangan banjir paket ping atau kelemahan lain Untuk situasi ini Anda boleh menutup perkhidmatan yang tidak perlu dan port yang tidak diperlukan untuk menghalang orang lain daripada menembusi.
Sebagai contoh, satu-satunya port pelayan saya terdedah kepada rangkaian luaran ialah http/https dan ssh Perkhidmatan seperti mysql terikat untuk Tentukan sambungan setempat Anda juga boleh menetapkan beberapa perkhidmatan biasa kepada port yang tidak biasa digunakan tidak boleh dihidu (iptables/pf akan membantu dalam situasi ini).Atas ialah kandungan terperinci Bagaimana untuk mengkonfigurasi pelayan Nginx untuk mengelakkan serangan Banjir. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!