Apache: Batasi Jumlah Permintaan / Lalu Lintas per IP?

12

Saya hanya ingin mengizinkan satu IP untuk menggunakan hingga, katakanlah 1GB, dari lalu lintas per hari, dan jika batas itu terlampaui, semua permintaan dari IP itu kemudian dibatalkan hingga hari berikutnya. Namun, solusi yang lebih sederhana di mana koneksi terputus setelah sejumlah permintaan akan cukup.

Apakah sudah ada semacam modul yang bisa melakukan ini? Atau mungkin saya bisa mencapai ini melalui sesuatu seperti iptables?

Terima kasih


sumber
Versi Apache?
pehrs
2.2 - Mengisi batas karakter--

Jawaban:

5

Jika Anda ingin solusi Apache murni bw_mod untuk Apache 2.0 dan mod_bandwidth untuk Apache 1.3. Mereka dapat membatasi bandwidth server Anda untuk membatasi penggunaan bandwidth.

Ada juga mod_limitipconn, yang mencegah satu pengguna membuat banyak koneksi ke server Anda. mod_cband adalah pilihan lain, tetapi saya belum pernah menggunakannya.

Jika Anda tidak ingin mengacaukan instalasi Apache Anda, Anda dapat meletakkan proxy squid di depan Apache. Ini memberi Anda lebih banyak kontrol juga atas pelambatan.

Namun, dalam kebanyakan kasus masalahnya adalah beberapa objek besar ketika Anda ingin membatasi bandwidth per IP, dan Anda ingin memberikan pesan kesalahan yang waras ketika pengguna menarik terlalu banyak data dan Anda memblokirnya. Dalam hal ini mungkin lebih mudah untuk menulis skrip PHP dan menyimpan informasi akses dalam tabel sementara dalam database.

pehrs
sumber
2
Terima kasih atas sarannya. Saya sudah melihat bw_mod dan mod_limitipconn, tetapi tidak (sejauh yang saya tahu) melakukan apa yang saya inginkan. mod_limitipconn hanya membatasi mereka untuk satu koneksi pada satu waktu, dan bw_mod hanya memungkinkan saya untuk membatasi laju unduhan per IP. Saya ingin memblokirnya setelah sejumlah transfer / permintaan data. Saya sebenarnya mencoba untuk mempertahankan diri terhadap pengguna tertentu yang merasa perlu merayapi seluruh situs saya dan mengunduh semuanya. Saya akan melihat ke dalam proxy squid, terdengar menarik. Jika itu tidak berhasil, saya pikir saya akan memodifikasi sumber bw_mod.
Sudahkah Anda mengatur robots.txt untuk melarang laba-laba?
pehrs
1
Masalah dengan robots.txt, adalah (seperti RFC 3514), hanya robot yang baik yang menghormatinya.
Scott Pack
Benar, tetapi Anda akan menemukan bahwa sebagian besar orang yang menelusuri situs Anda menggunakan alat standar. Dan banyak dari mereka, seperti wget, menghormati robots.txt. Robots.txt juga cara yang tepat untuk memberi tahu pengguna Anda bahwa Anda tidak ingin mereka laba-laba.
pehrs
1
Saya sudah mencobanya. Pada awalnya, robots.txt sudah cukup, kemudian mereka mengatakan kepada Wget untuk mengabaikan robots.txt, jadi saya terpaksa memblokir agen pengguna yang "tidak dikenal", tetapi kemudian mereka menipu agen pengguna tersebut. Mereka cenderung membuat banyak permintaan kepala, sedangkan browser yang sah tidak, jadi saya mungkin melihat membatasi permintaan kepala atau menonaktifkannya sama sekali (kurang diinginkan).
5

Ini adalah solusi iptables saya untuk masalah seperti ini. Sesuaikan --seconds --hitcountsesuai kebutuhan, juga tabel iptables.

iptables -A FORWARD -m state --state NEW -m recent --rcheck --seconds 600 --hitcount 5 --name ATACK --rsource -j REJECT --reject-with icmp-port-unreachable
iptables -A FORWARD -d 192.168.0.113/32 -o eth1 -p tcp -m tcp --dport 80 -m recent --set --name ATACK --rsource -j ACCEPT

Dijelaskan:

  1. iptablesperiksa apakah IP sumber terdaftar pada file / proc / net / ipt_recent / ATACK selama 5 kali atau lebih dalam interval 600 detik dan apakah itu permintaan BARU. Jika ya, lakukan penolakan; lain

  2. iptables periksa apakah permintaan ditujukan ke port 80. Jika demikian, cetak IP dan cap waktu ke / proc / net / ipt_recent / ATACK dan teruskan paket.

Ini berfungsi dengan baik untuk kebutuhan saya.

Gustavo Feijo
sumber
3

Sudahkah Anda melihat alat seperti fail2ban? Jika mungkin sedikit berat bagi Anda, tetapi itu akan membiarkan Anda membatasi jumlah permintaan yang diberikan IP. Ini bekerja dengan melihat log, dan Anda menetapkan aturan untuk berapa banyak pelanggaran per waktu diperbolehkan, jadi bagi Anda itu mungkin permintaan per hari. Setelah mereka pergi itu dapat melakukan hal-hal seperti memblokirnya menggunakan ipchains.

Saya telah menggunakannya untuk memblokir serangan DDoS terhadap server email dengan sangat sukses. Ini dapat mengkonsumsi sejumlah besar daya prosesor.

Peter Bagnall
sumber
saat ini; y akan mengimplementasikan ini sendiri. Semoga berhasil
Dark Star1
1

coba mod_dosevasiveataumod_security

mod_dosevasive dapat dikonfigurasikan untuk mencekal IP setelah nomor tertentu atau halaman meminta ke suatu situs dalam jangka waktu tertentu.

prophet.six
sumber