네트워크 진단의 필수 도구! lsof와 ss로 시스템 모니터링 완전정복 가이드 2025

리눅스 시스템을 관리하다 보면 어떤 프로세스가 어떤 포트를 사용하고 있는지, 네트워크 연결 상태는 어떤지 확인해야 할 때가 있습니다. 갑자기 서버가 느려지거나 특정 포트가 막혔을 때, 어디서부터 문제를 찾아야 할지 막막하셨던 경험이 있으실 텐데요.

오늘은 시스템 관리자와 개발자들이 반드시 알아야 할 네트워크 진단 도구인 lsofss 명령어를 완전정복해보겠습니다. 이 글 하나로 네트워크 트러블슈팅 실력이 한 단계 업그레이드될 것을 약속드립니다!

🔍 lsof란? 열린 파일의 모든 것을 보여주는 마법의 도구

lsof(List Open Files)는 현재 시스템에서 열려 있는 모든 파일과 네트워크 연결을 보여주는 강력한 명령어입니다. 리눅스에서는 모든 것이 파일로 취급되기 때문에, 네트워크 소켓도 파일의 한 형태로 관리됩니다.

기본 사용법과 핵심 옵션들

# 시스템의 모든 열린 파일 나열
lsof

# 특정 포트로 필터링 (80번 포트)
lsof -i :80

# HTTPS 포트 확인 (443번 포트)
lsof -i :443

# 특정 프로세스가 사용하는 파일들
lsof -p [프로세스ID]

# 특정 사용자가 열고 있는 파일들
lsof -u [사용자명]

lsof 출력 결과 해석하기

lsof를 실행하면 다음과 같은 컬럼들이 표시됩니다:

  • COMMAND: 프로세스 이름
  • PID: 프로세스 ID
  • USER: 파일을 연 사용자
  • FD: 파일 디스크립터 (File Descriptor)
  • TYPE: 파일 타입 (REG, DIR, IPv4, IPv6 등)
  • DEVICE: 장치 번호
  • SIZE/OFF: 파일 크기 또는 오프셋
  • NODE: 아이노드 번호
  • NAME: 파일명 또는 연결 정보

💡 실전 활용 예시: 웹서버 포트 점검하기

HTTP 포트 (80번) 모니터링

lsof -i :80

이 명령어로 다음과 같은 정보를 확인할 수 있습니다:

  • 어떤 웹서버가 80번 포트를 사용하고 있는지
  • 현재 연결된 클라이언트들의 IP 주소
  • 연결 상태 (LISTEN, ESTABLISHED, TIME_WAIT 등)

HTTPS 포트 (443번) 보안 점검

lsof -i :443

SSL/TLS 연결을 처리하는 프로세스들을 확인하여:

  • 보안 연결이 정상적으로 설정되어 있는지
  • 예상치 못한 프로세스가 443 포트를 사용하고 있지는 않은지
  • 인증서 관련 프로세스들의 상태는 어떤지 점검할 수 있습니다.

⚡ ss 명령어: 현대적인 네트워크 소켓 분석 도구

ss(Socket Statistics)는 netstat의 현대적인 대안으로, 더 빠르고 상세한 네트워크 연결 정보를 제공합니다. 특히 대용량 트래픽을 처리하는 서버에서는 netstat보다 월등한 성능을 보여줍니다.

ss의 핵심 옵션들

# 포트 80에서 리스닝 중인 소켓 표시
ss -lnt 'sport = :80'

# 모든 TCP 소켓 정보
ss -t

# 모든 리스닝 포트 표시
ss -ln

# 연결된 소켓들의 상세 정보
ss -i

# 프로세스 정보와 함께 표시
ss -lntp

ss 옵션 상세 설명

  • l: 리스닝 상태인 소켓만 표시
  • n: 호스트명과 포트를 숫자로 표시 (DNS 조회 안함)
  • t: TCP 소켓만 표시
  • u: UDP 소켓만 표시
  • p: 프로세스 정보 표시
  • i: 내부 TCP 정보 표시
  • s: 소켓 통계 요약 정보

🚀 고급 활용: 트러블슈팅 시나리오별 대응법

시나리오 1: “웹사이트가 안 열려요!”

# 1단계: 웹서버가 정상적으로 리스닝하고 있는지 확인
lsof -i :80
ss -lnt 'sport = :80'

# 2단계: 프로세스 상태 확인
ps aux | grep apache2  # 또는 nginx

# 3단계: 연결 상태 점검
ss -tn 'sport = :80'

시나리오 2: “서버 성능이 갑자기 느려졌어요!”

# 1단계: 전체 연결 수 확인
ss -s

# 2단계: TIME_WAIT 상태 소켓 개수 확인
ss -tan | grep TIME_WAIT | wc -l

# 3단계: 가장 많이 연결된 IP 찾기
ss -tn | awk '{print $4}' | cut -d: -f1 | sort | uniq -c | sort -nr

시나리오 3: “보안 이슈 의심 상황”

# 1단계: 예상치 못한 포트가 열려있는지 확인
ss -lntp | grep -v ":22\\\\|:80\\\\|:443"

# 2단계: 외부 연결 점검
lsof -i -P | grep ESTABLISHED

# 3단계: 특정 포트 범위 스캔
lsof -i :1000-2000

📊 성능 비교: lsof vs ss vs netstat

도구속도메모리 사용량기능성추천 상황
lsof보통높음★★★★★파일 시스템 분석
ss빠름낮음★★★★☆네트워크 소켓 분석
netstat느림보통★★★☆☆레거시 시스템

🛡️ 보안 관점에서의 활용 팁

1. 무단 접근 탐지

# 현재 연결된 외부 IP들 모니터링
lsof -i | grep ESTABLISHED | awk '{print $9}' | cut -d'>' -f2

2. 포트 스캐닝 공격 탐지

# SYN_RECV 상태가 비정상적으로 많은지 확인
ss -tan | grep SYN_RECV | wc -l

3. 백도어 프로세스 탐지

# 예상치 못한 리스닝 포트 확인
ss -lntp | grep -E ":[0-9]{5}" # 5자리 포트 번호들

🔧 실무에서 자주 사용하는 원라이너 명령어들

# TOP 10 포트별 연결 수
ss -tan | awk 'NR>1{print $4}' | cut -d: -f2 | sort | uniq -c | sort -nr | head -10

# 특정 IP에서 오는 모든 연결
lsof -i | grep "192.168.1.100"

# 메모리 사용량이 높은 네트워크 프로세스 찾기
lsof -i | awk '{print $2}' | sort | uniq | xargs ps -o pid,vsz,comm -p

# 포트별 프로세스 매핑
ss -lntp | awk '{print $4, $7}' | column -t

⚙️ 모니터링 스크립트 만들기

다음은 주기적으로 네트워크 상태를 점검하는 간단한 스크립트입니다:

#!/bin/bash
# network_monitor.sh

echo "=== Network Status Report ==="
echo "Date: $(date)"
echo ""

echo "Top 5 ports by connection count:"
ss -tan | awk 'NR>1{print $4}' | cut -d: -f2 | sort | uniq -c | sort -nr | head -5
echo ""

echo "Web server status:"
lsof -i :80 -i :443
echo ""

echo "Unusual listening ports (>10000):"
ss -lnt | awk '$4 ~ /:1[0-9]{4}$/ {print $4}'

🎯 마무리: 효과적인 네트워크 진단을 위한 체크리스트

네트워크 문제 발생 시 다음 순서로 진단하세요:

  1. 기본 상태 확인: ss -s로 전체 소켓 통계 파악
  2. 포트 상태 점검: lsof -i :[포트번호]로 특정 포트 확인
  3. 프로세스 연관성: ss -lntp로 프로세스와 포트 매핑
  4. 연결 품질 분석: ss -i로 TCP 내부 정보 확인
  5. 보안 검증: 예상치 못한 연결이나 프로세스 탐지

lsof와 ss 명령어는 시스템 관리자와 개발자에게 없어서는 안 될 필수 도구입니다. 이 글에서 소개한 기법들을 실제 업무에 적용해보시고, 여러분만의 노하우도 댓글로 공유해주세요!

더 궁금한 점이 있으시거나, 특별한 상황에서의 활용법을 알고 싶으시다면 언제든 댓글 남겨주시기 바랍니다. 함께 배우고 성장하는 개발자 커뮤니티를 만들어가요! 🚀


참고 자료:

댓글 남기기