BUNTSTARTER/instructions-for-claude.txt

219 lines
8.7 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Goal:
Expand an Ubuntu bash installer script so that it configures Cloudflare Firewall rules automatically using the users Zone ID and API Token.
The script should support three security levels — Light, Moderate, and Extreme — all using Cloudflares free-tier Firewall Rules API.
🪟 User Inputs (interactive prompt in terminal)
1. CLOUDFLARE_EMAIL (optional, only for logging)
2. ZONE_ID
3. API_TOKEN
4. DOMAIN_NAME (used for referer-safe rules)
5. SECURITY_LEVEL (choose: light, moderate, or extreme)
🧰 Dependencies (for a clean Ubuntu install)
sudo apt update
sudo apt install -y curl jq
(jq is for parsing JSON responses and checking rule creation success.)
🌩️ Cloudflare API Base Endpoint
https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/firewall/rules
Headers:
-H "Authorization: Bearer ${API_TOKEN}" \
-H "Content-Type: application/json"
🪄 Security Levels
🟢 LIGHT (basic protection, no admin lockdown)
• Block /xmlrpc.php
• Block /wp-content/ or /wp-includes/ requests not from your domain
Expression:
(http.request.uri.path contains "/xmlrpc.php") or
((http.request.uri.path eq "/wp-content/" or http.request.uri.path eq "/wp-includes/") and not http.referer contains "${DOMAIN_NAME}")
🟡 MODERATE (adds wp-admin/wp-login limits)
Includes Light rules +
Block access to /wp-login.php or /wp-admin/ (except /wp-admin/admin-ajax.php) from outside AU, US, UK.
Expression:
(
http.request.uri.path contains "/wp-login.php" or
(http.request.uri.path contains "/wp-admin/" and http.request.uri.path ne "/wp-admin/admin-ajax.php")
)
and not (ip.geoip.country in {"AU" "US" "UK"})
🔴 EXTREME (maximum free-tier hardening)
Includes Moderate rules +
Block entire site access from sketchy regions (RU, CN, KP, IR, etc.), except known search engine bots (Googlebot, Bingbot).
Expression:
(
ip.geoip.country in {"RU" "CN" "KP" "IR" "VN" "TR" "IN" "NG"}
)
and not cf.client.bot
🧩 Example Bash Logic
Heres the conceptual structure for your installer:
read -p "Enter your Cloudflare Zone ID: " ZONE_ID
read -p "Enter your Cloudflare API Token: " API_TOKEN
read -p "Enter your domain (e.g. example.com): " DOMAIN
read -p "Choose security level (light/moderate/extreme): " LEVEL
API="https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/firewall/rules"
create_rule() {
local desc="$1"
local expr="$2"
echo "Creating rule: $desc..."
curl -s -X POST "$API" \
-H "Authorization: Bearer ${API_TOKEN}" \
-H "Content-Type: application/json" \
--data "[
{
\"description\": \"${desc}\",
\"action\": \"block\",
\"filter\": {\"expression\": \"${expr}\"}
}
]" | jq .
}
if [[ "$LEVEL" == "light" || "$LEVEL" == "moderate" || "$LEVEL" == "extreme" ]]; then
create_rule "Block XMLRPC and unauthorized includes" "(http.request.uri.path contains \"/xmlrpc.php\") or ((http.request.uri.path eq \"/wp-content/\" or http.request.uri.path eq \"/wp-includes/\") and not http.referer contains \"${DOMAIN}\")"
fi
if [[ "$LEVEL" == "moderate" || "$LEVEL" == "extreme" ]]; then
create_rule "Restrict wp-login/wp-admin to AU, US, UK" "((http.request.uri.path contains \"/wp-login.php\" or (http.request.uri.path contains \"/wp-admin/\" and http.request.uri.path ne \"/wp-admin/admin-ajax.php\")) and not (ip.geoip.country in {\"AU\" \"US\" \"UK\"}))"
fi
if [[ "$LEVEL" == "extreme" ]]; then
create_rule "Block access from high-risk countries" "((ip.geoip.country in {\"RU\" \"CN\" \"KP\" \"IR\" \"VN\" \"TR\" \"IN\" \"NG\"}) and not cf.client.bot)"
fi
echo "✅ Cloudflare security rules applied for ${DOMAIN} (${LEVEL} mode)"
extra concept to factor in...
💀 “Mega Bot Block” Expansion for Cloudflare Setup Script
This will:
• Keep Googlebot, Bingbot, DuckDuckGo, Applebot ✅ allowed.
• Block AI scrapers, SEO bots, curl/wget libraries, and other nuisance crawlers.
• Skip blocking /robots.txt so legitimate search engines can still fetch it.
• Use the same ZONE_ID and API_TOKEN you already input earlier.
⚙️ Integration Plan
In your Cloudflare bash installer (from before), add a 4th rule group triggered if user enables “bot blocking.”
At the prompt, include:
read -p "Enable advanced bot blocking? (y/n): " BOTBLOCK
If y, it will add a rule called:
“AI Crawl Control - Block AI & SEO Bots”
💬 Expression (copy-ready for API)
(http.request.uri.path ne "/robots.txt") and (
(http.user_agent contains "SemrushBot") or
(http.user_agent contains "AhrefsBot") or
(http.user_agent contains "Barkrowler") or
(http.user_agent contains "MJ12bot") or
(http.user_agent contains "DotBot") or
(http.user_agent contains "Exabot") or
(http.user_agent contains "Sogou") or
(http.user_agent contains "YandexBot") or
(http.user_agent contains "Baidu") or
(http.user_agent contains "ia_archiver") or
(http.user_agent contains "SemanticaBot") or
(http.user_agent contains "SiteLockSpider") or
(http.user_agent contains "SeznamBot") or
(http.user_agent contains "OpenLinkProfiler") or
(http.user_agent contains "SiteBot") or
(http.user_agent contains "Screaming Frog") or
(http.user_agent contains "DataForSeoBot") or
(http.user_agent contains "SEOkicks") or
(http.user_agent contains "BLEXBot") or
(http.user_agent contains "MegaIndex") or
(http.user_agent contains "MegaIndex.ru") or
(http.user_agent contains "NetcraftSurveyAgent") or
(http.user_agent contains "Apache-HttpClient") or
(http.user_agent contains "Python-urllib") or
(http.user_agent contains "python-requests") or
(http.user_agent contains "libwww-perl") or
(http.user_agent contains "Curl") or
(http.user_agent contains "wget") or
(http.user_agent contains "CensysInspect") or
(http.user_agent contains "ZoominfoBot") or
(http.user_agent contains "MauiBot") or
(http.user_agent contains "spbot") or
(http.user_agent contains "GPTBot") or
(http.user_agent contains "ClaudeBot") or
(http.user_agent contains "Claude-SearchBot") or
(http.user_agent contains "Claude-User") or
(http.user_agent contains "Bytespider") or
(http.user_agent contains "MistralAI-User") or
(http.user_agent contains "Perplexity-User") or
(http.user_agent contains "ProRataInc") or
(http.user_agent contains "Novellum") or
(http.user_agent contains "OAI-SearchBot") or
(http.user_agent contains "Meta-ExternalFetcher") or
(http.user_agent contains "Meta-ExternalAgent")
)
🧠 Add this function into the script
if [[ "$BOTBLOCK" =~ ^[Yy]$ ]]; then
create_rule "AI Crawl Control - Block AI & SEO Bots" \
'(http.request.uri.path ne "/robots.txt") and ((http.user_agent contains "SemrushBot") or (http.user_agent contains "AhrefsBot") or (http.user_agent contains "Barkrowler") or (http.user_agent contains "MJ12bot") or (http.user_agent contains "DotBot") or (http.user_agent contains "Exabot") or (http.user_agent contains "Sogou") or (http.user_agent contains "YandexBot") or (http.user_agent contains "Baidu") or (http.user_agent contains "ia_archiver") or (http.user_agent contains "SemanticaBot") or (http.user_agent contains "SiteLockSpider") or (http.user_agent contains "SeznamBot") or (http.user_agent contains "OpenLinkProfiler") or (http.user_agent contains "SiteBot") or (http.user_agent contains "Screaming Frog") or (http.user_agent contains "DataForSeoBot") or (http.user_agent contains "SEOkicks") or (http.user_agent contains "BLEXBot") or (http.user_agent contains "MegaIndex") or (http.user_agent contains "MegaIndex.ru") or (http.user_agent contains "NetcraftSurveyAgent") or (http.user_agent contains "Apache-HttpClient") or (http.user_agent contains "Python-urllib") or (http.user_agent contains "python-requests") or (http.user_agent contains "libwww-perl") or (http.user_agent contains "Curl") or (http.user_agent contains "wget") or (http.user_agent contains "CensysInspect") or (http.user_agent contains "ZoominfoBot") or (http.user_agent contains "MauiBot") or (http.user_agent contains "spbot") or (http.user_agent contains "GPTBot") or (http.user_agent contains "ClaudeBot") or (http.user_agent contains "Claude-SearchBot") or (http.user_agent contains "Claude-User") or (http.user_agent contains "Bytespider") or (http.user_agent contains "MistralAI-User") or (http.user_agent contains "Perplexity-User") or (http.user_agent contains "ProRataInc") or (http.user_agent contains "Novellum") or (http.user_agent contains "OAI-SearchBot") or (http.user_agent contains "Meta-ExternalFetcher") or (http.user_agent contains "Meta-ExternalAgent"))'
fi
✅ Summary of What This Adds
Rule Type Action Notes
/xmlrpc.php & unauthorized includes Block Basic protection
wp-login & wp-admin by region Block Optional Moderate/Extreme
Country blocks (RU, CN, KP, etc.) Block Optional Extreme
Bot/AI/SEO crawler block Block Optional, keeps search engines allowed