Web HostingOS

[AWS LAMP] 크롤링 즉시 차단 방법

AWS Lightsail 방화벽은 기본적으로 ‘허용(Allow)’ 규칙만 추가할 수 있고, 특정 IP만 콕 집어 차단하는 ‘거부(Deny/DROP)’ 기능이 없습니다. 제가 이전 답변에서 혼동을 드려 정말 죄송합니다. 올려주신 화면처럼 Lightsail 웹 콘솔에서는 특정 IP를 수동으로 블랙리스트에 등록할 수 없습니다.

따라서 Lightsail 환경에서는 웹 콘솔이 아닌 인스턴스 내부(SSH)에서 직접 방화벽 명령어를 입력하여 크롤러를 차단해야 합니다.

방법 1. 인스턴스 내부 방화벽(iptables)으로 즉시 차단하기 (추천)

SSH 터미널창을 열고 아래 명령어를 한 줄씩 복사해서 붙여넣기(Enter) 하시면 서버 단에서 즉시 접근이 거부됩니다.

bash

# 1. 문제의 크롤러 IP 2개를 즉시 차단합니다.
sudo iptables -I INPUT -s 122.136.188.132 -j DROP
sudo iptables -I INPUT -s 55.21.44.205 -j DROP

# 2. 방화벽 규칙이 잘 적용되었는지 목록을 확인합니다.
sudo iptables -L -v -n

  • 효과: 이렇게 하면 아파치(Apache) 서버까지 요청이 도달하지 않고 리눅스 커널 수준에서 트래픽을 완전히 버리기 때문에 서버 부하가 즉시 사라집니다.
  • 참고: iptables 명령어는 서버를 재부팅하면 초기화되므로, 우선 급한 불을 끄신 뒤 아래 ‘방법 2’를 병행하시는 것을 추천합니다.



방법 2. Bitnami Apache 설정에서 IP 영구 차단하기

서버가 재부팅되어도 계속 차단 상태를 유지할 수 있도록 Bitnami Apache 설정 파일에 직접 거부 규칙을 넣는 방법입니다.

  1. SSH 터미널에서 아래 명령어를 입력해 비트나미 공통 설정 파일을 엽니다.
  2. sudo nano /opt/bitnami/apache/conf/vhosts/htaccess/default-htaccess.conf
  3. 파일의 가장 맨 위에 아래 내용을 그대로 복사해서 붙여넣습니다.
  4. <RequireAll>
    Require all granted
    Require not ip 122.136.188.132
    Require not ip 추가할 IP
    </RequireAll>
  5. Ctrl + O (저장) -> Enter -> Ctrl + X (종료)를 눌러 창을 빠져나옵니다.
  6. 수정한 아파치 설정을 적용하기 위해 서버를 재시작합니다.
    sudo /opt/bitnami/ctlscript.sh restart apache

💡 근본적인 해결책 권장

현재 로그에 찍힌 크롤러는 단순한 데이터 수집이 아니라, 존재하지 않는 다양한 주소를 무작위로 쑤셔보며 웹 사이트의 취약점을 탐색하는 악성 스캔 공격을 수행하고 있습니다. 오늘 이 IP들을 막아도 내일 다른 IP로 또 들어올 가능성이 매우 높습니다.

Lightsail 인스턴스 앞단에 Cloudflare(무료 플랜)를 연결하시면, 이러한 비정상적인 봇 트래픽을 알아서 감지하고 자동으로 차단(CAPTCHA 인증 요구)해 주므로 매번 IP를 수동으로 막지 않아도 됩니다.

[aws lamp] 외부 서비스나 API에 의존하지 않고 서버 안에서 100% 자급자족하는 자체 PHP 이미지 캡차(captcha) 구현 방법 예제

Hi, I’m 관리자