Tôi chạy vài trăm máy chủ web phía sau bộ cân bằng tải, lưu trữ nhiều trang web khác nhau với rất nhiều ứng dụng (trong đó tôi không có quyền kiểm soát). Khoảng một tháng một lần, một trong những trang web bị tấn công và một kịch bản lũ lụt được tải lên để tấn công một số ngân hàng hoặc tổ chức chính trị. Trước đây, đây luôn là các trận lũ UDP được giải quyết hiệu quả bằng cách chặn lưu lượng UDP đi trên máy chủ web riêng lẻ. Hôm qua, họ đã bắt đầu làm ngập một ngân hàng lớn của Hoa Kỳ từ các máy chủ của chúng tôi bằng cách sử dụng nhiều kết nối TCP đến cổng 80. Vì các loại kết nối này hoàn toàn hợp lệ cho các ứng dụng của chúng tôi, chỉ cần chặn chúng là một giải pháp không thể chấp nhận được.
Tôi đang xem xét các lựa chọn thay thế sau đây. Bạn muốn giới thiệu cái nào? Bạn đã thực hiện những điều này, và làm thế nào?
- Giới hạn đối với các gói TCP (iptables) gửi đi các gói TCP có cổng nguồn! = 80
- Tương tự nhưng với hàng đợi (tc)
- Tỷ lệ giới hạn lưu lượng đi trên mỗi người dùng trên mỗi máy chủ. Khá là gánh nặng hành chính, vì có khả năng 1000 người dùng khác nhau trên mỗi máy chủ ứng dụng. Có lẽ điều này: làm thế nào tôi có thể giới hạn băng thông trên mỗi người dùng?
- Còn gì nữa không?
Đương nhiên, tôi cũng đang tìm cách để giảm thiểu khả năng tin tặc xâm nhập vào một trong các trang web được lưu trữ của chúng tôi, nhưng vì cơ chế đó sẽ không bao giờ chống nước 100%, tôi muốn hạn chế nghiêm trọng tác động của một vụ xâm nhập.
Cập nhật: Tôi hiện đang thử nghiệm các quy tắc này, điều đó sẽ ngăn chặn cuộc tấn công cụ thể này. Làm thế nào bạn sẽ đề xuất để làm cho họ chung chung hơn? Tôi có thiếu một cuộc tấn công TCP DoS đã biết khi tôi chỉ đánh giá giới hạn đối với các gói SYN không?
iptables -A OUTPUT -p tcp --syn -m limit --limit 100/min -j ACCEPT
iptables -A OUTPUT -p tcp --syn -m limit --limit 1000/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
iptables -A OUTPUT -p tcp --syn -j REJECT --reject-with tcp-reset
Chúc mừng!