본문 바로가기

From Others/블로그와 SEO

블로그 디펜스 : 악성 방문자 IP 차단하기

이번 포스팅에서는 특정 IP 혹은 IP 대역으로부터 블로그에 접속하지 못하도록 차단하는 방법에 대해 짚어보겠습니다. 블로그로 들어오는 트래픽이 많을수록 좋기는 하지만, 그 중에는 악의적인 의도를 가지고 접근하는 사람들도 있습니다. 따라서 동일한 IP 또는 대역에서 지속적으로 애드센스 무효클릭 공격 등의 어그로를 끄는 것이 발견되면, 접근을 차단할 필요가 있죠.

 

반응형

 

여기서는 티스토리 블로그를 가지고 설명합니다만, HTML을 수정할 수 있는 블로그 플랫폼이라면 대부분 적용 가능합니다. 물론 이것이 완벽하게 접근을 차단하는 것은 아니고 우회할 방법이 있기는 합니다만, 번거로움을 감수하면서까지 환영받지도 못하는 블로그에 굳이 들어가려고 하는 사람은 일반적으로 없죠. 자존심이 허락하지 않을 겁니다.

 

추가로 짚고 넘어갈 점이 있다면, 차단할 IP를 미리 알고 있어야 한다는 점입니다. 그러기 위해서는 블로그에 접속하는 사람들의 IP를 수집해야 할 필요가 있는데요. 구글 애널리틱스와 태그매니저를 사용하는 방법이 있습니다. 이들을 통해 IP를 추적하는 방법에 대해서는 다음 포스팅에 더 자세하게 소개되어 있습니다.

 

 

구글 애널리틱스와 태그매니저로 IP 추적하기

이번 포스팅에서는 구글 애널리틱스와 태그매니저를 연동해서 블로그 방문자의 페이지뷰와 IP를 추적하는 방법에 대해서 짚어보겠습니다. 특히 애드센스를 이용해서 광고수익을 도모하는 블로

swstar.tistory.com

 

방문자의 IP를 추적할 수 있는 또다른 트래픽 분석 도구로서 스탯카운터 (statcounter)가 있습니다. 정식 버전은 매달 일정한 금액을 지불해야 하는 유료 서비스지만, 무료 버전도 있습니다. 무료 버전은 가장 최근의 접속 기록 500개만 보관되기는 하지만, 트래픽이 많지 않은 소규모 블로그에서는 나쁘지 않은 옵션이죠. 스탯카운터를 블로그에 설치하고 사용하는 방법에 대해 더 자세한 내용이 궁금하신 분들은 다음 포스팅이 큰 도움이 되리라 생각합니다.

 

 

트래픽 분석 도구 스탯카운터 설치 및 사용법

이번 포스팅에서는 웹 트래픽 분석 도구 중의 하나인 스탯카운터 (statcounter)를 블로그에 설치하고 사용하는 방법에 대해서 간략히 짚어보겠습니다. 스탯카운터를 사용하면 구글 애널리틱스의

swstar.tistory.com

 

이제 IP 차단을 위한 설정에 대해 살펴봅시다. 스킨 편집의 HTML 수정 모드로 들어가서, 다음 스크립트를 <head></head> 태그 사이에 붙여넣습니다.

 

HTML 코드 다운로드

 

더보기
<!-- IP 차단 스크립트 시작 -->
<script>
(function () {
  function resp() {
  var arrUserIP = ['차단IP.특정.1','차단IP.특정.2'];
  var arrSetsIP = ['차단IP.대역.1','차단IP.대역.2'];
  var json = JSON.parse(this.responseText);
  for (var i = 0; i < arrUserIP.length; i++) {
    if (json.ip == arrUserIP[i]) {
      window.location.replace("https://www.tistory.com/404");
    }
  }
  for (var i = 0; i < arrSetsIP.length; i++) {
    if (json.ip.startsWith(arrSetsIP[i])) {
      alert("뻐큐머겅");
      window.location.replace("https://www.tistory.com/404");
    }
  }
}

var request = new XMLHttpRequest();
request.addEventListener("load", resp);
request.open("GET", 'https://api64.ipify.org?format=json');
request.send();
}());
</script>
<!-- IP 차단 스크립트 끝 -->

 

이 IP 차단 스크립트는 특정 IP 뿐만 아니라 IP 대역까지 차단할 수 있게 만들었습니다. 맨 위에 있는 두 개의 배열에 차단하고자 하는 IP 및 대역을 저장합니다. arrUserIP는 특정 IP를 차단할 때 사용하고,  arrSetsIP는 IP 대역을 차단할 때 사용하면 되겠습니다. 여러 개의 IP를 차단할 때는 쉼표 (,)로 구분하고 각 IP를 작은따옴표 (')안에 입력해 넣으면 됩니다.

 

IP 대역을 차단하는 역할을 하는 반복문은 두 번째에 있는데요. 앞에서 언급한 arrSetsIP에 저장된 문자열로 시작하는 IP들을 전부 차단하는 기능을 가지고 있습니다. 예를 들어서 '123.45.67'이라는 문자열을 집어넣으면 이렇게 시작되는 IP가 전부 차단됩니다.

 

차단되었을 때 보여주고 싶은 메시지가 있다면 이를 매개변수로 해서 alert 함수를 호출하면 됩니다. 그 다음에는 튕긴 사람을 모셔다줄 주소의 URL을 매개변수로 해서 window.location.replace 함수를 호출하면 되겠습니다.

 

이 스크립트에서는 ipify.org라는 사이트로부터 IP 주소를 끌어오는 방식을 사용하고 있으며, IPv6 주소가 있을때는 이를 사용하고 그렇지 않으면 IPv4 주소를 사용합니다. 그렇기 때문에 구글 태그매니저에서 IP 추적설정을 할 때도 api64.ipify.org를 사용해야 합니다. 반면에 스탯카운터에서는 IPv4 주소를 보여주기 때문에, 스탯카운터로 IP를 추적하는 경우에는 api.ipify.org를 대신 사용하면 되겠습니다.

 

이렇게 차단된 IP로부터 접속을 하게되면, 앞에서 입력했던 안내메시지가 출력되고 튕기게 됩니다.

 

screenshot of Safari browser&#44; showing a message after being blocked by Tistory blog

 

IP 대역을 차단하는 것은 개별 IP를 차단하는 것에 비해 더 강력한 기능이긴 하지만, 그만큼 신중하게 사용해야 합니다. 일반적으로 통신사를 통해서 개설되는 개인용 인터넷 회선들은 여러 명이 동일한 IP 대역을 공유하며, 시간이 지나면 다른 IP가 할당되기도 합니다. 이런 경우에 함부로 대역을 차단하면 어그로꾼이 아닌 사람이 차단되는 불상사가 발생할 수 있죠. 물론 그런거 무시하고 전부 차단해버리는 nuclear option도 있기는 합니다.

 

이렇게 써 놨다고 여기다 대고 무효클릭 공격 하시는 분은 한번 대놓고 어그로를 끌어보겠다는 생각이신 건가요?

 

screenshot of Google Analytics&#44; showing invalid AdSense clicks from IP 175.127.150.40 at 10PM&#44; Nov 27&#44; 2021

 

screenshot of StatCounter&#44; tracking a visitor with IP 175.127.150.40 at 10PM&#44; Nov 27&#44; 2021

 

그래봤자 본인의 미개함을 구글에 알리는 꼴 밖에 되지 않아요. 구글의 알고리즘은 누가 찌질이인지를 다 압니다. 그리고 이렇게 고의적으로 무효클릭 하는거 법정미팅 갈 수 있는 사안인만큼, 서로 불미스러운 일 생기지 않도록 조심했으면 좋겠습니다.

 

따라서 누가 회사 전산망으로 들어와서 깽판을 놓거나, 동일한 IP 대역에서 오랫동안 비정상적인 트래픽이 발생하는 등의 경우에 대역 차단을 고려해야 합니다. 이런 상황은 매우 드물게 일어나지만, 가능성이 전혀 없지도 않습니다. 백문이 불여일견이니만큼 다음 예시를 보십시다.

 

screenshot of Google Analytics&#44; showing abnormal traffic from IP address 121.135.181.41

 

screenshot of Google Analytics&#44; showing abnormal traffic from IP address 121.135.181.42

 

screenshot of Google Analytics&#44; showing abnormal traffic from IP address 121.135.181.43 and 121.135.181.44

 

screenshot of Google Analytics&#44; showing abnormal traffic from IP address 121.135.181.45

 

screenshot of Google Analytics&#44; showing abnormal traffic from IP address 121.135.181.46

 

요약하자면 121.135.181.41에서 121.135.181.46까지의 IP로 특정 포스팅에 집중적인 유입과 이탈을 반복했습니다. 구글 애널리틱스에서 일부만 캡쳐한 게 저 정도고, 한 달간 50번이 넘는 페이지뷰가 있었는데요. 이건 아무리 봐도 정상이 아니죠. 트래픽도 별로 없는 블로그에서 이러면 딱 걸리는 겁니다.

 

혹시나 해서 강조합니다만, 이 블로그에 여러번 재방문하는 것 자체를 문제삼는게 절대로 아닙니다. 단순히 관심이 있어서 들어온다고 보기에는 이상한 구석이 너무나도 많다는 것입니다. 대부분 유입이 세션시간 0초이탈률 100%를 기록했을 뿐만 아니라, 그렇게나 자주 들어와놓고 스크롤을 내려서 글을 읽은 기록조차 남아있지 않았습니다.

 

이 IP에서 최초의 유입이 시작된 게 9월 20일경인데 그때쯤 해서 강도높은 애드센스 무효클릭 공격을 받기도 했고, 다른 불미스러운 일련의 사건들도 있었습니다. 이를 종합해서 살펴본 결과, 불순한 의도를 가진 트래픽이라는 결론을 내린 겁니다. 물론 제 추측이 틀렸을 수도 있죠. 하지만 여기는 제 블로그니까 제가 원하는대로 운영할 권리가 있고, 이런걸로 스트레스 받지 않을 권리도 있습니다.

 

그래서 만약 121.135.181로 시작하는 IP들을 차단할 수 있게 설정을 해 두면, 앞의 예시에서 언급한 사람 또는 봇은 들어오기 난감할 겁니다. 저는 제 블로그의 컨텐츠에 대한 호기심으로 들어오는 분들을 환영하고, 제 블로그가 어떤 식으로든 도움이 되기를 바랍니다. 블로거의 노력을 무시한채 본인들 놀이터마냥 어뷰징을 하는 사람들을 차단하고자 할 뿐이죠.