Những kỹ thuật và / hoặc mô-đun nào có sẵn để thực hiện giới hạn tốc độ mạnh mẽ (yêu cầu | byte / ip / đơn vị thời gian) trong apache?
Câu trả lời:
Tốt nhất
và phần còn lại
mod_evasive
nhận được rất nhiều đề xuất trực tuyến nhưng vào giữa năm 2017, dường như nó đã bị tác giả của nó, Jonathan Zdziarski bỏ rơi, người đã xóa tất cả các tham chiếu đến nó khỏi blog của mình một cách kỳ lạ - mặc dù mã nguồn vẫn có sẵn dưới dạng tải lên . Không có dự án nào khác được cập nhật trong 6 năm qua (hoặc 15 năm trong trường hợp của mod_limitipconn
).
Như đã nêu trong bài đăng trên blog này , dường như có thể sử dụng mod_security để thực hiện giới hạn tốc độ trên giây.
Cấu hình như sau:
SecRuleEngine On
<LocationMatch "^/somepath">
SecAction initcol:ip=%{REMOTE_ADDR},pass,nolog
SecAction "phase:5,deprecatevar:ip.somepathcounter=1/1,pass,nolog"
SecRule IP:SOMEPATHCOUNTER "@gt 60" "phase:2,pause:300,deny,status:509,setenv:RATELIMITED,skip:1,nolog"
SecAction "phase:2,pass,setvar:ip.somepathcounter=+1,nolog"
Header always set Retry-After "10" env=RATELIMITED
</LocationMatch>
ErrorDocument 509 "Rate Limit Exceeded"
mod_security
không phải là một dự án Apache.
Có rất nhiều cách bao gồm tường lửa ứng dụng web nhưng cách dễ nhất để thực hiện nếu sử dụng mod Apache.
Một trong những mod mà tôi muốn giới thiệu là mod_qos . Đây là một mô-đun miễn phí rất hiệu quả để chống lại các cuộc tấn công kiểu certin DOS, Bruteforce và Slowloris. Điều này sẽ làm giảm tải máy chủ của bạn khá nhiều.
Nó rất mạnh mẽ .
Bản phát hành hiện tại của mô-đun mod_qos triển khai các cơ chế kiểm soát để quản lý:
Số lượng tối đa các yêu cầu đồng thời đến một vị trí / tài nguyên (URL) hoặc máy chủ ảo.
Giới hạn băng thông chẳng hạn như số lượng yêu cầu được phép tối đa mỗi giây đối với một URL hoặc tối đa / tối thiểu kbyte tải xuống mỗi giây.
Giới hạn số lượng sự kiện yêu cầu mỗi giây (điều kiện yêu cầu đặc biệt).
Dòng yêu cầu chung và bộ lọc tiêu đề để từ chối các hoạt động trái phép.
Yêu cầu giới hạn và lọc dữ liệu nội dung (yêu cầu mod_parp).
Giới hạn số lượng sự kiện yêu cầu cho các máy khách (IP) riêng lẻ.
Các hạn chế về cấp độ kết nối TCP, ví dụ: số lượng kết nối tối đa được phép từ một địa chỉ nguồn IP duy nhất hoặc điều khiển duy trì động.
Đây là cấu hình mẫu về những gì bạn có thể sử dụng nó. Có hàng trăm cấu hình có thể phù hợp với nhu cầu của bạn. Truy cập trang web để biết thêm thông tin về các điều khiển.
Sample configuration:
# minimum request rate (bytes/sec at request reading):
QS_SrvRequestRate 120
# limits the connections for this virtual host:
QS_SrvMaxConn 800
# allows keep-alive support till the server reaches 600 connections:
QS_SrvMaxConnClose 600
# allows max 50 connections from a single ip address:
QS_SrvMaxConnPerIP 50
# disables connection restrictions for certain clients:
QS_SrvMaxConnExcludeIP 172.18.3.32
QS_SrvMaxConnExcludeIP 192.168.10.
Trong Apache 2.4, có một mô-đun chứng khoán mới được gọi là mod_ratelimit . Để mô phỏng tốc độ modem, bạn có thể sử dụng mod_dialup . Mặc dù tôi không hiểu tại sao bạn không thể sử dụng mod_ratelimit cho mọi thứ.
SUSPENDED
trạng thái không đồng bộ , không lãng phí các luồng khi chờ đợi, trong khi mod_ratelimit, kể từ bây giờ, hoàn toàn là luồng cho mỗi kết nối. cf. thread.gmane.org/gmane.comp.apache.cvs/20490
Thêm một tùy chọn - mod_qos
Không đơn giản để cấu hình - nhưng mạnh mẽ.
Phụ thuộc vào lý do bạn muốn xếp hạng giới hạn.
Nếu nó để bảo vệ khỏi quá tải máy chủ, thì việc đặt NGINX trước nó và định cấu hình giới hạn tốc độ ở đó sẽ rất hợp lý. Nó có ý nghĩa vì NGINX sử dụng ít tài nguyên hơn nhiều, chẳng hạn như vài MB trên một vạn kết nối. Vì vậy, nếu máy chủ bị ngập, NGINX sẽ thực hiện giới hạn tốc độ (sử dụng một lượng tài nguyên không đáng kể) và chỉ chuyển lưu lượng được phép tới Apache.
Nếu tất cả những gì bạn muốn là sự đơn giản, thì hãy sử dụng một cái gì đó như mod_evasive.
Như thường lệ, nếu để bảo vệ chống lại các cuộc tấn công DDoS hoặc DoS, hãy sử dụng một dịch vụ như Cloudflare cũng có giới hạn tốc độ.