-
강력한 봇 차단 문제로 개인 사이트가 과도한 트래픽에 시달림
-
대기업의 무분별한 데이터 수집이 자가 서버의 자원 고갈 문제를 유발함
-
로그 분석 도구(lnav, goaccess)와 Nginx 차단 규칙, Fail2Ban을 조합해 효과적으로 악성 트래픽을 감지 및 자동 차단함
- 정교한 방화벽 규칙과 자동화를 통해 수백 개의 IP를 즉시 차단하며 정상적인 방문자는 방어로부터 보호함
- 이와 같은 수단을 도입해 서버 안정성을 회복하고, 리소스가 AI 데이터 학습 등에 무단 활용되는 것을 억제함
서론: 내 작은 서버에 쏟아진 봇 트래픽
- 최근 개인적으로 운영하는 lambdacreate 블로그 및 여러 서비스에 정체불명의 대량 트래픽이 급증함
-
Archive.org과 같은 합법적 서비스는 환영하지만, Amazon, Facebook, OpenAI 등 대기업의 무분별한 데이터 크롤링이 사이트에 피해를 줌
- AI 모형 학습 등으로 인한 데이터 수집 수요가 높아지면서 이런 현상이 더욱 심각해짐
- 이런 상황에서 진짜 독자(사람) 대신, 주로 대량의 봇 트래픽에 시달림
문제의 확인: 모니터링 툴을 통한 트래픽 폭증 진단
-
Zabbix, Loki 등 모니터링 툴을 사용해 서버 자원 소모 상황을 분석함
- Gitea 인스턴스가 하루에 20~30GB에 달하는 데이터 증가 현상, 각종 CPU/메모리 경고 발생
- nginx 트래픽 분석 결과, 한 달 평균 8req/s → 순간적으로 20req/s 이상까지 급증함
- 트래픽은 대규모이진 않으나 평소보다 10배 가까이 증가해 자원 고갈을 유발함
공격 원인 분석: 로그 파일 심층 분석
-
lnav와 goaccess를 이용하여 nginx access 로그를 SQL로 분석함
- 방문자 IP, UserAgent, Referrer 등 패턴 파악
- 결과적으로, 특정 서비스나 커뮤니티발 유입이 아니라 특정 IP 대역에서 대량 크롤링 발생
- UserAgent에 Amazonbot, OpenAI, Applebot, Facebook 등 명시 혹은 위조된 값 다수 발견
- 이로 인해 실제 서비스 이용에 지장을 받자 강력한 차단 정책 필요성 대두됨
해결책: Nginx, Fail2Ban 등 여러 방어 계층의 결합 적용
-
Nginx map을 이용해 악성 UserAgent 즉시 403 반환, rate limit(방문 속도 제한) 도입
- 신규·미탐지 봇까지도 웹 요청 빈도를 낮춤으로써 서버 부담 최소화
-
403 발생 로그를 기반으로 goaccess, lnav로 새로운 악성 IP와 UserAgent 탐지
- 자동화 보안 도구 Fail2Ban을 통해 403 응답 과다 발생 IP를 24시간 자동 차단
- 실제 리소스 사용률이 상당 수준 정상화됨
- 앞으로 archive.org 등 정상 서비스에 대한 예외 규칙을 적용하고, 검색엔진 인덱싱은 허용하되 AI 훈련용 무분별한 크롤링은 계속 차단 계획
결론: 도구 조합의 힘과 개인 서비스 보안의 필요성
- 이런 일련의 다중 계층 방어책을 적용함으로써, 원활한 개인 블로그 운영과 서비스 접근성 복구
- 다수의 작은 시스템 관리 및 자동화 도구 활용이 개인 서버 보안에 효과적임을 확인함
- 성장하는 AI 학습 수요로 인해 개인 서버까지 무분별하게 크롤링되는 환경에서는, 적극적인 차단과 관리 자동화가 필수적임