it-swarm-eu.dev

Osamocená připojení ve stavu CLOSE_WAIT

Mám stroj SLES, který akumuluje spojení TCP spojení ve stavu CLOSE_WAIT pro to, co se zdá být navždy. Tyto deskriptory nakonec vysávají veškerou dostupnou paměť. V současné době mám 3037 z ale bylo to mnohem vyšší před nedávným restartem.

Zajímavé je, že nepocházejí od připojení k místním portům, které očekávám, že budou mít naslouchací procesy. Nemají žádné přidružené PID a zdá se, že jejich časovače vypršely.

# 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  -     

Nejsem černý pás, pokud jde o stack TCP nebo síťové jádro), ale config TCP config se zdá být zdravý, protože tyto hodnoty jsou výchozí) , na stránce man:

# cat /proc/sys/net/ipv4/tcp_fin_timeout 
60
# cat /proc/sys/net/ipv4/tcp_keepalive_time 
7200

Co tedy dává? Pokud časovače vypršely, neměl by zásobník automaticky vymazat tyto věci? Když se tyto věci budují, účinně si dávám dlouhodobý DoS.

30
pboin

Ne, na CLOSE_WAIT Není časový limit. Myslím, že to, co znamená ve vašem výstupu off.

Chcete-li se dostat z CLOSE_WAIT, Musí aplikace soket explicitně zavřít (nebo ukončit).

Viz Jak rozbít CLOSE_WAIT .

Pokud netstat zobrazuje ve sloupci procesu -:

  • běžíte s příslušnými oprávněními a schopnostmi (např. jako root)?
  • mohou to být procesy jádra (např. nfsd)
16
Mikel

CLOSE_WAIT označuje, že klient ukončuje připojení, ale aplikace jej dosud nezavřela nebo že klient ne. Měli byste určit, který program nebo programy mají tento problém. Zkuste použít

netstat -tonp 2>&1 | grep CLOSE

k určení programů, které udržují připojení.

Pokud nejsou uvedeny žádné programy, pak je služba poskytována jádrem. Jedná se pravděpodobně o RPC služby, jako je nfs nebo rpc.lockd. Seznam služeb jádra poslouchání

netstat -lntp 2>&1 | grep -- -  

Pokud nejsou služby RPC vázány na pevné porty, budou se vámi spojovat s dočasnými porty, jak se zdá, že se vaše připojení zobrazuje. Možná budete chtít zkontrolovat procesy a připojení na druhém serveru.

Vaše služby NFS budete moci svázat s pevnými porty následujícím postupem:

  1. Vyberte čtyři nepoužívané porty pro systém souborů NFS (zde použit 32763 32326)
  2. Přidejte pevné porty pro NFS do /etc/services
    rpc.statd-bc 32763/udp # RCP statd broadcast 
     rpc.statd-bc 32763/tcp 
     rpc.statd 32764/udp # RCP statd poslech 
     rpc.statd 32764/tcp 
     rpc.mountd 32765/udp # RPC mount 
     rpc.mountd 32765/tcp 
     rpc.lockd 32766/udp # RPC lockd/nlockmgr 
     rpc.lockd 32766/tcp
  3. Nakonfigurujte statd pro použití možností --port 32763 --outgoing-port 32764
  4. Nakonfigurujte rpcmountd tak, aby používal možnost --port 32765
  5. Vypnutí a restartování služeb NFS a RPC.
10
BillThor