Nginx & 방화벽(UFW) 악성 봇 완벽 차단 방법

서버를 운영하다 보면 meta-externalagent(페이스북), Amzn-SearchBot(아마존) 같은 봇들이 검색창에 수만 번의 쿼리를 날려 트래픽을 고갈시키는 경우가 있습니다. 오늘 실전 경험을 바탕으로, 트래픽 도둑은 막고 검색 엔진 노출은 유지하는 보안 설정을 정리합니다.

📋 핵심 요약

  • 로그 분석: 어떤 IP가 어느 사이트를 공격하는지 파악
  • Nginx 차단: 봇의 ‘검색 요청’만 정교하게 필터링
  • 방화벽(UFW): 악성 IP 대역을 서버 입구에서 즉시 차단
  • 순서 보정: 차단 규칙을 최상단으로 올려 우선순위 확보

1. 실시간 로그 모니터링 및 범인 색출

가장 먼저 “누가” 공격하는지 알아야 합니다. 아래 명령어들을 터미널에 입력하여 분석하세요.

# [모니터링] 특정 도메인 접속 기록만 실시간 감시
tail -f /var/log/nginx/access.log | grep “도메인명”# [IP 순위] 현재 가장 접속량이 많은 IP TOP 10 (도메인 로그 설정 시)
awk ‘{print $2}’ /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -n 10

# [공격 대상] 10개 사이트 중 가장 공격을 많이 받는 사이트 순위
awk ‘{print $1}’ /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -n 10

2. Nginx: 봇의 ‘검색 기능’만 정교하게 차단

일반 사용자의 검색은 허용하고, 봇이 search= 파라미터로 트래픽을 유발할 때만 403 에러로 튕겨냅니다.

# 사이트 설정 파일(/etc/nginx/sites-available/도메인) server 블록 상단 추가# 1. 차단할 악성 봇 리스트 정의
if ($http_user_agent ~* (meta-externalagent|SERankingBacklinksBot|Amzn-SearchBot|AhrefsBot|ChatGPT-User|Bytespider)) {
set $is_bad_bot “Y”;
}

# 2. 검색(?search=) 파라미터 확인
if ($args ~* “search=”) {
set $is_search “S”;
}

# 3. 봇이면서 검색 시도 시 403 차단
if (“$is_bad_bot$is_search” = “YS”) {
access_log off; # 차단 로그 중단 시 활성화
return 403;
}

3. 방화벽(UFW) IP 대역 ‘입구 컷’

Nginx까지 신호가 오지 않도록 서버 입구에서 물리적으로 막습니다. 가장 효율적인 방법입니다.

# 페이스북 봇 대역(57.141.14.xxx) 전체 차단 (최상단 우선순위 삽입)
sudo ufw insert 1 deny from 57.141.14.0/24# 악성 단일 IP 차단
sudo ufw insert 1 deny from 37.27.55.110

# 설정 적용 및 확인
sudo ufw reload
sudo ufw status numbered

⚠️ 규칙의 순서가 핵심!
UFW는 위에서부터 규칙을 읽습니다. ALLOW Anywhere(80, 443포트)보다 DENY(차단) 규칙이 반드시 번호가 빨라야(상단) 합니다. insert 1 명령어를 사용하는 이유입니다.

4. 주의: 차단 금지 ‘착한 봇’ 리스트

검색 노출을 위해 네이버, 구글, 다음 봇은 상태코드 200(정상)을 유지해야 합니다.

봇 이름 포털 역할
Yeti Naver 네이버 웹사이트 수집
Daumoa Daum/Kakao 다음/카카오톡 미리보기
Googlebot Google 글로벌 검색 노출

✅ 최종 점검 방법

설정 후 tail -f 로그를 확인했을 때, 악성 봇의 요청 끝이 403 162(거절 및 저용량)로 바뀌어 있거나 아예 로그가 사라졌다면 완벽하게 방어에 성공한 것입니다!

댓글 달기

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

위로 스크롤