Ich habe eine Ubuntu 12.04-Maschine mit Apache2, auf der etwa 10 WordPress-Websites gehostet werden.
Vor kurzem wurde ich von Clients angegriffen, die anscheinend POST-Anfragen an eine WordPress-Datei namens „xmlrpc.php“ senden.
Das Blockieren der IP-Adressen, die diese bösartigen Anfragen senden, ist ein langwieriger manueller Prozess, und ich möchte diesen irgendwie automatisieren.
Sobald ich merke, dass meine Serverlast hoch ist, führe ich die folgenden Aktionen aus:
Ich führe Apachetop auf allen meinen virtuellen Host-Zugriffsdateien aus. Dies zeigt alle gestellten Anfragen an, sodass ich sehen kann, ob Anfragen an xmlrpc.php gestellt werden.
Sobald ich ermittelt habe, welche IPs meinen Server angreifen, führe ich für jede angreifende IP-Adresse den folgenden Befehl aus:
sudo iptables -A INPUT -s 94.102.52.95 -j DROP
Wenn alle IP-Adressen zu meiner Sperrliste hinzugefügt wurden, sinkt meine Serverlast sofort auf ein normales Niveau
Gibt es eine Möglichkeit, diesen Vorgang zu automatisieren? Ich dachte darüber nach, in xmlrpc.php Code zu schreiben, der alle IP-Adressen, die Anfragen an sie senden, zu meiner Sperrliste hinzufügt. Hat jemand eine Idee, wie das geht?
Dank im Voraus!
Antwort1
Ich glaube nicht, dass das Blockieren jeder IP die Lösung für dieses Problem ist. Die IPs, die POST-Aktionen durchführen, sind höchstwahrscheinlich infizierte/gehackte PCs auf der ganzen Welt. Sie werden Ihre IP-Tabellen nur überfluten, indem Sie jede einzelne davon auf die schwarze Liste setzen. Wenn die WP-Site gehackt wurde, würde ich vorschlagen, sie offline zu schalten und den Kunden zu benachrichtigen, damit er das Chaos bereinigt und alle Komponenten aktualisiert.
Sie können mod_security installieren, um das Hochladen von Schadcode zu verhindern. Sie können mod_security auch anweisen, POST-Anfragen an diese bestimmte Seite vollständig zu blockieren. Es wird dann einfach eine 404-Fehlermeldung zurückgegeben. Dies spart Ihnen einiges an Last (und verhindert Hacking).
Wenn das oben Genannte immer noch nicht hilft und Sie alle IPs blockieren möchten (ich würde sicherstellen, dass Sie sie nach einiger Zeit entfernen, um riesige Iptables zu verhindern), können Sie ein Skript erstellen, das das access.log verfolgt und die IPs blockiert (z. B. ein Shell-Skript mit einem Cronjob/Sleep oder besser: ein netter Daemon in Perl/Python).