서버 트래픽 이상 징후 탐지 방법을 익히게 된 건 새벽 3시에 서버 CPU가 80%를 넘는다는 알림이 울렸고, access.log를 보니 동일 IP에서 1분에 500건 이상 요청이 들어오고 있었을 때입니다. 패턴을 보니 /wp-login.php와 /wp-admin/에 집중된 로그인 시도였습니다. fail2ban으로 해당 IP를 차단하고 5분 만에 정상화됐습니다.
# 실시간 접속 로그 확인
sudo tail -f /var/log/nginx/access.log
# 현재 초당 요청 수
sudo tail -f /var/log/nginx/access.log | pv -l -r > /dev/null
# 최근 1분간 요청 수
sudo awk '{print $4}' /var/log/nginx/access.log | grep "$(date +'%d/%b/%Y:%H:%M')" | wc -l
# 요청이 많은 IP 상위 20개
sudo awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20
# 특정 URL에 집중된 요청
sudo grep "wp-login.php" /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -10
# 404 에러가 많은 IP (스캐너 징후)
sudo awk '$9==404 {print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10
# User-Agent 분석 (봇 식별)
sudo awk -F'"' '{print $6}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20
# UFW로 단일 IP 차단
sudo ufw deny from 1.2.3.4 to any
# IP 대역 차단
sudo ufw deny from 1.2.3.0/24 to any
# fail2ban으로 자동 차단 (임시)
sudo fail2ban-client set nginx-http-auth banip 1.2.3.4
# 차단 목록 확인
sudo ufw status numbered
sudo fail2ban-client status nginx-http-auth
이상 트래픽은 패턴이 명확합니다: 동일 IP의 반복 요청, 짧은 시간 내 대량 404, 비정상 User-Agent(Python-requests, curl, 빈 문자열 등). access.log를 주 1회라도 훑어보는 습관이 이상 징후를 초기에 잡아냅니다.
AI가 초안을 생성하고, 의료기관 인프라 운영자가 1차 데이터 기반으로 최종 검수·승인합니다.
작성·검수: WavePix 운영자 (의료기관 3곳 인프라 전담)