Tôi đã gặp một tình huống trong đó khách hàng cần đưa vào danh sách đen một bộ chỉ dưới 1 triệu địa chỉ IP riêng lẻ (không có mạng con) và hiệu suất mạng là một vấn đề đáng lo ngại. Mặc dù tôi sẽ phỏng đoán rằng các quy tắc IPTables sẽ có tác động hiệu suất ít hơn các tuyến đường, đó chỉ là phỏng đoán.
Có ai có bất kỳ bằng chứng chắc chắn hoặc biện minh nào khác cho việc ưu tiên IPTables hoặc định tuyến null làm giải pháp cho danh sách đen các danh sách dài các địa chỉ IP không? Trong trường hợp này, mọi thứ đều được tự động hóa, vì vậy việc sử dụng dễ dàng không thực sự là vấn đề đáng lo ngại.
EDIT 26-ngày 11 tháng 11
Sau một số thử nghiệm và phát triển, có vẻ như không có tùy chọn nào trong số này là khả thi. Dường như cả tra cứu tuyến đường và iptables đều thực hiện tìm kiếm tuyến tính thông qua bộ quy tắc và đơn giản là mất quá nhiều thời gian để xử lý nhiều quy tắc này. Trên phần cứng hiện đại, việc đưa các mục 1M vào danh sách đen iptables làm chậm máy chủ xuống còn khoảng 2 tá gói mỗi giây. Vì vậy, IPTables và các tuyến null được đưa ra.
ipset
, như được đề xuất bởi Jimmy Hedman, sẽ rất tuyệt, ngoại trừ việc nó không cho phép bạn theo dõi hơn 65536 địa chỉ trong một bộ, vì vậy tôi thậm chí không thể thử sử dụng nó trừ khi có ai đó có ý tưởng.
Rõ ràng giải pháp duy nhất để chặn nhiều IP này là thực hiện tra cứu được lập chỉ mục trong lớp ứng dụng. Có phải vậy không?
Thêm thông tin:
Trường hợp sử dụng trong trường hợp này đang chặn danh sách "những kẻ phạm tội đã biết" các địa chỉ IP truy cập nội dung tĩnh trên máy chủ web. FWIW, thực hiện chặn thông qua Apache Deny from
cũng chậm không kém (nếu không phải như vậy) vì nó cũng thực hiện quét tuyến tính.
FYI: Giải pháp làm việc cuối cùng là sử dụng mod_rewrite của apache kết hợp với bản đồ DB ber để thực hiện tra cứu chống lại danh sách đen. Bản chất được lập chỉ mục của DB DB DB cho phép danh sách mở rộng theo hiệu suất O (log N).