Apache 2: SetEnv Ifiên IP Phạm vi


10

Trong cấu hình Apache của tôi, tôi muốn đặt biến môi trường nếu tôi thấy rằng khách truy cập đến từ một dải IP cụ thể. Hiện tại tôi làm theo cách này:

SetEnvIfNoCase Remote_Addr "^194\.8\.7[45]\." banned=spammer-ip
SetEnvIfNoCase Remote_Addr "^212\.156\.170\." banned=spammer-ip

Những gì tôi muốn là một cái gì đó như thế này:

SetEnvIfIpRange 194.8.74.0/23 banned=spammer-ip
SetEnvIfIpRange 212.156.170.0/24 banned=spammer-ip

... bởi vì tôi nghĩ rằng việc chuyển đổi một địa chỉ IP thành một chuỗi và sau đó thực hiện một biểu thức chính quy là một sự lãng phí hoàn toàn các nguồn tài nguyên.

Tôi có thể làm một

Deny From 194.8.74.0/23

... nhưng sau đó tôi không nhận được một biến mà tôi có thể kiểm tra trong trang lỗi 403 của mình - để tìm lý do tại sao quyền truy cập bị từ chối.

Bất kỳ đề nghị những gì tôi có thể bỏ lỡ? Có MOD MOD2 nào có thể đặt các biến môi trường dựa trên "Phạm vi địa chỉ IP" không?

Câu trả lời:


4

Những gì bạn đã có (SetEnv IfNoCase Remote_Addr "^ abc" env_key = env_value) là cách tốt nhất bạn sẽ dễ dàng thực hiện. Tôi đã thấy kiểu cấu hình này được triển khai trên một cụm máy được tải rất nhiều, mà không có sự suy giảm hiệu năng đáng chú ý nào. Tôi đồng ý sử dụng các biểu thức thông thường, khi phạm vi CIDR phù hợp hơn sẽ gây khó chịu. Bạn có thể viết một chương trình nhỏ để tự động tạo cấu hình từ danh sách các phạm vi CIDR.

Nếu bạn quen thuộc với Perl, bạn có thể tạo trình xử lý modperl, điều này sẽ cho phép / từ chối các yêu cầu theo bất kỳ cách nào bạn chọn. modperl cho phép mã của bạn chạy ở các điểm khác nhau trong suốt yêu cầu HTTP - giai đoạn chu kỳ yêu cầu HTTP mod_perl 2.0 . PerlAuthzHandler sẽ là trình xử lý thích hợp để sử dụng.

Lockie


8

lưu ý rằng các biến được đặt qua SetEnv không hiển thị trên một số thao tác (xem ma trận):

http://www.onlinesmartketer.com/2010/05/27/apache-envir-variables-visibility-with-setenv-setenvif-and-rewriterule-directives/

giải pháp của bạn là

SetEnvIfExpr "-R '10.0.0.0/8' || -R '172.16.0.0/12' || -R '192.168.0.0/16'" rfc1918

xem https://httpd.apache.org/docs/trunk/mod/mod_setenvif.html#setEnv IfExpr


Đây phải là câu trả lời được chấp nhận! Nó là tốt nhất. Nó cũng hoạt động trong .htaccess
Jeroen Vermeulen - Magehost


0

Đây thực sự không phải là một giải pháp để chuyển từ RegExp sang IP Ranges , nhưng tôi đã tìm thấy một tập lệnh đẹp được lưu trữ bởi Google để chuyển đổi một phạm vi IP thành một biểu thức chính quy phù hợp. Cũng có thể được sử dụng cho một số bạn, ...

Làm cách nào để loại trừ lưu lượng truy cập khỏi một loạt địa chỉ IP?

[Cập nhật]

Có vẻ như Google đã xóa Công cụ Địa chỉ IP (hoặc ít nhất là liên kết họ có trên trang web của họ bị hỏng), nhưng có một công cụ tương tự ở đây: http://www.analyticsmarket.com/freetools/ipregex

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.