카테고리
일상 컴퓨터

Wiki 크롤러 차단

오랫동안 운영해온 PhiLoSci Wiki의 걱정거리 중 하나는 트래픽 관리이다. 최근 몇 년 사이 크롤러들이 폭증하는 바람에 위키 웹서버가 툭하면 다운됐기 때문이다. 방문자가 많지 않은 소규모 웹사이트다보니, Google Cloud Platform의 Compute Engine 중 최소사양인 e2-micro (vCPU 2개, 메모리 1GB)로도 충분히 웹서버를 돌릴 수 있을 것 같았지만, 악성 크롤러를 막지 않는 한 일주일에 몇 번씩 서버를 재부팅하는 일이 반복됐다.

올해 초에는 시행착오 끝에 리눅스 아파치 서버의 규칙 기반 차단 방식을 알게 되었고, 봄에는 미디어위키의 확장프로그램인 CrawlerProtection을 이용해 로그인하지 않은 접속자의 특수 페이지 방문을 차단했다. 그러나 이런 방식은 여전히 한계가 있었고, 8월이 되자 다시 크롤러의 순간적인 폭주를 막지 못해 서버가 몇 차례 다운됐다.

결국 근본적인 해결책이 필요하다는 생각에, 웹서버의 진입 관문에 Cloudflare를 두기로 했다. Cloudflare는 도메인 주소(e.g., zolaist.org)를 웹서버의 IP 주소(e.g., 147.x.x.x)로 연결해 주는 네임서버 역할을 해주면서, 의심스러운 접속 시도를 앞쪽에서 검사하고 차단해 줌으로써, 내 웹서버의 부담을 줄여줄 수 있어 보였다.

그래도 처음 해보는 시도라 겁이 나서 미루고 있었는데, 결국 8월 17일 밤, 위키의 네임서버를 Cloudflare로 변경하고, Cloudflare를 경유하지 않는 웹서버 접속을 차단한 후, Cloudflare에 간단한 크롤러 대응 규칙을 입력했다. 그 직후, 웹서버의 트래픽은 극적으로 줄어들었다.

8월 17일 밤을 기점으로 트래픽과 CPU 사용량 모두 극적으로 줄어들었다.

Cloudflare에서는 크롤러로 의심되는 원천(해외)이나 접속 방식에 대해 곧장 차단(block)하는 방식뿐 아니라, 인간인지 봇인지를 확인하는 추가적인 확인 과정(challenge)도 제공한다. 이 덕분에 나는 좀더 그물을 넓게 치고서 크롤러를 막을 수 있는 대신, 정상적인 인간 방문자들도 가끔씩 아래와 같은 화면을 넘겨야 하는 불편을 겪게 됐을 것이다.

Cloudflare에서 제공하는 인간 확인 절차

Cloudflare라는 관문을 만든 이후, 크롤러 차단은 매우 성공적으로 보였다. 방문자가 정말 뚝 떨어졌기 때문이다. 하지만 8월 말, 내가 뭔가 잘못을 저질렀음을 깨달았다. 내 사이트의 검색 유입이 너무 적어진 것이었다. 적어도 너무 적었다. 혹시나 해서 구글에 대표적인 검색어를 몇 개 넣어봤는데, 아무리 해도 내 사이트가 검색에 뜨지 않았다.

원인은 내가 만든 과도한 크롤러 대응 규칙에 있었다. 해외 접속 시도에 대해 무조건 인간 여부를 확인하라는 규칙을 만들었었는데, 그게 구글봇과 같은 착한 크롤러들의 접속 시도까지 모조리 막아버린 것이었다. 적어도 인증된 크롤러들에 대해서는 Challenge 없이 통과를 시켜줬어야 했다. 이를 깨닫고서 ChatGPT의 조언을 받아 규칙을 수정하고 나니, 크롤러들이 조금씩 유입되었고 사이트의 검색 순위도 제자리로 돌아왔다.

8월 말, 인증된 크롤러의 유입을 허용하자, 크롤러들이 다시 들어오기 시작했다.

이후에도 크롤러 대응 규칙을 조정하는 데 몇 번의 시행착오가 있었지만, 지금은 꽤 안정화된 것 같다. 핵심은 악성 크롤러의 특징을 잡아 최대한 차단하면서도, 착한 크롤러는 통과시켜주는 적절한 균형에 있다.

그 결과는 대충 다음과 같다. 내 보잘것 없는 사이트에도 하루 대략 8만 번의 요청이 들어온다. 그중 악성 요청 6~7만 개는 차단하고, 정상적인 1만~1만 5천 개만 그 요청을 들어준다. 또 그중 상당수는 Cloudflare에서 저장해둔 캐시를 이용해 처리해 주고(Served by Cloudflare), 적은 일부만 내 서버에서 처리함으로써(Served by origin), 내 서버의 부담을 최소화한다.

그런데 위에서 허락한 요청들도 그 대부분은 검색 및 AI 회사들의 인증된 크롤러들이고, 사실 인간의 실질적인 요청은 200개도 안 된다. 아래처럼 말이다. 오늘 하루 방문자는 72, 페이지뷰는 143. 그 대부분의 방문자는 당연히 한국. (크롤러를 막기 전 대부분의 방문자는 미국, 중국, 인도네시아 등이었으니, 현재의 이런 결과 자체가 크롤러 차단이 잘 되고 있다는 증거가 된다.)

결론?

이런 조그만 구멍가게 하나 운영하는 것도 왜 이리 힘든지 모르겠다. 어쨌든 크롤러 접속 대응을 거의 마무리하면서, 9월부터 PhiLoSci Wiki의 회원가입을 허용했다. 회원 가입 후 이메일인증을 하고 나면 위키 편집이 가능하고, 기여자로 등업 신청도 가능하다. 관심 있는 분들의 회원 가입을 환영한다.

zolaist의 아바타

zolaist 제작

studying history and philosophy of science

댓글 남기기