DDoS (Tấn công từ chối dịch vụ phân tán) thường bị chặn ở cấp máy chủ phải không?
Có cách nào để chặn nó ở cấp độ PHP, hoặc ít nhất là giảm nó xuống không?
Nếu không, cách nhanh nhất và phổ biến nhất để ngăn chặn các cuộc tấn công DDoS là gì?
DDoS (Tấn công từ chối dịch vụ phân tán) thường bị chặn ở cấp máy chủ phải không?
Có cách nào để chặn nó ở cấp độ PHP, hoặc ít nhất là giảm nó xuống không?
Nếu không, cách nhanh nhất và phổ biến nhất để ngăn chặn các cuộc tấn công DDoS là gì?
Câu trả lời:
DDOS là một nhóm tấn công áp đảo các hệ thống quan trọng trong trung tâm dữ liệu bao gồm:
Trước khi bạn bắt đầu xây dựng khả năng phòng thủ DDOS, hãy xem xét giá trị rủi ro trong trường hợp xấu nhất là gì. Đối với một dịch vụ không quan trọng, miễn phí sử dụng cho một cộng đồng nhỏ, tổng giá trị rủi ro có thể là hạt lạc. Đối với một hệ thống được trả tiền, đối mặt với công chúng, có nhiệm vụ quan trọng đối với một doanh nghiệp trị giá hàng tỷ đô la đã thành lập, giá trị có thể là giá trị của công ty. Trong trường hợp thứ hai này, bạn không nên sử dụng StackExchange :) Dù sao, để bảo vệ khỏi DDOS, bạn cần có một phương pháp phòng thủ chuyên sâu:
Luôn cập nhật tất cả các hệ thống và gói phần mềm của bạn với các bản vá bảo mật mới nhất - và ý tôi là tất cả chúng:
Đảm bảo rằng bạn đã thiết lập tường lửa hoặc thiết bị bảo mật tốt và được chuyên gia bảo mật đủ điều kiện xem xét thường xuyên . Các quy tắc mạnh mẽ trên tường lửa là một biện pháp phòng thủ tốt trước nhiều cuộc tấn công đơn giản. Nó cũng hữu ích để có thể quản lý băng thông có sẵn cho mỗi dịch vụ đang mở.
Có sẵn các công cụ giám sát mạng tốt - điều này có thể giúp bạn hiểu:
Cuộc tấn công có thể chỉ đơn giản là sử dụng nhiều các dịch vụ trang web hợp pháp (ví dụ: đánh vào các URI 'hợp pháp' đang chạy truy vấn hoặc chèn / cập nhật / xóa dữ liệu) - hàng nghìn hoặc hàng triệu yêu cầu đến từ hàng chục đến hàng triệu địa chỉ IP khác nhau sẽ đưa một trang web đến đầu gối. Ngoài ra, một số dịch vụ có thể chạy đắt đến mức chỉ một vài yêu cầu gây ra DOS - hãy nghĩ rằng một báo cáo thực sự đắt tiền. Vì vậy, bạn cần giám sát cấp ứng dụng tốt về những gì đang diễn ra:
Các ràng buộc và giới hạn hợp lý trong ứng dụng của bạn . Ví dụ, bạn có thể:
Cuối cùng, nhưng không kém phần quan trọng, hãy viết tài liệu Kế hoạch ứng phó DOS và yêu cầu tất cả các bên liên quan xem xét nội bộ: Kinh doanh, Ban quản lý, nhóm phát triển SW, nhóm CNTT và chuyên gia bảo mật. Quá trình viết tài liệu sẽ khiến bạn và nhóm của bạn phải suy nghĩ thấu đáo các vấn đề và giúp bạn chuẩn bị tinh thần nếu điều tồi tệ nhất xảy ra vào lúc 3 giờ sáng trong ngày nghỉ của bạn. Tài liệu nên bao gồm (trong số những thứ khác):
Vì vậy, phần mở đầu sang một bên, đây là một số câu trả lời cụ thể:
DDOS thường bị chặn ở cấp độ máy chủ, phải không?
Không hẳn - hầu hết các cuộc tấn công DDOS tồi tệ nhất đều ở cấp độ thấp (ở cấp độ gói IP) và được xử lý bởi các quy tắc định tuyến, tường lửa và thiết bị bảo mật được phát triển để xử lý các cuộc tấn công DDOS.
Có cách nào để chặn nó ở cấp độ PHP, hoặc ít nhất là giảm nó xuống không?
Một số cuộc tấn công DDOS nhằm vào chính ứng dụng, gửi các URI và yêu cầu HTTP hợp lệ. Khi tỷ lệ yêu cầu tăng lên, (các) máy chủ của bạn bắt đầu gặp khó khăn và bạn sẽ bị gián đoạn SLA. Trong trường hợp này, có những điều bạn có thể làm ở cấp độ PHP:
Giám sát mức ứng dụng: Đảm bảo mỗi dịch vụ / trang ghi lại các yêu cầu theo cách mà bạn có thể thấy những gì đang diễn ra (để bạn có thể thực hiện các hành động để giảm thiểu cuộc tấn công). Một vài ý tưởng:
Có định dạng nhật ký mà bạn có thể dễ dàng tải vào công cụ nhật ký (hoặc Excel hoặc tương tự) và phân tích cú pháp bằng các công cụ dòng lệnh (grep, sed, awk). Hãy nhớ rằng một DDOS sẽ tạo ra hàng triệu dòng nhật ký. Bạn có thể sẽ cần phân chia nhật ký của mình (đặc biệt đối với URI, thời gian, IP và người dùng) để tìm ra những gì đang xảy ra và cần tạo dữ liệu như:
Ghi lại địa chỉ IP của từng yêu cầu. ĐỪNG đảo ngược DNS này - trớ trêu thay, chi phí của việc này lại khiến cho những kẻ tấn công dễ dàng tấn công DDOS
Giới hạn tốc độ hợp lý: Bạn có thể thực hiện các giới hạn về số lượng yêu cầu mà một IP hoặc Người dùng nhất định có thể thực hiện trong một khoảng thời gian nhất định. Một khách hàng hợp pháp có thể đưa ra hơn 10 yêu cầu mỗi giây không? Người dùng ẩn danh có thể truy cập các báo cáo đắt tiền không?
CAPTCHA để truy cập ẩn danh: Triển khai CAPTCHA cho tất cả các yêu cầu ẩn danh để xác minh rằng người dùng là một người, không phải bot DDOS.
Cách nhanh nhất và phổ biến nhất để ngăn chặn các cuộc tấn công DDOS là gì?
Nhanh nhất có lẽ là nhượng bộ sự tống tiền, mặc dù điều này có thể không được mong muốn.
Nếu không, điều đầu tiên bạn phải làm là liên hệ với nhà cung cấp dịch vụ lưu trữ và / hoặc CDN của bạn và làm việc với họ (nếu họ chưa liên hệ với bạn đã hỏi xem chuyện quái gì đang xảy ra ...). Khi xảy ra DDOS, nó có khả năng ảnh hưởng nặng nề đến các khách hàng khác của nhà cung cấp dịch vụ lưu trữ và nhà cung cấp có thể phải chịu áp lực đáng kể để đóng cửa trang web của bạn chỉ để bảo vệ tài nguyên của họ. Hãy chuẩn bị để chia sẻ nhật ký của bạn (bất kỳ và tất cả thông tin) với nhà cung cấp; các nhật ký này, kết hợp với trình giám sát mạng của chúng, có thể cùng nhau cung cấp đủ thông tin để chặn / giảm thiểu cuộc tấn công.
Nếu bạn đang mong đợi một DDOS, tốt hơn hết là bạn nên xác nhận nhà cung cấp dịch vụ lưu trữ của mình ở mức độ bảo vệ mà họ có thể cung cấp. Họ phải có kinh nghiệm và công cụ DDOS để giảm thiểu nó - hiểu các công cụ, quy trình và thủ tục báo cáo của họ. Cũng hỏi về những hỗ trợ mà nhà cung cấp dịch vụ lưu trữ có từ các nhà cung cấp thượng nguồn của họ . Những dịch vụ này có thể có nghĩa là chi phí trả trước hoặc hàng tháng nhiều hơn, nhưng hãy coi đây như một chính sách bảo hiểm.
Trong khi bị tấn công, bạn sẽ cần lấy nhật ký của mình và khai thác chúng - hãy thử và tìm ra kiểu tấn công. Bạn nên xem xét việc tắt quyền truy cập ẩn danh và điều chỉnh các dịch vụ đang bị tấn công (tức là giảm giới hạn tốc độ của ứng dụng cho dịch vụ).
Nếu may mắn và bạn có một lượng khách hàng nhỏ, cố định, bạn có thể xác định được địa chỉ IP khách hàng hợp lệ của mình. Nếu đúng như vậy, bạn có thể chuyển sang cách tiếp cận danh sách trắng trong một thời gian ngắn. Đảm bảo rằng tất cả khách hàng của bạn biết điều này đang diễn ra để họ có thể gọi nếu họ cần truy cập từ một IP mới :)
Doug McClean có một số lời khuyên tuyệt vời tại: https://stackoverflow.com/a/1029613/1395668
Theo phần PHP của câu hỏi;
Mặc dù tôi không dựa vào PHP cho việc này, nó có thể được thực hiện nhưng cần phải xem xét tất cả các khả năng này hoặc hơn thế nữa;
Giả đơn giản;
<?php
// Assuming session is already started
$uri = md5($_SERVER['REQUEST_URI']);
$exp = 3; // 3 seconds
$hash = $uri .'|'. time();
if (!isset($_SESSION['ddos'])) {
$_SESSION['ddos'] = $hash;
}
list($_uri, $_exp) = explode('|', $_SESSION['ddos']);
if ($_uri == $uri && time() - $_exp < $exp) {
header('HTTP/1.1 503 Service Unavailable');
// die('Easy!');
die;
}
// Save last request
$_SESSION['ddos'] = $hash;
?>
Mức php quá muộn trong chuỗi yêu cầu.
Đặt máy chủ apache của bạn phía sau một thiết bị nguồn mở có thể là một lựa chọn tốt cho bạn.
http://tengine.taobao.org/ có một số tài liệu và mã nguồn nhiều mô-đun hơn nhằm mục đích phòng chống DDOS. Nó là một bản mở rộng của nginx, vì vậy bạn có thể dễ dàng thiết lập nó làm proxy ngược cho phiên bản apache của mình.
Xem: http://blog.zhuzhaoyuan.com/2012/01/a-mechanism-to-help-write-web-application-firewalls-for-nginx/ để biết cách chống va chạm có tấn công DoS.
Hoàn toàn quên mất, http://www.cloudflare.com là một trong những tường lửa ứng dụng web miễn phí hàng đầu, họ có các gói trả phí và miễn phí và sẽ cứu bạn khỏi DDOS, chúng tôi sử dụng nó cho rất nhiều trang web có lưu lượng truy cập cao chỉ vì khả năng lưu vào bộ nhớ đệm của nó . Thật là tuyệt vời!
Bạn không thể làm điều này ở cấp độ PHP. DDOS là một kiểu tấn công gửi quá nhiều yêu cầu đến máy chủ web của bạn. Máy chủ web của bạn sẽ từ chối yêu cầu trước khi nó gọi tập lệnh PHP của bạn.
Nếu bạn đang sử dụng Apache, đây là một số mẹo từ Apache: http://httpd.apache.org/docs/trunk/misc/security_tips.html
DDoS được xử lý tốt nhất bởi các thiết bị mạng có mục đích, đắt tiền. Máy chủ thường không tốt trong việc bảo vệ DDoS vì chúng có hiệu suất tương đối thấp, cạn kiệt trạng thái, băng thông hạn chế, v.v. Sử dụng iptables, mod apache và các dịch vụ tương tự có thể giúp ích trong một số trường hợp nếu bạn không có quyền truy cập vào phần cứng giảm thiểu DDoS hoặc một dịch vụ giảm thiểu DDoS, nhưng nó còn xa lý tưởng và vẫn khiến bạn có nguy cơ bị tấn công.
Làm thế nào về một cái gì đó như thế này ở phía PHP:
//if user does not change IP, then ban the IP when more than 10 requests per second are detected in 1 second
$limitps = 10;
if (!isset($_SESSION['first_request'])){
$_SESSION['requests'] = 0;
$_SESSION['first_request'] = $_SERVER['REQUEST_TIME'];
}
$_SESSION['requests']++;
if ($_SESSION['requests']>=10 && strtotime($_SERVER['REQUEST_TIME'])-strtotime($_SESSION['first_request'])<=1){
//write the IP to a banned_ips.log file and configure your server to retrieve the banned ips from there - now you will be handling this IP outside of PHP
$_SESSION['banip']==1;
}elseif(strtotime($_SERVER['REQUEST_TIME'])-strtotime($_SESSION['first_request']) > 2){
$_SESSION['requests'] = 0;
$_SESSION['first_request'] = $_SERVER['REQUEST_TIME'];
}
if ($_SESSION['banip']==1) {
header('HTTP/1.1 503 Service Unavailable');
die;
}
Có những plugin bạn có thể sử dụng trong apache cho ddos / dos. Khởi đầu tốt ở đây http://www.debianadmin.com/how-to-protect-apache-against-dosddos-or-brute-force-attacks.html
Nếu bạn đang sử dụng LEMP, bạn có thể kiểm tra tại đây. http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html
Đây là những điểm khởi đầu tốt và không tốn kém.
Đừng KHÔNG sử dụng bảo vệ dựa trên PHP, đó là khủng khiếp và khó có thể có một tác động nào cả! Định cấu hình máy chủ web của bạn theo các yêu cầu giới hạn tốc độ, chẳng hạn như trong Nginx bằng cách sử dụng mô-đun limit_req ( http://nginx.org/en/docs/http/ngx_http_limit_req_module.html )
Mặc dù, tôi khuyên bạn nên sử dụng CloudFlare để chống lại các cuộc tấn công dựa trên lớp 4 - tuy nhiên không phải các cuộc tấn công dựa trên lớp 7 trừ khi bạn sẵn sàng trả tiền.
DDOS thường bị chặn ở cấp máy chủ, Vui lòng bật bảo vệ DDOS ở Cấp máy chủ của bạn. Vui lòng kiểm tra các ghi chú bên dưới để biết các biện pháp bảo vệ DDOS.
Cài đặt cấu hình Máy chủ Apache HTTP có thể giúp ngăn chặn sự cố DDOS:
Chỉ thị RequestReadTimeout cho phép giới hạn thời gian khách hàng có thể mất để gửi yêu cầu.
Chờ 10 giây để nhận yêu cầu bao gồm tiêu đề và 30 giây để nhận nội dung yêu cầu:
RequestReadTimeout header=10 body=30
Chờ ít nhất 10 giây để nhận được nội dung yêu cầu. Nếu khách hàng gửi dữ liệu, hãy tăng thời gian chờ lên 1 giây cho mỗi 1000 byte nhận được, không có giới hạn trên cho thời gian chờ (ngoại trừ giới hạn do LimitRequestBody đưa ra gián tiếp):
RequestReadTimeout body=10,MinRate=1000
RequestReadTimeout header=10-30,MinRate=500
RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500
Chỉ thị KeepAliveTimeout cũng có thể bị hạ xuống trên các trang web bị tấn công DoS. Một số trang web thậm chí còn tắt hoàn toàn keepalives thông qua KeepAlive, điều này tất nhiên có những nhược điểm khác về hiệu suất. Cần kiểm tra các giá trị của các chỉ thị liên quan đến thời gian chờ do các mô-đun khác cung cấp.
Các chỉ thị LimitRequestBody, LimitRequestFields, LimitRequestFieldSize, LimitRequestLine và LimitXMLRequestBody phải được cấu hình cẩn thận để giới hạn mức tiêu thụ tài nguyên được kích hoạt bởi đầu vào của khách hàng. Điều chỉnh chỉ thị MaxRequestWorkers để cho phép máy chủ xử lý số lượng kết nối đồng thời tối đa mà không hết tài nguyên.
Các bước chống DDOS :