크롤러, 봇들의 공격 대비하기 - jinkshower/galmanhae GitHub Wiki

크롤러와 악성 봇의 요청

image

서버에 로깅을 적용한 이후 로그 파일 검사 중 악성 봇과 크롤러가 주기적으로 민감 정보를 캐내기 위한 요청을 보내고 있음을 감지함.

애플리케이션 내부에서 이를 예외 처리하고 있었지만 주기적, 지속적으로 요청을 보내고 있기 때문에 로그를 더럽히고 서버의 쓰레드를 낭비하고 있음.

  • 해결

현재 서버는 nginx를 80포트로 두고 요청을 애플리케이션 포트로 포워딩 하고 있음. nginx는 네트워크 애플리케이션 계층까지 http 요청을 처리할 수 있기 때문에 nginx에서 앞서 이러한 url요청을 처리해서 애플리케이션으로 포워딩하지 않으면 애플리케이션의 자원을 낭비하지 않아도 될 것이라 생각함.

  1. 정규식을 통해 서비스에 필요한 엔드포인트만 화이트리스트로 작성(nginx가 사용하는 conf 문법에 맞게 작성)
map $uri $allowed {
    default 0;  # 기본값은 허용하지 않음

    # 루트 URL 허용
    ~^/$ 1;
    
    //이후 서버 api에 맞는 엔드포인트 개방
}
  1. nginx의 서버 설정에 해당 파일을 include하고 서버 설정에서는
if ($allowed = 0) {
     return 403;
}

이라는 간단한 분기문처리로 지정한 엔드포인트 외에는 애플리케이션까지 포워딩 되지 않게 함. -> 화이트 리스트를 따로 관리하고 있기 때문에 이후 앤드포인트가 늘어날 시 해당 파일만 관리하면 됨.

  • 결과

image

이와 같은 요청을 보내도 서버의 로그에는 남지 않고,

image

nginx가 403을 return하는 것을 확인할 수 있음.