중국의 유해 트래픽을 차단하다

인터넷에는 유해한 트래픽이 넘쳐난다. 그 중에서도 중국에서 다른 나라로 유입되는 트래픽은 유별나게도 유해한 트래픽이 많다. 우리나라로 유입되는 다양한 트래픽도 대부분 유해한 트래픽이라 해도 과언이 아니다. 그리고 그런 중국발 유해 트래픽은 필자의 블로그로도 유입된다. 그런데 최근에 갑자기 그 트래픽이 많아지기 시작했다.

워드프레스 블로그의 방문자 로그 분석

필자는 다음화면과 같이 방문자의 로그를 로그 수집서버에 수집하여 종종 분석하고 있다. 로그는 다음 화면과 같이 시간, 글제목, 글URL, IP, Referer 주소, 플랫폼의 순서로 로그가 기록된다.

블로그 방문자 로그
블로그 방문자 로그

그런데 최근, 앞 화면과 같이 /tag 주소에 유입되는 트래픽이 많아졌다. 그리고 그 트래픽들은 모두 Referer 주소가 없었다. 도대체 이 IP 주소가 어디인지 확인해보니 일반 사용자 PC나 모바일의 IP 주소가 아닌 중국의 베이징과 싱가포르, 홍콩 그리고 멕시코에 있는 화웨이와 텐센트 클라우드에 할당된 IP 주소들이었다.

홍콩의 화웨이 클라우드 IP
홍콩의 화웨이 클라우드 IP

이전까지는 이런 트래픽만 잡아먹는 접근을 차단하기 위해 차단할 IP를 .htaccess 파일에 등록하여 차단하고 있었는데… 이 방법으로는 답이 보이지 않았다.

Cloudflare의 WAF를 적용하여 중국 IP 차단하기

인터넷 세상에도 매너란게 있다. 특히 다른 웹사이트에 접근하는 프로그램을 개발하는 개발자들과 운영자들도 지켜야할 매너가 있다. 예를 들자면 사람이 아닌 자동화된 도구를 통해 다른 웹사이트를 방문하여 컨텐츠를 크롤링 할 때는 웹서버에 기록되는 로그의 User-Agent 정보에 자동화된 도구를 통한 방문임을 알 수 있도록 누구의 bot, crawler인지를 식별할 수 있는 정보를 남기자는 약속이 있다. 그리고 방문하는 봇이나 크롤러를 운영하는 조직의 이름과 홈페이지 심지어 이메일 주소를 남기기도 한다. 그래야 봇이나 크롤러의 방문을 거절할 수 있기 때문이다. 그리고 대부분의 사업자들은 이 약속을 지킨다.

하지만 유독 중국발 봇이나 크롤러 들은 대부분 이런 매너를 지키지 않는다. 중국에서 운영하는 텐센트, 화웨이 클라우드에서 방문하는 이 중국발 크롤러는 Referer 주소와 User Agent에 관련 정보가 없고 그냥 Windows 또는 MacOS라고 거짓 정보만 담고 있었다. 아마도 AI를 학습시키기 위한 컨텐츠들을 무작위로 방문해 크롤링해가는 듯 싶다. 운영자 입장에서는 정말 짜증을 유발하는 봇과 크롤러들이다.

하지만 이런 단순한 컨텐츠 수집 목적이 아닐수도 있다. 존재하는 태그와 존재하지 않는 태그를 통해 접근을 시도하여 에러가 발생하는 경우 워드프레스 CMS 자체 또는 테마의 불완전한 에러처리를 노리는 경우일 수도 있다. 필자의 블로그는 얼마 전 바이브 코딩을 통해 직접 제작한 테마를 설치하여 사용하고 있기도 하다.

이런 저런 이유로 인해 개인적으로는 Cloudflare를 사용하고 싶지는 않았다. 그리고 직접 보안에 필요한 조치들을 하고 있었다. 그러나 .htaccess나 iptable을 사용하여 이런 무례하고 위험한 트래픽을 차단하는 것 자체는 가능하지만 너무 많은 시간과 노력을 필요로 한다. 그래서 할 수 없이 Cloudflare의 WAF를 사용하기로 했다. 사실 Cloudflare의 무료 플랜을 적용하는 것은 30분도 채 걸리지 않는 쉬운 작업이다. 다만 적용 후 Custom Security Rule을 만드는 것이 조금 귀찮을 뿐이다.

클라우드플레어에 Custom Security Rule 만들기

클라우드플레어에 도메인을 등록하고 도메인을 구입한 곳에서 네임서버를 클라우드플레어의 네임서버로 변경한 다음 할일은 바로 Custom Rule을 만들어 등록하는 것이다. 클라우드플레어의 무료 플랜에서는 5개까지의 Custom Rule을 만들어 등록할 수 있다.

방문자의 IP 주소가 중국, 홍콩, 싱가폴이면서 Referer 주소가 없는 트래픽을 차단하는 Custom Rule을 만드는 것은 매우 간단하다.

Cloudflare custom security rule
Cloudflare custom security rule

Web Firewall에 추가한 Security Rule은 다음과 같은 룰이다.

먼저 룰의 이름은 “Block_China_No_Referer” 이다. 이건 뭐 그냥 룰의 내용을 알 수 있는 이름일 뿐이다.

조건(When incomming requests match…)의 Field에는 국가(Country)를 “is in” 오퍼레이터를 사용해서 IP가 중국, 홍콩, 싱가폴인지를 확인한다. 그리고 “And” 버튼을 누르면 And 조건으로 엮을 다음 조건이 추가되는데 여기에는 Field에 “Referer”를 선택하고 Operator는 “equals”를 선택한 다음 Value는 비워둔다. 즉 Referer가 없는 경우의 조건이 추가되는 것이다.
정리하면 중국, 홍콩, 싱가폴에서 들어오는 방문자 중 Referer가 비어있는 트래픽을 화면 아래의 Then take action…에 정의된 대로 Block(차단)하는 것이다.

이 조건을 추가하면 다음과 같이 Security Rule이 등록된다.

Cloudflare security rules
Cloudflare security rules

하나의 룰이 추가된 것을 확인할 수 있다. 앞으로 4개의 룰을 추가로 만들어 적용할 수 있다.

차단 로그 확인

Security Rule을 등록하고 시간이 지나면 해당 룰에 의해 차단된 로그를 확인할 수 있다.

Security Rule에 의해 차단된 로그
Security Rule에 의해 차단된 로그

중국, 홍콩 IP 중에서 Referer 주소가 없는 트래픽이 차단된 것을 확인할 수 있디.

“중국의 유해 트래픽을 차단하다”에 대한 4개 응답

  1. blogger.pe.kr 의 네임서버는 가이아로 확인되는데
    어떻게 Cloudflare 의 custom security rule 을 사용하신거죠?

    • 아… 몇일간 클라우드플레어를 사용하다가 다시 원복했습니다. 아무래도 룰5개의 제약과 속도가 조금 문제가 됩니다. 지금은 DNS를 다시 원복하고 아파치 웹서버의 apache2.conf에서 차단룰을 적용한 다음 access.log 파일을 계속 모니터링하고 있습니다. 아무래도 클라우드 플레어를 계속 사용하지는 못할 듯 합니다.

    • 맞아요. 꽤 오래된 취미죠. 그냥 나중에 찾아보기 쉽게 끄적이는 곳이었는데 어느새 이렇게 되어 버렸습니다. 즐거운 하루 보내세요.

답글 남기기

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