it-swarm-tr.com

CLOSE_WAIT durumunda artık bağlantılar

Sonsuza kadar görünen için TCP bağlantıları bir CLOSE_WAIT durumda biriktirir bir SLES makine var. Bu tanımlayıcılar sonunda tüm kullanılabilir belleği emmek. Şu anda, 3037 of ama aceleyle yeniden başlatılmadan önce çok daha yüksekti.

İlginç olan şey, dinleme süreçleri olmasını beklediğim yerel bağlantı noktalarına bağlantılardan gelmemeleri. İlişkili PID'leri yoktur ve zamanlayıcılarının süresi dolmuş gibi görünür.

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

TCP yığın veya çekirdek ağ iletişimi söz konusu olduğunda bir kara kuşak değilim, ancak TCP config bu değerler varsayılan olduğundan aklı başında görünüyor) , man sayfası başına:

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

Öyleyse ne veriyor? Zamanlayıcıların süresi dolduysa, yığın bu öğeleri otomatik olarak temizlememeli mi? Bu şeyler geliştikçe kendime etkili bir şekilde uzun vadeli bir DoS veriyorum.

30
pboin

Hayır, CLOSE_WAIT İçin zaman aşımı yok. Bence off çıktılarınızda bu demektir.

CLOSE_WAIT Öğesinden çıkmak için uygulamanın soketi açıkça kapatması (veya çıkması) gerekir.

Bakınız Nasıl kırılır CLOSE_WAIT .

İşlem sütununda netstat- Gösteriyorsa:

  • uygun ayrıcalık ve yeteneklerle mi çalışıyorsunuz (ör. root olarak)?
  • çekirdek işlemleri olabilirler (örn. nfsd)
16
Mikel

CLOSE_WAIT, İstemcinin bağlantıyı kapattığını ancak uygulamanın henüz kapatılmadığını veya istemcinin kapanmadığını belirtir. Hangi programın veya programların bu sorunu yaşadığını belirlemelisiniz. Kullanmayı deneyin

netstat -tonp 2>&1 | grep CLOSE

hangi programların bağlantıları beklediğini belirlemek.

Listelenen program yoksa, çekirdek tarafından hizmet verilmektedir. Bunlar, nfs veya rpc.lockd Gibi RPC hizmetleridir. Dinleme çekirdeği hizmetleri aşağıdakilerle listelenebilir:

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

RPC hizmetleri sabit bağlantı noktalarına bağlı olmadıkça, bağlantılarınızın gösterildiği gibi geçici bağlantı noktalarına bağlanırlar. Ayrıca diğer sunucudaki işlemleri ve bağlamaları kontrol etmek isteyebilirsiniz.

Aşağıdakileri yaparak NFS hizmetlerinizi sabit bağlantı noktalarına bağlayabilirsiniz:

  1. NFS için kullanılmayan dört bağlantı noktası seçin (burada 32763-32766 kullanılır)
  2. NFS için /etc/services Sabit bağlantı noktaları ekleyin
    rpc.statd-bc 32763/udp # RCP statd yayını 
     rpc.statd-bc 32763/tcp 
     rpc.statd 32764/udp # RCP statd dinle 
     rpc.statd 32764/tcp 
     rpc.mountd 32765/udp # RPC mountd 
     rpc.mountd 32765/tcp 
     rpc.lockd 32766/udp # RPC kilidi/nlockmgr 
     rpc.lockd 32766/tCP
  3. Statd'yi --port 32763 --outgoing-port 32764 Seçeneklerini kullanacak şekilde yapılandırın
  4. Rpcmountd dosyasını --port 32765 Seçeneğini kullanacak şekilde yapılandırın
  5. NFS ve RPC hizmetlerini kapatın ve yeniden başlatın.
10
BillThor