
Cloudflare 무료 플랜 보안 규칙(제로 트러스트 접근 방식) - 소규모 웹사이트용
저는 오픈소스 BitcoinArt 프로젝트의 창립자인 **Aksana (5Ksana)**입니다. 제 남편 Aliaksandr (ALEX) Zasinets는 보안, 테스트, 오픈소스 도구를 담당하고 있습니다. Aliaksandr는 QA 자동화 엔지니어, 침투 테스터, 오픈소스 보안 연구원입니다. 그는 웹사이트 보안, Cloudflare 보호, WAF 규칙, DDoS 보호, 보안 헤더, 봇 보호, 그리고 악성 스캐너로부터의 보호를 연구합니다. Apple은 웹 서버의 보안 문제를 발견하고 신고한 Aliaksandr에게 감사를 표했습니다.
그는 Apple 보안 감사 명단에 등재되어 있습니다: https://support.apple.com/en-ug/102774
이 저장소 cloudflare-security-art는 Cloudflare를 사용하는 소규모 웹사이트, 아티스트, 크리에이터, 셀프 호스팅 프로젝트를 위한 무료 보안 가이드입니다. 이 프로젝트가 웹사이트를 보호하는 데 도움이 된다면, GitHub Sponsors를 통해 저희 오픈소스 작업을 후원해 주세요:
https://github.com/sponsors/buybitart
여러분의 후원은 저희가 Cloudflare 보안 규칙을 테스트하고, 이 가이드를 업데이트하고, 간단한 예제를 작성하고, 이 프로젝트를 무료로 유지하는 데 도움이 됩니다. 이 저장소가 도움이 되었다면 ⭐ 스타도 눌러주세요. 프로젝트 성장에 도움이 됩니다. 감사합니다! ❤️
이 가이드는 Cloudflare를 사용하여 웹사이트를 보호하는 데 도움이 됩니다. 방화벽 규칙, DDoS 보호, 보안 헤더, 봇 설정이 포함되어 있습니다.
포함 내용:
제 Cloudflare 규칙은:
AI 봇이 여러분의 콘텐츠를 복사하려고 합니다! AI가 어떻게 여러분의 예술을 훔치는가와 '대규모 절도': 수천 명의 아티스트가 AI 아트 경매 취소를 요구하다를 참고하세요.
"예술의 주요 목적 중 하나는 문화와 대화하는 것입니다. 의도치 않았더라도, 모든 예술 작품은 음식, 종교, 음악, 윤리, 시각 예술 등으로 형성된 창작자의 고유한 배경을 반영합니다.
고립된 환경에서 자라나 하루 16시간 동안 그림만 보여주고, 매주 그린 그림이 그 이미지들을 충분히 똑같이 따라 그리지 못하면 벌을 받는 아이를 상상해 보세요. 그 아이는 왜 그리는지 모릅니다—그저 모방할 뿐입니다. 창작하는 것이 아닙니다. 예술과 대화하는 것이 아닙니다.
컴퓨터는 더 단순합니다. 느끼지도, 반성하지도, 1920년대 재즈의 소리나 처음 워홀을 보았던 순간을 기억하지도 않습니다.
하지만 인간 예술가는 다릅니다. 그들은 경험, 감정, 의도를 지니고 있습니다. 과거에서 빌려와 현재와 섞고, 자신만의 목소리로 말합니다. 그것이 예술입니다. 그것이 차이입니다.
예술이 이윤을 위한 모방에 불과할 때, 그것은 공허합니다. 하지만 예술이 말을 걸 때—그것은 중요해집니다."
AI는 검색 엔진인 척하지만, 방문자를 데려오지 않습니다. 일부는 가짜 사용자 에이전트를 사용하기 때문에 기본 Cloudflare 설정으로는 막을 수 없습니다. 이 규칙은 기본적으로 모든 봇을 차단하고, 그다음 웹사이트가 색인되는 데 도움이 되는 유용한 봇만 허용합니다.
| 단계 | 설명 |
|---|---|
| STEP 1 – 웹 애플리케이션 방화벽 (WAF) 규칙 | 봇, 크롤러, 취약점 공격, 악성 요청을 차단합니다 (파트 1‑5). |
| STEP 2 – DDoS L7 보호 및 속도 제한 | Layer‑7 오버라이드와 속도 제한을 추가하여 플러드를 막습니다. |
| STEP 3 – 봇 관리 | Cloudflare 봇 설정을 구성하여 AI 및 원치 않는 봇을 차단합니다. |
| STEP 4 – 보안 헤더 | 사이트를 강화하기 위한 권장 HTTP 헤더를 설정합니다. |
[!IMPORTANT]
Security탭에서Bot Fight Mode기능을 비활성화하는 것도 권장합니다. 이 가이드는 이미 모든 원치 않는 봇과 AI 크롤러를 차단하면서, 다음과 같이 사이트 색인에 사용되는 중요하고 신뢰할 수 있는 봇만 허용합니다:
- bing
- slurp
- duckduckbot
- cloudflare 따라서 Bot Fight Mode를 활성화할 필요가 없으며, 활성화하면 이러한 허용된 봇을 방해하고 적절한 색인을 방해할 수 있습니다.
사용자 정의 WAF 규칙을 위해 다음 표현식을 Cloudflare 대시보드에 복사하세요.
대시보드에서 사용자 정의 규칙 만들기를 읽어보세요.
이 규칙은 각 요청을 검사하여 헤드리스 브라우저나 스캐너 같은 비어 있거나 이상한 User‑Agent 이름, "siteaudit"을 사용하는 특정 IP 그룹의 트래픽, ":80" 또는 ":443"이 포함된 Host 헤더, 잘못된 Cloudflare 쿠키, 검증된 검색 크롤러나 ACME 챌린지가 아닌 모든 Cloudflare client.bot, 그리고 "/robots.txt"를 요청하거나 실제 검색 봇 또는 ACME 검사에서 오지 않는 한 모든 HTTP/1.0 또는 HTTP/1.1 요청을 차단하여 유해한 자동화 웹 트래픽을 막습니다.
NOTE🔒 이 규칙은 모든 위협의 약 90%를 차단합니다. 애플리케이션에 도달하기 전에 유해한 봇 트래픽을 차단합니다.
Action: Block
(
(
http.user_agent eq ""
or http.user_agent eq " "
or http.user_agent eq "'"
or http.request.headers["user-agent"][0] eq ""
or lower(http.user_agent) contains "puppeteer"
or lower(http.user_agent) contains "phantomjs"
or lower(http.user_agent) contains "selenium"
or lower(http.user_agent) contains "slimerjs"
or lower(http.user_agent) contains "nightmare"
or lower(http.user_agent) contains "casperjs"
or lower(http.user_agent) contains "pyppeteer"
)
or (ip.src.asnum in {135061 23724 4808} and http.user_agent contains "siteaudit")
or (http.host contains ":80")
or (http.host contains ":443")
or (
http.cookie contains "cf_use_ob="
and not http.cookie contains "0"
and not http.cookie contains "80"
and not http.cookie contains "443"
and not cf.client.bot
)
or (
cf.client.bot
and not (
(
cf.verified_bot_category in {"Search Engine Crawler"}
and (
lower(http.user_agent) contains "google"
or lower(http.user_agent) contains "bing"
or lower(http.user_agent) contains "slurp"
or lower(http.user_agent) contains "duckduckbot"
or lower(http.user_agent) contains "cloudflare"
)
)
or cf.verified_bot_category in {"Page Preview"}
or lower(http.user_agent) contains "google-inspectiontool"
or lower(http.user_agent) contains "google-siteverification"
or lower(http.user_agent) contains "googlebot"
or lower(http.user_agent) contains "chrome-lighthouse"
or http.request.uri.path contains "acme-challenge"
or lower(http.user_agent) contains "adsbot-google"
or lower(http.user_agent) contains "google-adwords"
)
)
)
or
(
http.request.version in {"HTTP/1.0" "HTTP/1.1"}
and not (
cf.client.bot
or cf.verified_bot_category in {"Page Preview"}
or lower(http.user_agent) contains "google"
or lower(http.user_agent) contains "bing"
or lower(http.user_agent) contains "slurp"
or lower(http.user_agent) contains "duckduckbot"
or lower(http.user_agent) contains "cloudflare"
or lower(http.user_agent) contains "google-inspectiontool"
or lower(http.user_agent) contains "google-siteverification"
or lower(http.user_agent) contains "googlebot"
or lower(http.user_agent) contains "chrome-lighthouse"
or http.request.uri.path contains "acme-challenge"
or lower(http.user_agent) contains "adsbot-google"
or lower(http.user_agent) contains "google-adwords"
)
)
이 규칙은 많은 자동화된 봇과 크롤러를 차단합니다. "amazonbot", "gptbot", "claudebot", "mistralai" 등과 같은 AI 크롤러를 차단합니다. 또한 이름에 "bot", "crawl" 또는 "spider"가 포함된 모든 사용자 에이전트가 특정 IP 그룹에서 접근하는 것을 차단합니다. Google이나 Bing과 같은 실제 검색 엔진과 ACME 챌린지 요청은 여전히 허용합니다.
Action: Block