Bagaimana saya bisa memblokir agen pengguna dari semua situs di server saya?


9

Saya awalnya ini diposting di webmasters.stackexchange.com , tetapi diberitahu saya akan mendapat sambutan yang lebih baik di sini.


Selama beberapa hari terakhir, saya telah menderita dari apa yang tampaknya menjadi serangan DDOS (mungkin tidak disengaja). Saya telah mendapatkan begitu banyak permintaan dari agen yang mengidentifikasi "Mozilla / 4.0 (kompatibel; ICS)" yang apache memakan semua memori yang tersedia.

Karenanya, saya ingin memblokir semua permintaan yang disertai oleh agen pengguna ini, jadi saya mencoba melakukan ini di httpd.conf:

SetEnvIfNoCase User-Agent "Mozilla/4.0 (compatible; ICS)" bad_user
Deny from env=bad_user

Tetapi ketika saya me-restart apache itu mengeluh tentang penggunaan di denysini. Tanpa harus membungkusnya dalam locationatau directoryblok, yang berarti saya harus menambahkan blok baru untuk setiap situs, apakah ada cara saya dapat menolak akses ke seluruh server?


UPDATE: Kesalahan yang saya dapatkan

  • Mulai ulang server web apache2
    Kesalahan sintaks pada baris 4 dari /etc/apache2/httpd.conf: deny tidak diizinkan di sini [gagal]

Jawaban:


7

Sepertinya pertanyaan lama sekarang, tetapi saya ingin melakukan hal yang sama dan menemukan jawaban dari keberanian di atas. Tidak sepenuhnya benar - menurut saya memang seharusnya demikian <Location "/">, dan SetEnvIfperlu ekspresi reguler sehingga tanda kurung harus dikutip.

Ini berhasil bagi saya untuk menerapkan kontrol akses di semua vhosts:

SetEnvIfNoCase User-Agent "^Mozilla/4.0 \(compatible; Synapse\)" bad_ua
<Location "/">
    Deny from env=bad_ua
</Location>

Cukup sertakan itu sebelum definisi vhost.


(Untuk yang setara di Apache 2.4) Hati-hati menggunakan <Location>karena mengesampingkan pembatasan otorisasi lainnya <Directory>, kecuali jika Anda menambahkan AuthMerging And. Lihat peringatan keamanan tentang Requiredi apache docs: httpd.apache.org/docs/2.4/mod/mod_authz_core.html#require
Cedric Knight

4

mod_rewrite dapat dikonfigurasi di tingkat server sesuai dengan dokumen:

RewriteCond %{HTTP_USER_AGENT} "Mozilla/4\.0 \(compatible; ICS\)" [nocase]
RewriteRule ^.*$ - [forbidden,last]

Jangan lupa untuk melarikan diri dari regex di RewriteCond


1
Perhatian: tanda hubung bukan tanda hubung saat disalin. Saya mencoba mengedit, tetapi SF akan mengeluh bahwa hasil edit saya terlalu kecil. Bagaimanapun, terima kasih, berhasil!
Thibaut Barrère

@ ThibautBarrère jika Anda benar-benar perlu, Anda dapat melewati batas edit kecil dengan menambahkan yang tidak terlihat <!-- -->ke suntingan
hanshenrik

1

Asalkan sintaks pada garis SetEnv benar, Anda harus dapat membuangnya di conf seperti:

<Location *>
SetEnvIfNoCase User-Agent "Mozilla/4.0 (compatible; ICS)" bad_user
Deny from env=bad_user
</Location>

Harus memungkinkan untuk beroperasi di semua host virtual - hanya diuji pada 2.2.24, bekerja seperti pesona


Ini lebih baik karena tidak ada kesalahan, tetapi sementara menipu agen pengguna saya, saya tidak ditolak. Adakah yang tahu mengapa itu terjadi?
Tom Wright
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.