CLOSE_WAIT 상태의 고아 연결


30

영원히 보이는 것처럼 CLOSE_WAIT 상태로 TCP 연결을 누적하는 SLES 시스템이 있습니다. 이 디스크립터는 결국 사용 가능한 모든 메모리를 빨아들입니다. 현재 3037 개가 있지만 최근에 재시동하기 전에는 훨씬 더 높았습니다.

흥미로운 점은 청취 프로세스가있을 것으로 예상되는 로컬 포트에 연결되어 있지 않다는 것입니다. 연관된 PID가 없으며 타이머가 만료 된 것 같습니다.

# 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 스택이나 커널 네트워킹에 관해서는 블랙 벨트가 아니지만 매뉴얼 페이지에 따라 이러한 값이 기본값이므로 TCP 구성이 제정신처럼 보입니다.

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

무엇을 제공합니까? 타이머가 만료 된 경우 스택에서이 항목을 자동으로 지워서는 안됩니까? 이러한 것들이 쌓이면서 장기적인 DoS를 효과적으로 제공하고 있습니다.


오, 그리고 내 연구에 따르면 다른 사람들은 'lsof -i'에서 이와 같은 유물을보고 있음을 보여줍니다. 나는 이상한 것이 보이지 않습니다 .
pboin

2
보십시오 sudo netstat -tonp이 함께 발생하는 프로그램을 볼 수 있습니다.
BillThor

1
게시물과 내 대답 stackoverflow.com/a/17697733/540323 이 도움이 될 것입니다.
아밀 와두와 와라

답변:


16

아니요,에 대한 시간 제한이 없습니다 CLOSE_WAIT. 그것이 off출력 의 의미 라고 생각합니다 .

나가려면 CLOSE_WAIT응용 프로그램에서 소켓을 명시 적으로 닫아야합니다 (또는 종료).

CLOSE_WAIT 나누기 방법을 참조하십시오 .

프로세스 열에 netstat표시 -되는 경우 :

  • 적절한 권한과 기능 (예 : 루트)으로 실행하고 있습니까?
  • 커널 프로세스 일 수 있습니다 (예 : nfsd)

netstats를 할 때, 나는 완전한 사생활을 가졌습니다. 커널 프로세스 각도를 확인하겠습니다. 좋은 생각입니다. 잘 알려진 특권 포트 2 개 또는 3 개를 제외하고는 청취 소켓이 없어야하기 때문에 정말 충격을 받았습니다. 어쩌면 그것은 이상한 iptables 문제 일 것입니다. 나도 확인해 볼게
pboin

1
링크가 끊어졌습니다.
Nathan


10

CLOSE_WAIT클라이언트가 연결을 닫고 있지만 응용 프로그램이 아직 연결을 닫지 않았거나 연결하지 않았 음을 나타냅니다. 이 문제가 발생한 프로그램을 식별해야합니다. netstat -tonp 2>&1 | grep CLOSE연결을 보유하고있는 프로그램을 판별하기 위해 사용하십시오 .

나열된 프로그램이 없으면 커널이 서비스를 제공하고있는 것입니다. 이들은 nfs또는 과 같은 RPC 서비스 일 수 rpc.lockd있습니다. 수신 커널 서비스는로 나열 될 수 있습니다 netstat -lntp 2>&1 | grep -- -.

RPC 서비스가 고정 포트에 바인딩되어 있지 않으면 연결이 표시되는 것처럼 임시 포트에 바인딩됩니다. 다른 서버에서 프로세스 및 마운트를 점검 할 수도 있습니다.

다음을 수행하여 NFS 서비스를 고정 포트에 바인딩 할 수 있습니다.

  1. NFS 용 미사용 포트 4 개 선택 (32763-32766)
  2. NFS 용 고정 포트 추가 /etc/services
    rpc.statd-bc 32763 / udp # RCP 통계 방송
    rpc.statd-bc 32763 / tcp
    rpc.statd 32764 / udp # RCP 통계 청취
    rpc.statd 32764 / tcp
    rpc.mountd 32765 / udp # RPC 마운트
    rpc.mounted 32765 / tcp
    rpc.lockd 32766 / udp # RPC 잠금 / nlockmgr
    rpc.lockd 32766 / tcp
  3. 옵션을 사용하도록 statd 구성 --port 32763 --outgoing-port 32764
  4. 옵션을 사용하도록 rpcmountd 구성 --port 32765
  5. NFS 및 RPC 서비스를 종료했다가 다시 시작하십시오.

나는 PID가 없었지만 내 작품을 보여주지 않았다고 썼다. 귀하의 제안에 따라 빠른 편집을하였습니다. 감사합니다.
pboin

@opboin : PIDS (커널 서비스)가없는 포트에 대한 설명을 추가했습니다.
BillThor

3
CLOSE-WAIT는 피어 가 끝을 닫았으며 로컬 OS가 로컬 응용 프로그램이 닫히기를 기다리고 있음을 의미합니다.
user207421
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.