WordPress mit Cloudflare

28. Juni 2025

OK, es nervt. Seit längerem wird meine WordPress-Seite regelmäßig aus aller Welt „angegriffen“, obwohl meine Reichweite nun wirklich sehr beschränkt ist. Zwar läuft eine WordPress-Firewall-Extension, aber diese hat mir mehrfach am Tag Mails geschickt, dass Benutzer oder Bots versucht haben, sich als Admin anzumelden.

Da mich dies genervt hat und meine Seite durch Cloudflare veröffentlicht ist, habe ich hierfür eine WAF (Web Application Firewall) eingerichtet, die alle diese Requests blockiert. Kaboom – jetzt ist Ruhe im Karton 😀.

WAF-Regeln?

Meine Seite bekommt täglich mehrere hundert Requests, die verdächtig nach Brute-Force, Exploits oder anderen unschönen Dingen aussehen. Das ist ungefähr so, als würde jeden Tag eine Busladung ungebetener Gäste versuchen, bei dir einzubrechen. Und das ist lästig – nicht nur für mich, sondern auch für meinen (armen) Server.

Cloudflare WAF (Web Application Firewall) ist der Türsteher. Mit einer gezielten Regeln (Custom Rules) kann ich die meisten Angriffe direkt an der Haustür abfangen, bevor sie überhaupt meine WordPress-Installation erreichen.

Was wird geblockt?

Die üblichen Verdächtigen sind:

  • /wp-login.php – Klassiker für Brute-Force-Angriffe.
  • /wp-admin/ – Adminbereich, den wirklich nur ich brauche.
  • /xmlrpc.php – Wird gerne für DDoS und andere Attacken missbraucht.
  • /wp-config.php, /install.php, /upgrade.php – Dateien, die niemand außer mir anfassen sollte.
  • /wp-json/ – Schnittstelle für die REST API, auch ein beliebtes Ziel.

Und weil ich keine Lust habe, mich selbst auszusperren, lasse ich meine eigene IP natürlich durch – ich bin ja nicht doof.

So sieht die Regel konkret aus

Hier ein Beispiel für eine Cloudflare WAF-Regel, wie ich sie verwende:

(
  starts_with(http.request.uri.path, "/wp-login.php") 
  or starts_with(http.request.uri.path, "/wp-admin/") 
  or starts_with(http.request.uri.path, "/xmlrpc") 
  or starts_with(http.request.uri.path, "//xmlrpc") 
  or starts_with(http.request.uri.path, "/wp-config.php")
  or starts_with(http.request.uri.path, "/install.php")
  or starts_with(http.request.uri.path, "/upgrade.php")
  or starts_with(http.request.uri.path, "/wp-json/")
)
and ip.src ne xxx.xxx.xxx.xxx

Was passiert hier?

  • Alle Requests auf die genannten Pfade werden geblockt – außer sie kommen von meiner eigenen IP (hier als Beispiel: ‎⁠xxx.xxx.xxx.xxx⁠).
  • Das Ganze läuft direkt auf Cloudflare, also noch bevor die Anfrage überhaupt auf meinen Server trifft. Spart Ressourcen und Nerven!

Wie setze ich das um?

  1. Cloudflare Dashboard öffnen
    Gehe zu „Security“ → „Security rules“.
  2. Neue Regel erstellen
    Ausdruck wie oben eingeben, eigene IP anpassen.
  3. Aktion wählen
    „Block“ auswählen – nicht „Challenge“, sonst musst du dauernd Captchas lösen.
  4. Regel speichern und testen
    Kurz selbst testen (z.B. mit VPN), dass du nicht ausgesperrt bist.

Fazit

Mit etwas Konfiguration und gesundem Misstrauen bleibt der WordPress-Adminbereich sauber. Cloudflare WAF erledigt den Großteil der Arbeit, sodass wieder Zeit für die wirklich wichtigen Dinge bleibt.