Mam maszynę SLES, która gromadzi połączenia TCP w stanie CLOSE_WAIT dla tego, co wydaje się być wieczne. Deskryptory te w końcu pochłaniają całą dostępną pamięć. W tej chwili mam ich 3037, ale przed ostatnim ponownym uruchomieniem było znacznie więcej.
Interesujące jest to, że nie są to połączenia z portami lokalnymi, które, jak się spodziewałem, mają procesy nasłuchiwania. Nie mają powiązanych PID, a ich liczniki wydają się wygasły.
# netstat -ton | grep CLOSE_WAIT
tcp 176 0 10.0.0.60:54882 10.0.0.12:31663 CLOSE_WAIT off (0.00/0/0)
tcp 54 0 10.0.0.60:60957 10.0.0.12:4503 CLOSE_WAIT off (0.00/0/0)
tcp 89 0 10.0.0.60:50959 10.0.0.12:3518 CLOSE_WAIT off (0.00/0/0)
# netstat -tonp | grep CLOSE_WAIT
tcp 89 0 10.0.0.59:45598 10.0.0.12:1998 CLOSE_WAIT -
tcp 15 0 10.0.0.59:60861 10.0.0.12:1938 CLOSE_WAIT -
tcp 5 0 10.0.0.59:56173 10.0.0.12:1700 CLOSE_WAIT -
Nie jestem czarnym pasem jeśli chodzi o stos TCP lub sieć jądra, ale konfiguracja TCP wydaje się rozsądna, ponieważ te wartości są domyślne, na stronę man:
# cat /proc/sys/net/ipv4/tcp_fin_timeout
60
# cat /proc/sys/net/ipv4/tcp_keepalive_time
7200
Co więc daje? Jeśli czas upłynął, czy stos nie powinien automatycznie wyczyścić tego? Skutecznie daję sobie długoterminową DoS, gdy te rzeczy się narastają.
sudo netstat -tonp
sprawdzić, z którym programem to się dzieje.