Cho dù bạn đang chạy một người truy cập DNS mở hoặc máy chủ DNS có thẩm quyền, vấn đề là như nhau và hầu hết các giải pháp có thể cũng giống nhau.
Giải pháp tốt nhất
Cookie DNS là một tiêu chuẩn được đề xuất cung cấp cho các máy chủ DNS một cách để yêu cầu khách hàng gửi cookie để chứng minh rằng địa chỉ IP của máy khách không bị giả mạo. Điều này sẽ tốn thêm một vòng cho lần tra cứu đầu tiên, đây là chi phí thấp nhất mà bất kỳ giải pháp nào có thể cung cấp.
Dự phòng cho khách hàng lớn tuổi
Vì cookie DNS chưa được chuẩn hóa nên tất nhiên sẽ cần thiết để hỗ trợ các khách hàng cũ bây giờ và trong nhiều năm tới.
Bạn có thể xếp hạng yêu cầu giới hạn từ khách hàng mà không cần hỗ trợ cookie DNS. Nhưng giới hạn tốc độ giúp kẻ tấn công DoS máy chủ DNS của bạn dễ dàng hơn. Xin lưu ý rằng một số máy chủ DNS có tính năng giới hạn tốc độ chỉ được thiết kế cho các máy chủ DNS có thẩm quyền. Vì bạn đang hỏi về một trình giải quyết đệ quy, nên việc triển khai giới hạn tỷ lệ như vậy có thể không áp dụng cho bạn. Giới hạn tốc độ theo thiết kế sẽ trở thành nút cổ chai cho máy chủ của bạn và do đó, kẻ tấn công sẽ cần gửi cho bạn ít lưu lượng truy cập hơn để khiến các yêu cầu hợp pháp bị hủy bỏ nếu không có giới hạn tốc độ.
Một lợi thế của giới hạn tốc độ là trong trường hợp kẻ tấn công làm ngập máy chủ DNS của bạn với các yêu cầu DNS, bạn có nhiều khả năng còn dư sẽ cho phép bạn ssh đến máy chủ và điều tra tình huống. Ngoài ra, giới hạn tốc độ có thể được thiết kế để chủ yếu loại bỏ các yêu cầu từ các IP của khách hàng gửi nhiều yêu cầu, có thể đủ để bảo vệ bạn khỏi DoS khỏi những kẻ tấn công không có quyền truy cập vào IP của khách hàng giả mạo.
Vì những lý do đó, giới hạn tốc độ một chút dưới khả năng thực tế của bạn có thể là một ý tưởng tốt, ngay cả khi nó không thực sự bảo vệ chống lại sự khuếch đại.
Sử dụng TCP
Có thể buộc khách hàng sử dụng TCP bằng cách gửi mã lỗi cho biết câu trả lời quá lớn đối với UDP. Điều này có một vài nhược điểm. Nó có giá hai vòng tròn bổ sung. Và một số khách hàng bị lỗi không hỗ trợ nó.
Chi phí của hai vòng tròn bổ sung có thể được giới hạn chỉ cho yêu cầu đầu tiên sử dụng phương pháp này:
Khi IP máy khách chưa được xác nhận, máy chủ DNS có thể gửi phản hồi cắt ngắn để buộc máy khách chuyển sang TCP. Phản hồi cắt ngắn có thể ngắn như yêu cầu (hoặc ngắn hơn nếu máy khách sử dụng EDNS0 và phản hồi không) giúp loại bỏ khuếch đại.
Bất kỳ IP khách nào hoàn thành bắt tay TCP và gửi yêu cầu DNS trên kết nối đều có thể tạm thời được đưa vào danh sách trắng. Sau khi đưa vào danh sách trắng, IP sẽ gửi các truy vấn UDP và nhận phản hồi UDP lên tới 512 byte (4096 byte nếu sử dụng EDNS0). Nếu phản hồi UDP kích hoạt thông báo lỗi ICMP, IP sẽ bị xóa khỏi danh sách trắng một lần nữa.
Phương thức cũng có thể được đảo ngược bằng cách sử dụng danh sách đen, điều đó chỉ có nghĩa là IP của máy khách được phép truy vấn trên UDP theo mặc định nhưng bất kỳ thông báo lỗi ICMP nào cũng khiến IP bị liệt vào danh sách đen cần truy vấn TCP để thoát khỏi danh sách đen.
Một bitmap bao gồm tất cả các địa chỉ IPv4 có liên quan có thể được lưu trữ trong bộ nhớ 444 MB. Địa chỉ IPv6 sẽ phải được lưu trữ theo một cách khác.
Tôi không biết có máy chủ DNS nào đã thực hiện phương pháp này không.
Nó cũng đã được báo cáo rằng một số ngăn xếp TCP có thể được khai thác trong các cuộc tấn công khuếch đại. Tuy nhiên, điều đó áp dụng cho bất kỳ dịch vụ dựa trên TCP nào và không chỉ DNS. Các lỗ hổng như vậy nên được giảm thiểu bằng cách nâng cấp lên phiên bản kernel, nơi ngăn xếp TCP đã được sửa để không gửi nhiều hơn một gói để đáp ứng với gói SYN.