क्या कर्नेल पैरामीटर या अन्य सेटिंग्स टीसीपी सॉकेट्स की अधिकतम संख्या को नियंत्रित करती हैं जो लिनक्स सर्वर पर खुली हो सकती हैं? अधिक कनेक्शन की अनुमति देने के व्यापार क्या हैं?
मैंने देखा कि एक अपाचे सर्वर को ab से लोड करते समय कि सर्वर पर खुले कनेक्शन को अधिकतम करना बहुत आसान है। यदि आप ab-a -k विकल्प को छोड़ देते हैं, जो कनेक्शन का पुन: उपयोग करने की अनुमति देता है, और इसमें लगभग 10,000 से अधिक अनुरोध भेजे जाते हैं, तो Apache पहले 11,000 या तो अनुरोध करता है और फिर 60 सेकंड के लिए रुक जाता है। नेटस्टैट आउटपुट पर एक नज़र TIME_WAIT स्थिति में 11,000 कनेक्शन दिखाता है। जाहिर है, यह सामान्य है। टीसीपी विश्वसनीयता कारणों से क्लाइंट के साथ किए जाने के बाद भी कनेक्शन 60 सेकंड का डिफ़ॉल्ट रखा जाता है ।
ऐसा लगता है कि यह DoS सर्वर का एक आसान तरीका होगा और मैं सोच रहा हूं कि इसके लिए सामान्य ट्यूनिंग और सावधानियां क्या हैं।
यहाँ मेरा परीक्षण उत्पादन है:
# 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
यहाँ परीक्षण के दौरान मेरे द्वारा संचालित नेटस्टैट कमांड है:
# 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