


Penghadan kadar ialah salah satu teknik paling berkesan untuk mengurangkan serangan DDoS. Di antara variasinya, penghadan kadar setiap IP menonjol untuk pendekatan yang disasarkannya: ia menguatkuasakan had permintaan secara individu untuk setiap pelanggan, berdasarkan alamat IP mereka. Ini menghalang mana-mana pengguna tunggal daripada mengatasi pelayan sambil mengekalkan tahap akses yang adil untuk pengguna yang sah.
Dalam artikel ini, kami akan membincangkan cara pengehadan kadar per IP berfungsi, sebab ia merupakan salah satu strategi terbaik untuk menghentikan serangan DDoS dan cara melaksanakannya dalam Go menggunakan pakej kadar.
Mengapa Mengehadkan Kadar
Penghadan kadar digunakan secara meluas kerana ia mengimbangi keselamatan dan kebolehgunaan. Inilah sebabnya pendekatan pilihan:
- Pengurusan Sumber yang Cekap: Dengan mengehadkan bilangan permintaan daripada setiap pelanggan, pelayan boleh mengelak daripada terharu, walaupun semasa serangan.
- Keadilan: Pengguna yang sah boleh terus mengakses pelayan sementara pelanggan yang berniat jahat dihalang.
- Boleh disesuaikan: Had kadar boleh dilaraskan berdasarkan kes penggunaan, seperti had berbeza untuk API awam berbanding perkhidmatan persendirian.
- Skalabiliti: Mekanisme pengehad kadar berskala baik dengan infrastruktur moden, terutamanya apabila digabungkan dengan pengimbang beban atau proksi terbalik.
Bagaimana ia Berbanding dengan Teknik Lain
- Peraturan Firewall: Sekat trafik di peringkat rangkaian berdasarkan peraturan yang telah ditetapkan. Walaupun berkesan untuk penapisan berskala besar, ia kurang fleksibel dan boleh menyekat pengguna yang sah semasa positif palsu.
- Rangkaian Penyampaian Kandungan (CDN): Edarkan trafik merentas berbilang pelayan. Walaupun bagus untuk mengurangkan kesan DDoS, CDN tidak menangani trafik kesat di peringkat aplikasi.
- Bukti Kerja (PoW): Memerlukan pelanggan untuk menyelesaikan teka-teki pengiraan sebelum mengakses pelayan. Berkesan tetapi menambah kependaman untuk pengguna yang sah dan boleh menjadi intensif sumber untuk pelanggan.
- Penghadan Kadar: Menawarkan kawalan halus, skala yang baik dan tidak menambah overhed yang ketara. Ia selalunya merupakan pilihan terbaik untuk melindungi titik akhir peringkat aplikasi.
Pelaksanaan
Dalam pengehadan kadar per-IP, pengehad berasingan dikekalkan untuk setiap IP pelanggan. Begini cara untuk melaksanakannya menggunakan pakej golang.org/x/time/rate.
Langkah 1: Pasang Pakej Yang Diperlukan
Pakej kadar adalah sebahagian daripada modul lanjutan Go. Pasang dengan:
bash
pergi dapatkan golang.org/x/time/rate
Langkah 2: Kodkan Pengehad Kadar Per-IP
pergi
pakej utama
import (
`"fmt"` `"net/http"` `"sync"` `"time"` `"golang.org/x/time/rate"`
)
var (
`mu sync.Mutex` `visitors = make(map[string]*rate.Limiter)`
)
// getVisitor mendapatkan semula pengehad kadar untuk IP tertentu, mencipta satu jika ia tidak wujud.
func getVisitor(ip string) *rate.Limiter {
`mu.Lock()` `defer mu.Unlock()` `limiter, exists := visitors[ip]` `if !exists {` `limiter = rate.NewLimiter(1, 5) // 1 request/second, burst of 5` `visitors[ip] = limiter` `// Clean up limiter after 1 minute of inactivity` `go func() {` `time.Sleep(1 * time.Minute)` `mu.Lock()` `delete(visitors, ip)` `mu.Unlock()` `}()` `}` `return limiter`
}
// rateLimitedHandler menggunakan had kadar per-IP
func rateLimitedHandler(w http.ResponseWriter, r *http.Request) {
`ip := r.RemoteAddr` `limiter := getVisitor(ip)` `if !limiter.Allow() {` `http.Error(w, "Too many requests. Please try again later.", http.StatusTooManyRequests)` `return` `}` `fmt.Fprintln(w, "Request successful.")`
}
func main() {
`http.HandleFunc("/", rateLimitedHandler)` `fmt.Println("Starting server on :8080")` `http.ListenAndServe(":8080", nil)`
}
Penjelasan
- Peta Pelawat: Mengekalkan kadar.Penghad untuk setiap alamat IP. Peta pelawat memegang pengehad ini, dikunci oleh alamat IP (r.RemoteAddr). Apabila permintaan masuk, fungsi getVisitor menyemak sama ada pengehad sudah wujud untuk IP.
- Penciptaan Penghad: Setiap pengehad membenarkan 1 permintaan sesaat dengan letusan 5. Pengehad baharu dibuat dengan peraturan khusus (1 permintaan sesaat dengan kapasiti pecah 5) jika tidak wujud. Pengehad membenarkan beberapa letusan awal permintaan tetapi menguatkuasakan kadar yang stabil selepas itu.
- Pembersihan Automatik: Goroutine membersihkan pengehad terbiar selepas 1 minit untuk menjimatkan memori. Untuk mengelakkan pertumbuhan memori, kod tersebut termasuk mekanisme pembersihan. Goroutine dimulakan apabila pengehad baharu dibuat, dan ia menunggu selama 1 minit tidak aktif sebelum mengalih keluar masukan yang sepadan daripada peta pelawat. Ini memastikan bahawa pengehad hanya disimpan untuk pelanggan aktif.
- Logik Mengehadkan Kadar: Pengendali menyemak sama ada pengehad membenarkan permintaan. Jika permintaan melebihi had yang ditetapkan, ia bertindak balas dengan ralat 429 Too Many Requests; jika tidak, ia memproses permintaan itu.
Penghadan kadar per-IP dalam Go ialah cara terbaik untuk mengurangkan serangan DDoS pada peringkat aplikasi. Ia menyediakan kawalan yang tepat ke atas trafik, memastikan pengguna yang sah boleh mengakses perkhidmatan anda manakala pengguna berniat jahat dikawal dengan berkesan.
Pendekatan ini dengan cekap menyekat IP yang menyalahgunakan tanpa memberi kesan kepada pengguna yang sah, menawarkan penyelesaian berskala dan cekap memori untuk mengurangkan serangan DDoS.
Atas ialah kandungan terperinci Cara Menghentikan Serangan DDoS dalam Go dengan Mengehadkan Kadar. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

WhentestingGocodewithinitfunctions,useexplicitsetupfunctionsorseparatetestfilestoavoiddependencyoninitfunctionsideeffects.1)Useexplicitsetupfunctionstocontrolglobalvariableinitialization.2)Createseparatetestfilestobypassinitfunctionsandsetupthetesten

Go'SerrorHandlingReturnSerrorsArvalues, tidak seperti yang tidak seperti ini) go'SmethodensurexplIciterRorHandling, promMORPORUSustCodeBUtinceangeRningSniSik

AneffectiveInterfaceingoisminimal, clear, andpromotesloosecoupling.1) minimizetheinterforflexabilityandeaseofimplementation.2) userInterfacesforabstractionToSwapImplementationswithoutchangingcallingcode.3) Rekabentuk DesignForTabilitybyPrementeMaceStomockDePdePode.3) Rekabentuk

Pengendalian ralat berpusat boleh meningkatkan kebolehbacaan dan mengekalkan kod dalam bahasa Go. Kaedah dan kelebihan pelaksanaannya termasuk: 1. 2. Memastikan konsistensi pengendalian kesilapan dengan pengendalian berpusat. 3. Gunakan menangguhkan dan pulih untuk menangkap dan memproses panik untuk meningkatkan ketahanan program.

Ingo, alternativestoinitfunctionsincludecustominitialializationFunctionsandsingletons.1) custominitializationFunctionsAllowExplicitControloverwhenitializationoccurs, Constfordelayedorconditionalsetups.2) singletonsensenoneone-timeinitialializationcurncurncurmentasi

Gohandlesinterfacesandtypeassertionsefectively, enhancingcodeflexabilityandrobustness.1) snossersertionsallowruntimetypechecking, asseenwiththeshaphapeinterfaceandcircletype.2) typeWitchhandLemultipypeseficeMemently, gunaurvariousshapePhipeMemently, gunaurvariousshapePhipeMemently, gunaurvariousshapePhipeMemently, bermanfaat untuk

GO pengendalian kesilapan bahasa menjadi lebih fleksibel dan boleh dibaca melalui kesilapan dan kesilapan.as fungsi. 1.errors.is digunakan untuk memeriksa sama ada ralat adalah sama dengan ralat yang ditentukan dan sesuai untuk pemprosesan rantaian ralat. 2.Errors.as bukan sahaja boleh menyemak jenis ralat, tetapi juga menukar ralat kepada jenis tertentu, yang mudah untuk mengekstrak maklumat ralat. Menggunakan fungsi ini dapat memudahkan logik pengendalian ralat, tetapi perhatikan penyampaian rantaian ralat yang betul dan mengelakkan kebergantungan yang berlebihan untuk mencegah kerumitan kod.

Tomakeoapplicationsrunfasterandmoreeficiently, useprofilingtools, leverageconcurrency, andmanagememoryeffectively.1) usepprofforcpuandmemoryprofiloidentificybottlenecks.2)


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular

MinGW - GNU Minimalis untuk Windows
Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Pelayar Peperiksaan Selamat
Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.
