리눅스 서버를 운영하다 보면 어느 날 갑자기 웹서비스가 느려지거나, SSH 연결이 자주 끊기거나, 특정 포트 접근이 불가능해지는 상황을 겪게 됩니다. CPU나 메모리 사용량이 정상이어도 네트워크 연결 수가 비정상적으로 증가하면 서버 전체가 불안정해지는 문제가 발생합니다. 이런 문제는 대부분 포트 점유, TIME_WAIT 누적, CLOSE_WAIT 폭증 같은 네트워크 연결 상태 이상에서 시작되며, 제대로 파악하지 못하면 증상이 반복되는 악순환이 발생합니다. 그래서 서버 관리자는 서버 연결 상태를 분석할 수 있는 도구를 반드시 알고 있어야 합니다. 그 핵심 명령어가 바로 netstat과 ss입니다.
netstat은 오래된 도구이지만 여전히 많은 관리자들이 사용하는 기본적인 네트워크 분석 도구입니다. 반면 ss는 netstat보다 훨씬 빠르고 정확하며, 최근 리눅스 배포판에서 기본 도구로 자리 잡고 있습니다. 이 글에서는 두 도구를 활용해 서버 연결 끊김의 원인을 추적하는 실전 방법을 소개합니다.
서버 연결이 끊기는 주요 원인
서버 연결 불안정 문제는 대부분 아래와 같은 상황에서 발생합니다.
- 특정 포트 연결 수가 급증해 포트가 포화될 때
- CLOSE_WAIT 상태가 누적되어 커널 소켓 자원을 소모할 때
- TIME_WAIT이 폭증해 새 연결을 받을 수 없을 때
- 외부 공격(IP 스캔, 포트 스캔, SYN Flood)이 발생할 때
- 애플리케이션 오류로 연결이 정상적으로 종료되지 않을 때
- 내부 프로세스가 포트 점유 상태에서 죽어버리는 경우
이 문제들은 CPU나 메모리만 보면 절대 원인을 알 수 없습니다. 결국 중요한 것은 현재 어떤 연결이 살아 있고, 어떤 포트에 누가 요청을 보내고 있는지 정확히 파악하는 것입니다.
netstat로 연결 상태 확인하는 기본 방법
netstat은 오래된 명령어지만 여전히 매우 강력한 분석 도구입니다.
현재 열려 있는 포트 확인
netstat -tulnp
확인할 수 있는 정보:
- 어떤 프로세스가 어떤 포트를 사용 중인지
- TCP / UDP 구분
- LISTEN 상태 포트 목록
- 프로그램 이름 및 PID
예를 들어 80번 포트가 nginx가 아닌 다른 프로세스가 점유하고 있다면 웹 서버가 정상 작동할 수 없습니다. 이 문제는 netstat으로 즉시 파악할 수 있습니다.
연결 상태가 비정상적으로 많은지 확인
netstat -nat | awk '{print $6}' | sort | uniq -c | sort -nr
이 명령은 연결 상태별 개수를 확인합니다.
가장 흔한 문제:
- CLOSE_WAIT 폭증 → 애플리케이션 코드 문제
- TIME_WAIT 과다 → 짧은 연결 반복, 공격 의심
- SYN_RECV 많음 → DDoS 또는 SYN Flood
예를 들어 SYN_RECV가 수천 개 이상이면 서버 연결이 끊기는 이유가 명확합니다. 공격 또는 비정상 트래픽입니다.
ss 명령어로 빠르고 정확하게 분석하기
ss는 netstat보다 빠르며, 리눅스 최신 커널에 최적화된 도구입니다.
현재 TCP 연결 모두 보기
ss -tna
특정 포트 연결만 보기 (예: 80번)
ss -tna '( sport = :80 )'
현재 서버로 연결한 상위 IP 보기
ss -tn src :80 | awk '{print $5}' | cut -d':' -f1 | sort | uniq -c | sort -nr
이 명령으로 “누가 많이 접속하는가?”를 바로 알 수 있습니다.
ESTABLISHED 상태만 보기
ss -tn state established
서비스 지연 시 특정 IP가 연결을 과도하게 점유하고 있을 수 있습니다.
네트워크 연결 문제를 분석하는 실제 순서
리눅스 서버 장애가 발생하면 아래 순서로 확인하면 대부분 원인을 찾아낼 수 있습니다.
1. 현재 포트 별 연결 수 파악
ss -s
→ TCP 연결들이 어떤 상태로 분포되어 있는지 전체 요약을 제공합니다.
2. 문제 포트 점유 확인
netstat -tulnp
→ 예상치 못한 프로세스가 포트를 점유하고 있으면 즉시 원인 파악 가능.
3. 특정 상태가 비정상적으로 증가했는지 확인
예: CLOSE_WAIT이 계속 증가한다면 애플리케이션이 연결 종료를 제대로 처리하지 못하는 상태입니다.
4. 공격 의심 시 상위 공격 IP 확인
ss -tn state syn-recv
5. 특정 IP 즉시 차단
sudo ufw deny from <IP>
또는
sudo firewall-cmd --add-rich-rule="rule family='ipv4' source address='<IP>' reject"
netstat과 ss는 단순한 도구가 아니다
두 도구는 서버 연결 문제를 해결하는 데 필수적인 “네트워크 청진기” 역할을 합니다.
- 포트 충돌
- 비정상 연결 누적
- 애플리케이션 오류
- 공격 발생 여부
- 특정 IP 폭주
이 모든 문제를 가장 빠르게 파악할 수 있는 도구가 바로 netstat과 ss입니다. 서버 연결 끊김 문제는 단순 장애가 아니라 더 큰 보안 문제의 전조일 수도 있습니다. 그렇기 때문에 연결 상태를 정확히 분석하는 능력이 모든 서버 운영자에게 필수입니다.