Einer unserer Server wird täglich von einer großen Anzahl von Spam-Bots getroffen. Sie können zwar keinen Spam posten, versuchen aber trotzdem, den Server für echte Benutzer zu verlangsamen.
Um dem entgegenzuwirken, muss auf der Site ein PHP-Skript ausgeführt werden, das ihre IP-Adressen erkennt. Ich möchte jedoch, dass dieses Skript diese IP-Adressen automatisch zur Firewall hinzufügt (anstatt dass ich das manuell vornehmen muss). Laufen so etwas:
iptables -I INPUT -j DROP -s 123.123.123.123
Es sieht jedoch so aus iptables
Befehle können nur als root ausgeführt werden. Irgendein Weg um dieses herum?
Ich vermute, ich könnte die Befehle zu einer Datei hinzufügen lassen root
Läuft über cron, möchte aber nicht wirklich zwischen dem PHP-Skript und dem Hinzufügen eines IP-Verbots warten.
s/[^0-9.:]//
auf der IP-Adresse und nichts anderes als Eingabe akzeptieren. Ich würde es in einem solchen Szenario noch enger machen.Antworten:
Lassen Sie Ihr PHP-Skript die fehlerhaften IP-Adressen in eine Protokolldatei schreiben. Als nächstes installieren Fail2Ban und konfigurieren Sie es, um Ihre Protokolldatei zu lesen.
quelle
Der einfachste Weg wäre, wie Sie vorschlagen, dass das Skript die störenden IPs in eine Protokolldatei schreibt. Sie können dann ein anderes Skript (als root) in einer Schleife ausführen, die die Datei liest und die Datei sendet
iptables
Befehl. So etwas wie:Sie können dieses Skript dann beim Start als root ausführen, entweder als Dienst oder indem Sie diese Crontab für root erstellen:
Ich nehme an, die Verzögerung, um die Sie sich Sorgen machen, ist mindestens eine Minute. Da das Skript in einer Endlosschleife ausgeführt wird, müssen Sie es nicht jede Minute mit cron ausführen, und die Verzögerung liegt bei Ihnen. So wie es aussieht, liest das Skript jede Sekunde die Logdatei.
quelle
Als Alternative zu den vorhandenen Antworten und Hinzufügungen
sshguard
(nicht so bekannt wegen seines Umfangs, als der Name es vermuten lässt) zu dem erwähnten Fail2Ban, den ich Ihnen vorschlagen möchtesudo
.Die Datei
/etc/sudoers
kann so konfiguriert werden, dass genau kontrolliert wird, wer was von wem und von welcher Maschine ausführen kann. Daher können Sie einen kleinen Wrapper ähnlich wie in schreiben Terdon Antwort und dannchown root:
es und stellen Sie sicher, dass seine Berechtigungen eng festgelegt sind. Werfen Sie es in einen Ordner wie/usr/sbin
und erlaube es als ausgeführt zu werdenroot
von welchem Benutzerkonto aus Ihr PHP-Skript ausgeführt wird. Stellen Sie sicher, dass das Skript innerhalb der Chroot-Datei ausgeführt wird, wenn Ihr Skript im Kontext des Webservers ausgeführt wird und die Chroot-Funktion aktiviert ist. Denken Sie daran, dass dies verwendet werden könnte, um das chroot-Gefängnis zu gefährden, wenn Ihr Skript schlecht geschrieben ist. Eine Beispielzeile in/etc/sudoers
könnte sein:die Benutzer erlaubt
www-data
zu rennen/usr/sbin/yourscript.sh
wieroot
ohne ein Passwort auf allen Maschinen anzugeben (sudoers
kann eine zentrale für alle Maschinen in einem Netzwerk sein, deshalb ...).sudo
gilt als sicherer als die Einstellungsuid
etwas in Ihrem Skript, aber ich nehme an, dass es gute Gründe gibt, diese Alternative zu verwenden, z. wenn neinsudo
ist verfügbar.Sie können auch auschecken diese Antwort Ich gab auf der Schwester-SE-Website askubuntu.com auf.
quelle
Eine sehr einfache Methode ...
Ich habe ein PHP-Skript geschrieben, das die unerwünschte IP-Adresse in jeder Textzeile in eine Textdatei schreibt (wo immer nötig)
Dann habe ich eine eigene iptables-Kette erstellt und es genannt Banliste "(nenne es was du willst) mit dem Befehl ...
Auch die Installation von iptables-persistent mit ...
Zuletzt mit dem Befehl ...
Ich habe diese Zeile wie folgt zum Root Cronjob hinzugefügt, um alle 5 Minuten zu laufen (ändern Sie Ihre Zeit), um jede IP zu lesen, sie der iptable-Kette hinzuzufügen, die ich mit einem DROP-Ziel erstellt habe, und dann die Textdatei zu löschen ...
Ich habe diese Zeile auch hinzugefügt, um sicherzustellen, dass die Regeln alle 5 Minuten gespeichert werden ...
Das ist es! Süß und einfach, testen Sie es, indem Sie der Textdatei eine zufällige IP-Adresse (oder jede IP-Adresse in einer neuen Zeile) hinzufügen und darauf warten, dass Ihr Cronjob in dem von Ihnen gewählten Intervall ausgeführt wird ... Achten Sie darauf, sich nicht selbst zu verbieten, indem Sie das PHP-Skript von Ihrem eigenen Netzwerk aus testen.
Hinweis: Um alle IP-Adressen in der iptables-Kette zu löschen, können Sie " sudo iptables -F banlist "
quelle