- Implement BotGuard security engine (Bot, AI, Scraper & Empty UA blocking) - Add Admin Security page (/admin/security) with toggles, rate limiter & block/allowlists - Add per-IP RateLimiter handoff in index.php with HTTP 429 response - Add dynamic /robots.txt generation and noai/noimageai meta tags - Add RequestLogger status column and blocked badges in admin request logs - Fix ARIAComponents.php syntax errors on lines 67, 137, 262 - Add HAProxy / PFSense bot blocking & IP forwarding guide (docs/haproxy-bot-blocking.md) - Update version to 1.8.0 with release notes in version.php and guides
2.6 KiB
2.6 KiB
HAProxy & PFSense Bot, AI & Scraper Blokkering
Deze handleiding legt uit hoe je op netwerkniveau (via HAProxy op PFSense) bots, AI-crawlers en scrapers blokkeert voordat ze je CodePress CMS webserver bereiken.
1. Randvoorwaarde: Echte Bezoeker IP's doorsturen (X-Forwarded-For)
Om te zorgen dat CodePress CMS en HAProxy het echte IP-adres van de bezoeker zien (in plaats van het interne PFSense IP zoals 192.168.210.1):
- Ga in PFSense naar Services → HAProxy → Frontend en bewerk je Frontend.
- Zorg dat het Type op
http / https (offloading)staat. - Vink onder Advanced settings aan:
Use option forwardfor. - Voeg onderaan bij Advanced pass thru toe:
http-request set-header X-Real-IP %[src] - Sla op en klik op Apply Changes.
2. HAProxy ACL Regels (User-Agent Blokkering)
Voeg in HAProxy Frontend onder Advanced pass thru de volgende ACL-regels toe om AI-bots en scrapers direct een 403 Forbidden te geven:
# Detecteer AI Bots
acl is_ai_bot req.fhdr(User-Agent) -i -m sub GPTBot ChatGPT-User ClaudeBot Claude-Web CCBot PerplexityBot Bytespider FacebookBot Google-Extended Applebot-Extended
# Detecteer Scrapers & Automated Tools
acl is_scraper req.fhdr(User-Agent) -i -m sub HTTrack Scrapy HeadlessChrome PhantomJS curl wget python-requests libwww-perl
# Detecteer Lege User-Agents
acl is_empty_ua req.fhdr(User-Agent) -m len 0
# Blokkeer als een van de regels matcht
http-request deny deny_status 403 if is_ai_bot
http-request deny deny_status 403 if is_scraper
http-request deny deny_status 403 if is_empty_ua
3. HAProxy Rate Limiting (Stick Tables)
Om overbelasting door agressieve scrapers te voorkomen op netwerkniveau, kun je een stick table toevoegen aan je HAProxy Frontend (Advanced pass thru):
# Houd verzoeken per IP bij (1 minuut venster)
stick-table type ip size 100k expire 1m store gpc0,http_req_rate(60s)
tcp-request connection track-sc0 src
# Blokkeer IP als er meer dan 60 verzoeken per minuut worden gedaan
acl is_abuser sc0_http_req_rate gt 60
http-request deny deny_status 429 if is_abuser
4. Datacenter IP Blokkering met pfBlockerNG
Veel kwaadaardige bots en scrapers draaien op goedkope cloud/datacenter servers (AWS, Hetzner, OVH, DigitalOcean, Linode).
- Installeer pfBlockerNG-devel via System → Package Manager in PFSense.
- Ga naar Firewall → pfBlockerNG → IP → IPv4.
- Voeg de ASN / Datacenter Feeds toe van bekende cloud providers (bijv. AWS, Hetzner, OVH, DigitalOcean).
- Zet de actie op Deny Both (blokkeert zowel inkomend als uitgaand verkeer naar die datacenter IP-ranges).