Tham số kernel hoặc cài đặt nào khác kiểm soát số lượng ổ cắm TCP tối đa có thể mở trên máy chủ Linux? Sự đánh đổi cho phép nhiều kết nối là gì?
Tôi nhận thấy trong khi tải thử nghiệm một máy chủ Apache với ab rằng nó khá dễ dàng để tối đa hóa các kết nối mở trên máy chủ. Nếu bạn rời khỏi tùy chọn -k của ab, cho phép tái sử dụng kết nối và yêu cầu nó gửi hơn 10.000 yêu cầu thì Apache sẽ phục vụ 11.000 yêu cầu đầu tiên hoặc sau đó tạm dừng trong 60 giây. Nhìn vào đầu ra netstat cho thấy 11.000 kết nối ở trạng thái TIME_WAIT. Rõ ràng, điều này là bình thường. Các kết nối được giữ mặc định là 60 giây ngay cả sau khi máy khách được thực hiện với chúng vì lý do độ tin cậy TCP .
Có vẻ như đây sẽ là một cách dễ dàng để DoS một máy chủ và tôi tự hỏi những điều chỉnh và biện pháp phòng ngừa thông thường cho nó là gì.
Đây là đầu ra thử nghiệm của tôi:
# ab -c 5 -n 50000 http://localhost/
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)
Completed 5000 requests
Completed 10000 requests
apr_poll: The timeout specified has expired (70007)
Total of 11655 requests completed
Đây là lệnh netstat tôi chạy trong quá trình kiểm tra:
# netstat --inet -p | grep "localhost:www" | sed -e 's/ \+/ /g' | cut -d' ' -f 1-4,6-7 | sort | uniq -c
11651 tcp 0 0 localhost:www TIME_WAIT -
1 tcp 0 1 localhost:44423 SYN_SENT 7831/ab
1 tcp 0 1 localhost:44424 SYN_SENT 7831/ab
1 tcp 0 1 localhost:44425 SYN_SENT 7831/ab
1 tcp 0 1 localhost:44426 SYN_SENT 7831/ab
1 tcp 0 1 localhost:44428 SYN_SENT 7831/ab