Làm cách nào tôi có thể chặn tác nhân người dùng từ tất cả các trang web trên máy chủ của mình?


9

Ban đầu tôi đã đăng bài này tại webmasters.stackexchange.com , nhưng được cho biết tôi sẽ nhận được sự tiếp nhận tốt hơn ở đây.


Trong vài ngày qua, tôi đã phải chịu đựng một cuộc tấn công DDOS (có lẽ là vô tình). Tôi đã nhận được rất nhiều yêu cầu từ một đại lý được xác định là "Mozilla / 4.0 (tương thích; ICS)" mà apache ăn hết tất cả bộ nhớ khả dụng.

Do đó, tôi muốn chặn tất cả các yêu cầu kèm theo tác nhân người dùng này, vì vậy tôi đã thử thực hiện điều này trong httpd.conf:

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

Nhưng khi tôi khởi động lại apache, nó phàn nàn về việc sử dụng denyở đây. Không cần phải bọc nó trong một locationhoặc một directorykhối, điều đó có nghĩa là tôi phải thêm một khối mới cho mỗi trang web, có cách nào để tôi có thể từ chối quyền truy cập vào toàn bộ máy chủ không?


CẬP NHẬT: Lỗi tôi nhận được

  • Khởi động lại máy chủ web apache2
    Lỗi cú pháp trên dòng 4 của /etc/apache2/httpd.conf: từ chối không được phép ở đây [fail]

Câu trả lời:


7

Trông giống như một câu hỏi cũ bây giờ, nhưng tôi muốn làm như vậy và tìm thấy câu trả lời từ dây thần kinh ở trên. Điều đó không hoàn toàn đúng - đối với tôi nó là như vậy <Location "/">, và nó SetEnvIfcần một biểu thức chính quy để dấu ngoặc đơn cần được trích dẫn.

Điều này làm việc cho tôi để áp dụng kiểm soát truy cập trên tất cả các vhost:

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

Chỉ cần bao gồm điều đó trước khi định nghĩa vhost.


(Đối với tương đương trong Apache 2.4) Hãy cẩn thận <Location>khi sử dụng vì nó ghi đè mọi hạn chế ủy quyền khác <Directory>, trừ khi bạn thêm AuthMerging And. Xem cảnh báo bảo mật về Requiretài liệu apache: httpd.apache.org/docs/2.4/mod/mod_authz_core.html#require
Cedric Knight

4

mod_rewrite có thể được cấu hình ở cấp máy chủ theo các tài liệu:

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

Đừng quên thoát khỏi regex trong RewriteCond


1
Chú ý: dấu gạch ngang không phải là dấu gạch ngang thực sự khi sao chép. Tôi đã thử chỉnh sửa, nhưng SF sẽ phàn nàn rằng chỉnh sửa của tôi quá nhỏ. Dù sao cũng cảm ơn, làm việc một điều trị!
Thibaut Barrère

@ ThibautBarrère nếu bạn thực sự cần, bạn có thể bỏ qua giới hạn chỉnh sửa nhỏ bằng cách thêm vô hình <!-- -->vào chỉnh sửa
hanshenrik

1

Với điều kiện cú pháp trên các dòng SetEnv là chính xác, bạn sẽ có thể ném nó trong conf như vậy:

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

Nên cho phép điều đó hoạt động trên tất cả các máy chủ ảo - vừa được thử nghiệm vào ngày 2.2.24, hoạt động như một cơ duyên.


Điều này tốt hơn ở chỗ không có bất kỳ lỗi nào, nhưng trong khi giả mạo tác nhân người dùng của tôi, tôi không bị từ chối. Bất cứ ý tưởng tại sao đó có thể là?
Tom Wright
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.