CloudFlare를 통해 Discourse에서 스크레이퍼/봇의 IP 주소를 확인(및 차단)하는 방법?

13,000개 이상의 크롤러가 감지되고 데이터베이스 트래픽이 급증하는 상황을 겪고 있습니다. 누군가 분명히 우리 포럼을 스크래핑하고 있지만, CloudFlare DNS를 통해 접근하고 있어 해당 IP를 파악하고 대응 조치를 취하는 방법에 대해 확신이 서지 않습니다.

이 문제를 해결할 방법에 대한 의견을 주실 수 있을까요?

공격적인 네트워크 활동을 감지하고, 해당 트래픽에 대해 속도 제한을 걸거나 일정 기간 동안 접근을 차단하는 자동화된 속도 제한 솔루션을 구축하고 싶습니다.

yml 설정 파일에 Cloudflare 템플릿이 있나요?

네, 이 내용은 /var/discourse/containers/app.yml에 있습니다:

  - "templates/cloudflare.template.yml"

참고로, 현재 정말 벽에 부딪힌 상태입니다. 같은 사이트에서 다른 데이터베이스 서버를 사용하는데, 데이터베이스 접근량이 꾸준히 13~20Mbps를 유지하고 있습니다. 크롤러 수가 폭증할 때 급증하기 시작해 거의 2주 동안 안정되지 않고 있습니다. 서버 제어판에서는 이 시점에 트래픽이 터무니없는 수준까지 급증했으며, 이 수준의 지속적인 접근이 계속되고 있어 이대로라면 서버의 대역폭이 고갈될 지경에 이르렀다고 표시하고 있습니다.

요율 제한 템플릿이 포함되어 있나요? 로그에 올바른 IP 주소가 표시되는지 확인해 보셨나요? (Cloudflare IP가 아닌 실제 IP)

저도 app.yml에 이 항목이 있습니다:

  - "templates/web.ratelimited.template.yml"

사용자의 올바른 IP 주소도 확인됩니다. 말씀하신 로그가 정확히 무엇을 의미하는지 잘 모르겠습니다. 음.

기억하시다시피, 저는 현재 대역폭 소비를 줄이기 위해 모든 것을 내부 프라이빗 IP 주소로 변경하는 방법을 시도해 보았습니다. 이렇게 하면 적어도 큰 청구서가 나오는 것을 막을 수 있을 것으로 생각했기 때문입니다.

여기서 또 다른 특이한 점을 발견했습니다. 월간 전송량 할당량을 빠르게 소진하지 않도록 데이터베이스 연결을 공개 IP에서 프라이빗 IP로 변경했습니다. 데이터베이스 서버에서는 Discourse Docker 서버로부터 프라이빗 IP 주소를 통한 연결만 이루어질 것으로 예상했습니다. 실제로 로컬 프라이빗 IP에서 오는 트래픽은 확인되지만, 여전히 공개 IP에서 과도한 양의 트래픽이 유입되고 있어 월간 할당량이 빠르게 소진되고 있습니다.

Discourse Docker 서버에서 데이터베이스 서버의 공개 IP 주소와 호스트 이름을 찾아보았지만 어디에서도 찾을 수 없습니다. 앱(./launcher enter app)으로 들어가서 env | grep DB를 실행해도 LAN에서 사용되는 올바른 프라이빗 IP 주소가 표시됩니다. 파일시스템을 grep으로 검색해도 예상되는 발생 위치를 찾을 수 없습니다.

Discourse나 Docker 이미지에서 여전히 잘못된 IP에 액세스하고 있는 원인에 대해 어떤 생각이 있으신가요? Discourse 서버에서 이 모든 공개 IP 트래픽이 어디서 발생하고 있는지 도무지 파악이 되지 않습니다.