Bagaimana cara secara otomatis dan sementara memblokir alamat IP membuat terlalu banyak hit di Server dalam jangka waktu pendek?

21

Salah satu server LAMP saya baru-baru ini diturunkan oleh semacam bot skrip yang mencari eksploitasi. Dari kelihatannya, itu membuat begitu banyak permintaan per detik, yang membebani RAM di server dan membuat seluruh situs saya turun selama satu jam. Itu "serangan" semua berasal dari satu alamat IP.

Jadi bagaimana saya dapat secara otomatis dan sementara memblokir alamat IP yang membuat terlalu banyak hits di Server LAMP saya dalam waktu singkat? Apa alat terbaik untuk pekerjaan itu, dan haruskah saya menyelesaikan ini di tingkat Sistem Operasi atau melalui PHP?

ProgrammerGirl
sumber

Jawaban:

25

Fail2Ban . Solusi standar / standar emas untuk masalah ini pada platform Linux.

HopelessN00b
sumber
Menarik, terima kasih. Bagaimana ini menangani atau berdampak pada perayap web seperti Google?
ProgrammerGirl
1
@Programmer Tergantung pada bagaimana Anda mengonfigurasi hal itu, tetapi Anda tidak akan mengharapkan perayap web untuk memasukkan kata sandi yang buruk, mencari eksploit, atau memeras hits yang cukup untuk memicu ambang batas yang terdefinisi dengan baik - jadi cukup periksa log Anda untuk mencari tahu apa yang harus didefinisikan ambang Anda.
HopelessN00b
5

Anda harus menghindari mencoba melakukan ini dengan PHP. Pada saat PHP terlibat, sudah terlambat - memori telah dialokasikan.

Anda bisa mencekal alamat IP di setiap lapisan, tetapi level terendah yang menggunakan sumber daya paling sedikit adalah rute yang ingin Anda ambil. Ini biasanya firewall. Paling tidak, iptables (linux firewall) adalah apa yang ingin Anda gunakan. Ada alat yang disebutkan orang lain, seperti Fail2Ban, yang dapat mengotomatisasi ini untuk Anda. Firewall eksternal akan lebih baik.

Selain mencoba untuk melarang menyinggung alamat IP, Anda harus mencoba memanfaatkan sumber daya Anda dengan lebih baik. Jika permintaan membutuhkan lebih sedikit sumber daya, serangan akan menjadi lebih lama.

Apache juga menggunakan banyak memori. Jika Anda menggunakan mod_php, itu lebih buruk karena PHP dimuat di dalam setiap proses anak Apache. Ini berarti bahkan permintaan untuk konten statis (css / js / gambar) memuat PHP bahkan ketika PHP tidak digunakan. Anda dapat menyelesaikan masalah ini dengan menggunakan FastCGI. mod_fcgid adalah opsi yang bagus.

Ada juga server web lain yang lebih efisien sumber daya. Nginx adalah favorit saya. Ada juga Lighttpd. Banyak orang menyukai Litespeed (mampir pengganti Apache).

Jika Anda ingin tetap menggunakan Apache, pertimbangkan untuk menyetelnya sebaik mungkin. Pertimbangkan untuk menonaktifkan .htaccess. Inilah penjelasan yang bagus mengapa .

Luke
sumber
2

Untuk mengontrol atau memblokir lalu lintas http, Anda dapat menggunakan:

Namun, perlu diketahui bahwa alat ini juga dapat memblokir / memperlambat webspiders dan karenanya berdampak pada SEO.

Komunitas
sumber
2
iptables -I INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP

ossec dapat melakukan hal semacam ini secara otomatis dan transparan berdasarkan syslogs.

Ya ampun
sumber
1
Bisakah Anda jelaskan apa yang dilakukan kode baris pertama? Juga, bagaimana ossec dibandingkan dengan fail2ban? Terima kasih.
ProgrammerGirl
2
Ini aturan iptables. Saya percaya ini menghitung berapa banyak upaya koneksi baru yang dilakukan dan menjatuhkan mereka setelah mereka melebihi 4 upaya dalam 60 detik. Saya mendorong Anda untuk melihat man iptablesdan melihat apa arti setiap bendera, dan bagaimana mereka bekerja bersama.
Luke
-3

Tidaaaak,

--- banjir ---

iptables -N logdrop iptables -A logdrop -m --set terbaru --set blacklist

iptables -A logdrop -m limit --limit 1 / s --limit-burst 1 -j LOG --log-awalan "Flood:"

iptables -A logdrop -j DROP

iptables -N ddos ​​iptables -A ddos ​​-m terbaru --rcheck --nama blacklist --detik 300 --hitcount 1 -j logdrop iptables -A ddos ​​-m baru-baru ini --set --nama lagi iptables -A ddos ​​-m baru-baru ini --update --name lagi --seconds 60 --hitcount 2 -j iptables logdrop -A ddos ​​-j RETURN

Igors Gorda
sumber