CLOSE_WAIT 상태의 고아 연결 89

영원히 보이는 것처럼 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를 효과적으로 제공하고 있습니다.



답변

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

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

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

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

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

답변

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 서비스를 종료했다가 다시 시작하십시오.