2009-06-22 10 views
17

Điều này có thể phù hợp hơn với Serverfault, nhưng nhiều nhà phát triển web chỉ đến đây có thể sẽ hưởng lợi từ các câu trả lời có thể cho câu hỏi này.Tự bảo vệ mình trước các cuộc tấn công Dos

Câu hỏi đặt ra là: Làm cách nào để bạn tự bảo vệ mình khỏi các cuộc tấn công từ chối dịch vụ đối với máy chủ web của mình một cách hiệu quả?

Tôi tự hỏi này sau khi đọc bài viết này article

Đối với những người không quen thuộc, đây là những gì tôi nhớ về nó: một cuộc tấn công DoS sẽ cố gắng để chiếm tất cả các kết nối của bạn bằng cách liên tục gửi các tiêu đề giả mạo đến các máy chủ của bạn.

Bằng cách đó, máy chủ của bạn sẽ đạt đến giới hạn kết nối đồng thời có thể và kết quả là người dùng thông thường không thể truy cập trang web của bạn nữa.

Wikipedia cung cấp một số thông tin thêm: http://en.wikipedia.org/wiki/Denial_of_service

Trả lời

43

Không có thuốc chữa bách bệnh, nhưng bạn có thể làm cho cuộc tấn công DoS khó khăn hơn bằng cách thực hiện một số điều sau đây:

  • Đừng (hoặc hạn chế sự sẵn sàng của bạn) thực hiện các hoạt động đắt tiền thay mặt cho khách hàng không được thẩm
  • Các nỗ lực xác thực Throttle
  • Các hoạt động của ga được thực hiện thay mặt cho từng khách hàng đã được xác thực và đặt tài khoản của họ trên một khóa tạm thời nếu họ thực hiện quá nhiều thứ trong thời gian quá ngắn
  • Có một ga toàn cầu tương tự cho tất cả unauthentica khách hàng ted, và được chuẩn bị để hạ thấp cài đặt này nếu bạn phát hiện một cuộc tấn công đang tiến hành
  • Có một lá cờ bạn có thể sử dụng trong cuộc tấn công để tắt tất cả truy cập chưa được xác thực
  • Không lưu trữ mọi thứ thay mặt cho khách hàng chưa được xác thực và sử dụng hạn ngạch để giới hạn dung lượng lưu trữ cho từng khách hàng được xác thực
  • Nói chung, từ chối tất cả các yêu cầu không đúng định dạng, không hợp lý hoặc không hợp lý càng nhanh càng tốt (và ghi lại để hỗ trợ phát hiện tấn công)
  • Không sử dụng một bộ nhớ cache LRU thuần túy nếu các yêu cầu từ các máy khách chưa được xác thực có thể dẫn đến việc loại bỏ những thứ khỏi bộ nhớ cache đó, bởi vì bạn sẽ phải chịu các cuộc tấn công vào bộ nhớ cache (nơi mà một khách hàng độc hại yêu cầu rất nhiều khác nhau không thường xuyên sử dụng điều này, khiến bạn đuổi tất cả những điều hữu ích từ bộ nhớ cache và cần phải làm việc nhiều hơn nữa để phục vụ khách hàng hợp pháp của mình)

Hãy nhớ rằng, điều quan trọng là hoàn toàn bác bỏ yêu cầu Throttled (ví dụ, với một HTTP 503: Service Unavailable phản hồi hoặc phản hồi tương tự phù hợp với bất kỳ giao thức nào bạn đang sử dụng) thay vì xếp hàng các yêu cầu được điều chỉnh. Nếu bạn xếp hàng chúng, hàng đợi sẽ chỉ ăn hết bộ nhớ của bạn và cuộc tấn công DoS sẽ có hiệu quả ít nhất vì nó sẽ không có sự điều chỉnh.

lời khuyên Một số cụ thể hơn cho các máy chủ HTTP:

  • Hãy chắc chắn rằng máy chủ web của bạn được cấu hình để từ chối POST tin nhắn mà không một Content-Length tiêu đề kèm theo, và để từ chối yêu cầu (và throttle khách hàng vi phạm) mà vượt quá tuyên bố Content-Length, và từ chối các yêu cầu với một Content-Length đó là bất hợp lý dài cho dịch vụ mà các POST (hoặc PUT) là nhằm mục đích
0

Câu trả lời ngắn:

Bạn không thể tự bảo vệ mình chống lại một DoS.

Và tôi không đồng ý nó thuộc về serverfault từ DoS được phân loại là một vấn đề an ninh và được chắn liên quan đến lập trình

+0

Chỉ vì nó là một vấn đề an ninh làm không có nghĩa là nó không thuộc về ServerFault. Lập trình chỉ giải quyết một phần nhỏ các vấn đề bảo mật như vậy. – ProfK

+0

Tất nhiên bạn có thể bảo vệ chống lại DoS, chỉ cần sử dụng tường lửa và tỷ lệ giới hạn các kết nối cho mỗi địa chỉ IP. Tuy nhiên, việc bảo vệ chống tấn công DDoS khó khăn hơn nhiều. –

1

Đối với tấn công cụ thể này (miễn là yêu cầu là GET) dựa một cân bằng tải hoặc một WAF mà chỉ căn cứ yêu cầu đầy đủ đến máy chủ web sẽ hoạt động.

Sự cố bắt đầu khi thay vì GET POST được sử dụng (điều này rất dễ) vì bạn không thể biết đây có phải là POST độc hại hay chỉ một số tải lên thực sự chậm từ người dùng.

Từ DoS cho mỗi lần bạn thực sự không thể bảo vệ ứng dụng web của mình do thực tế đơn giản. Tài nguyên của bạn bị giới hạn trong khi kẻ tấn công có khả năng có thời gian và tài nguyên không giới hạn để thực hiện DoS. Và hầu hết thời gian nó là rẻ cho kẻ tấn công để thực hiện các bước cần thiết. ví dụ. cuộc tấn công này đã đề cập ở trên một vài kết nối chạy chậm -> không có vấn đề gì

1

Máy chủ không đồng bộ, cho một, ít nhiều miễn dịch với dạng tấn công cụ thể này. Tôi ví dụ phục vụ các ứng dụng Django của tôi bằng cách sử dụng một proxy đảo ngược Nginx, và cuộc tấn công dường như không ảnh hưởng đến hoạt động của nó nào. Một máy chủ không đồng bộ phổ biến khác là lighttpd.

Hãy nhớ rằng, cuộc tấn công này rất nguy hiểm vì nó có thể được thực hiện ngay cả bằng một máy tính có kết nối chậm. Tuy nhiên, các cuộc tấn công DDoS phổ biến khiến máy chủ của bạn gặp phải một đội quân máy móc, và có rất ít việc bạn có thể làm để bảo vệ bản thân khỏi chúng.