Skip to content

moersberger-cmd/caddy-botblock

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 

Repository files navigation

caddy-botblock

Ein wiederverwendbarer Caddy-Snippet der aggressive Scraper, Automations-Tools und Rechenzentrums-IPs blockt — ohne legitime Suchmaschinen (Googlebot, Bingbot) auszusperren.

Warum

Standard-Caddy-Setups sind offen für alles. Das bedeutet:

  • Scraper saugen deinen Content ab (für KI-Training, Content-Klau)
  • Vulnerability-Scanner (zgrab, masscan) probieren pausenlos Exploits
  • Rechenzentrums-Botnetze (AWS, Hetzner, DigitalOcean-Ranges) hämmern deine API

Aber: Du willst auf keinen Fall Googlebot oder Bingbot blocken — sonst verschwindet deine Site aus der Suche.

Dieser Snippet macht genau die richtige Balance: Automations-User-Agents + Datacenter-IPs raus, Suchmaschinen + echte Nutzer rein.

Setup

  1. Snippet in deine Caddyfile (oder ein separates importiertes File) einfügen — siehe botblock.caddy
  2. In jedem Site-Block wo du den Schutz willst: import botblock
(botblock) {
	# UA-Block gilt NUR für externe (öffentliche) IPs — interne Health-Checks
	# (curl/python von localhost) bleiben ausgenommen.
	@bad_ua {
		header_regexp User-Agent "(?i)(curl/|wget/|python-requests|python-urllib|python-httpx|libwww|scrapy|go-http-client|node-fetch|axios/|okhttp|httpx|harvest|masscan|zgrab)"
		not client_ip 127.0.0.0/8 ::1 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 169.254.0.0/16 fc00::/7
	}
	handle @bad_ua {
		respond "Forbidden" 403
	}

	# Bekannte Datacenter-/Cloud-Ranges (AWS, GCP, Azure, DigitalOcean, Hetzner, OVH, Linode, Alibaba)
	@datacenter {
		client_ip 43.128.0.0/10 170.106.0.0/16 49.51.0.0/16 3.0.0.0/9 18.128.0.0/9 52.0.0.0/10 54.64.0.0/11 34.64.0.0/10 35.184.0.0/13 20.0.0.0/8 40.64.0.0/10 104.131.0.0/16 138.68.0.0/16 159.65.0.0/16 165.227.0.0/16 167.99.0.0/16 134.209.0.0/16 157.230.0.0/16 178.128.0.0/16 206.189.0.0/16 5.9.0.0/16 88.99.0.0/16 116.202.0.0/16 135.181.0.0/16 148.251.0.0/16 159.69.0.0/16 168.119.0.0/16 176.9.0.0/16 94.130.0.0/16 95.216.0.0/15 65.108.0.0/15 51.68.0.0/14 51.75.0.0/16 51.83.0.0/16 178.32.0.0/15 188.165.0.0/16 45.79.0.0/16 172.104.0.0/15
	}
	handle @datacenter {
		respond "Forbidden" 403
	}
}

example.com {
	import botblock
	respond "Hello, real visitor!"
}

Was BLEIBT durchgelassen

  • Googlebot — der echte Googlebot nutzt keinen curl-UA, kommt also durch
  • Bingbot, DuckDuckBot, echte Browser — alle mit normalem Mozilla-UA
  • localhost / interne Health-Checks — explizit ausgenommen per IP-Range

Was BLOCKT wird

Kategorie Beispiele
CLI-Tools curl, wget, httpie
Script-Libraries python-requests, python-httpx, node-fetch, axios, okhttp, go-http-client
Scraper-Frameworks scrapy, harvest
Security-Scanner masscan, zgrab
Datacenter-IPs AWS, GCP, Azure, DigitalOcean, Hetzner, OVH, Linode, Alibaba Cloud

Wichtig: teste nach dem Einbau

# Sollte 200 geben (echter Browser-UA):
curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/126.0" https://deine-site.de

# Sollte 403 geben (curl-UA):
curl https://deine-site.de

# Sollte 200 geben (Googlebot):
curl -A "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" https://deine-site.de

Grenzen

  • UA-Spoofing: Ein Angreifer der einen Browser-UA fälscht kommt durch. Dieser Snippet stoppt die 95 % dummen Bots, nicht die gezielten Angriffe. Für die brauchst du zusätzlich Rate-Limiting + WAF (z. B. Cloudflare davor).
  • Datacenter-Ranges veralten: Cloud-Anbieter fügen IP-Ranges hinzu. Die Liste hier ist Stand 2026 — für Aktualität regelmäßig gegen die offiziellen Range-Listen abgleichen (AWS: ip-ranges.amazonaws.com/ip-ranges.json).
  • Legitime API-Nutzer: Wenn du eine öffentliche API anbietest die von Scripten genutzt werden soll, schließe die entsprechenden Pfade vom botblock aus (handle /api/public/* { ... } ohne import botblock).

Live im Einsatz

Läuft produktiv auf allen Backend-Services von moersbergerit.de — u. a. 8 Web-Apps hinter Cloudflare-Tunnels.

Lizenz

MIT

Autor

Marvin Mörsberger — MörsbergerIT · Website-Entwicklung

About

Caddy-Snippet: Scraper, Bots und Datacenter-IPs blocken — ohne Googlebot/Bingbot auszusperren

Topics

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors