
개발을 위한 테스트 서버를 AWS에 올린 후,
아무에게도 주소를 안 알려줘도 며칠만 지나면
access_log에 낯선 IP들이 잔뜩 찍혀있습니다.
바로 자동으로 인터넷 전체를 훑고 다니는 스캐너 봇입니다.
이 녀석들이 하는 일은 단순합니다.
취약점 경로들을 무작위로 두드려보고, 뭐 하나라도 열려있으면
그때부터 진짜 공격을 시작합니다.
문제는 이게 매일, 매시간 반복된다는 것이죠.
그래서 매일 새벽 자동으로 로그를 분석하고 차단하는 시스템을 만들어 보았습니다.
1. Apache Access Log 확인
아래 같은 요청이 끊임없이 들어옵니다.
전부 정상적인 방문자라면 절대 요청할 일이 없는 경로들입니다.
GET /.git/config HTTP/1.1 → 배포 실수로 .git이 열려있는지 탐색
GET /.env HTTP/1.1 → DB 비밀번호 등이 담긴 환경변수 파일 탐색
GET /wp-login.php HTTP/1.1 → 워드프레스 관리자 로그인 무차별 대입
GET /phpmyadmin/index.php HTTP/1.1 → DB 관리툴이 열려있는지 탐색
GET /xmlrpc.php HTTP/1.1 → 워드프레스 취약점 공격 경로
GET /actuator/env HTTP/1.1 → 스프링(Java) 서버 설정 정보 유출 시도
GET /vendor/phpunit/... → 개발용 테스트 도구 취약점 악용 시도
일반 사용자는 이런 주소를 칠 일이 절대 없습니다.
이 패턴에 걸리는 IP는 스캐너나 공격 시도라고 봐도 됩니다.
보통의 사용자는 걸리지 않도록 차단 규칙은 정상적인 사용으로는 절대 나올 수 없는 패턴만 정확히 골라내야 합니다.
2. 사용도구

제가 운영하는 4대 서버(AWS Lightsail, LAMP 스택)은 아래와 같이 동작합니다.
① 매일 새벽 4시, 크론으로 스크립트 실행
0 4 * * * root /usr/local/sbin/block-scanners.sh
② 24시간 이내 access_log를 훑어서 공격 패턴만 매칭
grep -Ei '.git/|/.env|wp-login.php|phpmyadmin|xmlrpc.php|/actuator/' access_log
| awk '{print $1}' | sort -u
③ 매칭된 IP를 iptables로 차단하고, 재부팅해도 유지되도록 저장
iptables -A INPUT -s <공격자IP> -j DROP
netfilter-persistent save
④ SSH 무차별 대입 공격은 별도로 fail2ban이 담당
위 스크립트는 “웹 요청 패턴” 기반이고, SSH 로그인 시도 자체를 막는 건 fail2ban이라는 별도 도구를 씁니다. 실패한 로그인이 짧은 시간에 여러 번 반복되면 그 IP를 일정 시간(1시간~최대 1주일까지 누적) 자동 차단합니다.
3. 주의! 관리자 IP 차단 막기
의외로 많이 겪는 실수 하나, 보안 점검을 한다고 관리자 본인이 .git이나 .env 같은 경로에 직접 curl을 날려보는 순간, 똑같은 패턴에 걸려서 본인이 차단당할 수 있습니다.
그래서 화이트리스트에 관리자 IP를 미리 등록해두는 게 필수입니다.
정리
- 스캐너 봇은 광고 안 해도 매일 찾아옵니다
- 차단 기준은 “정상 사용으로는 나올 수 없는 패턴”만 정확히 막기
- 로그 분석 → iptables 차단 → 영구 저장을 매일 자동으로 돌리기
- SSH는 fail2ban, 웹 요청은 자체 스크립트로 역할을 나누기
- 관리자 본인 IP는 반드시 화이트리스트에 먼저 등록할 것
이 정도 자동화는 한 번 만들어두면 그 다음부턴 신경 쓸 일이 거의 없습니다.
필요하면 작업 결과를 메일로 받아보는 것도 좋습니다.
끝!