Que parâmetro do kernel ou outras configurações controlam o número máximo de soquetes TCP que podem ser abertos em um servidor Linux? Quais são as vantagens de permitir mais conexões?
Notei durante o teste de carga de um servidor Apache com ab que é muito fácil maximizar as conexões abertas no servidor. Se você deixar de lado a opção ab's -k, que permite a reutilização da conexão, e solicitar que ele envie mais de 10.000 solicitações, o Apache atenderá as primeiras 11.000 solicitações e, em seguida, interromperá por 60 segundos. Uma olhada na saída netstat mostra 11.000 conexões no estado TIME_WAIT. Aparentemente, isso é normal. As conexões são mantidas em aberto por 60 segundos, mesmo depois que o cliente é concluído por razões de confiabilidade do TCP .
Parece que essa seria uma maneira fácil de fazer DoS um servidor e estou me perguntando quais são as afinações e precauções habituais para isso.
Aqui está a minha saída de teste:
# 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
Aqui está o comando netstat que eu executo durante o teste:
# 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