Apa parameter kernel atau pengaturan lain yang mengontrol jumlah maksimum soket TCP yang dapat dibuka di server Linux? Apa pengorbanan dari memungkinkan lebih banyak koneksi?
Saya perhatikan saat memuat pengujian server Apache dengan ab bahwa itu cukup mudah untuk memaksimalkan koneksi terbuka di server. Jika Anda mematikan opsi ab's -k, yang memungkinkan koneksi digunakan kembali, dan meminta lebih dari 10.000 permintaan, maka Apache melayani 11.000 permintaan pertama dan kemudian berhenti selama 60 detik. Pandangan terhadap output netstat menunjukkan 11.000 koneksi dalam status TIME_WAIT. Ternyata, ini normal. Koneksi tetap terbuka default 60 detik bahkan setelah klien selesai dengan mereka untuk alasan keandalan TCP .
Sepertinya ini akan menjadi cara mudah untuk melakukan DoS server dan saya bertanya-tanya apa penyetelan dan tindakan pencegahan yang biasa untuk itu.
Inilah hasil pengujian saya:
# 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
Inilah perintah netstat yang saya jalankan selama pengujian:
# 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