Hangi çekirdek parametresi veya diğer ayarlar, bir Linux sunucusunda açılabilecek maksimum TCP soket sayısını kontrol eder? Daha fazla bağlantıya izin vermenin değişmezliği nedir?
Bir Apache sunucusunu ab ile test ederken , sunucudaki açık bağlantıları arttırmanın oldukça kolay olduğunu fark ettim . Ab's -k seçeneğini bırakıp, bağlantının yeniden kullanılmasına izin verir ve yaklaşık 10.000'den fazla istek göndermesini sağlarsanız, Apache ilk 11.000'in üzerinde olan istekleri yerine getirir ve sonra 60 saniye durur. Netstat çıktısına bakıldığında TIME_WAIT durumunda 11.000 bağlantı gösteriliyor. Görünüşe göre bu normal. Bağlantılar, TCP güvenilirlik nedenleriyle istemci onlarla yapıldıktan sonra bile varsayılan olarak 60 saniye açık tutulur .
Bu bir sunucuyu DoS yapmanın kolay bir yolu olacak gibi görünüyor ve bunun için ne gibi olağan ayarların ve önlemlerin olduğunu merak ediyorum.
İşte benim test çıktım:
# 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
Test sırasında çalıştırdığım netstat komutu:
# 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