서비스 거부 공격(DoS, DDoS)


웹 서비스를 운영하는 환경에서 정상적인 트래픽 외에도 예기치 않은 과부하가 발생하는 경우가 있다. 특히 PHP 기반의 웹사이트를 운영하면서, 특정 시간대에 갑작스러운 느려짐 또는 접속 불가 현상이 반복된다면, 서비스 거부 공격(DoS, DDoS)을 의심해볼 필요가 있다. 이 글에서는 공격 징후를 식별하는 실무적인 관찰 지점을 소개한다.


1. php-fpm 리소스 점검: CPU 점유율과 프로세스 동작

PHP-FPM(FastCGI Process Manager)은 PHP 코드 실행을 담당하는 핵심 구성 요소다. 평소보다 유독 많은 리소스를 사용하는 경우, 다음과 같은 방법으로 확인할 수 있다.

top -p $(pidof php-fpm8.3 | tr ' ' ,)
  • php-fpm이 전체 CPU를 과점하거나, 메모리를 비정상적으로 소모하는 프로세스가 여러 개 존재한다면 공격의 징후일 수 있다.
  • 특정 프로세스가 긴 시간 동안 상태 변화 없이 지속된다면, 외부 요청에 의해 자원 고갈이 유도되고 있을 가능성이 있다.

2. 동시 요청 수와 접속 IP 모니터링

Apache, Nginx와 같은 웹서버에서 현재 접속 중인 클라이언트를 확인하는 것도 중요하다. 예를 들어, 다음 명령은 다수의 접속자가 동시에 유입되고 있는지 판단할 수 있게 해준다.

netstat -ant | grep ':80 ' | grep ESTABLISHED | wc -l

또는 다음 명령으로 접속 IP 상위 순위를 확인할 수 있다.

netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head
  • 동일한 IP에서 수백~수천 건의 연결이 시도되고 있다면, DDoS 공격에 해당될 가능성이 높다.
  • 국내에서 흔치 않은 국가의 IP가 집중적으로 나타나는 것도 하나의 단서가 될 수 있다.

3. php-fpm.sock 또는 .pid 파일 상태 확인

웹서버와 PHP-FPM 간의 통신은 .sock 파일을 통해 이루어지는 경우가 많다. 해당 파일이 존재하지 않거나, 비정상적으로 닫히는 경우 PHP 프로세스가 종료되었거나 중단되었을 수 있다.

ls /run/php/

php8.3-fpm.sock, php8.3-fpm.pid 등의 파일이 사라지거나, 변경 시각이 자주 갱신된다면 공격으로 인한 반복적인 재시작을 의심할 수 있다.


4. 시스템 로그에서 오류 패턴 파악

시스템 로그(/var/log/syslog, /var/log/php-fpm.log, /var/log/nginx/error.log)는 공격 징후를 빠르게 발견할 수 있는 유용한 정보원이다. 예를 들어 다음과 같은 로그는 주의 깊게 살펴야 한다.

  • server reached max_children setting (php-fpm 설정 초과)
  • 502 Bad Gateway 오류 빈발 (서버 내부 연결 실패)
  • connection reset by peer, broken pipe 등 비정상 종료 메시지

로그에서 특정 시간대에 급증하는 오류 메시지가 있다면 공격의 가능성을 높게 봐야 한다.


5. 서버 내부 방화벽(UFW)와 Fail2Ban 연동 확인

UFW, iptables, fail2ban과 같은 도구를 이용해 자동 차단이 잘 작동하고 있는지도 확인해야 한다. 예를 들어 fail2ban 로그(/var/log/fail2ban.log)에서 다음과 같은 로그가 반복되면, 서버가 실제로 공격을 받았고 차단한 이력을 보여주는 것이다.

Ban 192.168.1.100 after 5 attempts

6. systemctl을 통한 서비스 상태 변화 감지

주요 서비스의 상태는 systemctl 명령으로 쉽게 확인 가능하다.

sudo systemctl status php8.3-fpm
  • Active: failed 또는 restarting 등의 상태가 자주 발생한다면, 이는 의도적인 과부하 유도(DoS)일 가능성이 있다.
  • 최근 로그 메시지에서 프로세스 충돌이나 OOM (Out of Memory) 메시지가 있다면, 자원 소모형 공격이 진행 중일 수 있다.

7. 이상 트래픽의 원인을 역추적: 웹로그 분석

Nginx 또는 Apache의 웹 액세스 로그(/var/log/nginx/access.log)를 분석해 보면, 다음과 같은 패턴이 나타날 수 있다.

  • 짧은 시간 동안 수백~수천 번 동일 URL에 접근
  • POST 요청이 과도하게 발생
  • 비정상적인 User-Agent 값 (예: python-requests, curl, 무작위 문자열 등)
  • 특정 쿼리 파라미터가 반복적으로 호출됨

이러한 패턴은 자동화된 스크립트에 의한 공격 가능성을 강하게 시사한다.


결론: 단순한 장애로 넘기지 말고, 증거를 확보하고 대응하라

서비스 거부 공격은 단기간의 장애를 유발하는 데 그치지 않고, 장기적으로 서버 자원 낭비와 고객 신뢰도 저하로 이어질 수 있다. 의심되는 현상이 반복된다면, 서버의 시스템/접속/에러 로그를 중심으로 정밀 분석을 수행하고, 필요한 경우 IP 차단, 방화벽 조정, 클라우드 WAF 도입 등을 통해 방어체계를 마련하는 것이 필수다.

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다