Auf Grund von andauernden Brute Force Angriffen auf meinen Server, hatte ich mich dazu entschlossen, fail2ban einzurichten. Ich musste dann aber feststellen, dass wegen der Virtualisierungslösung von Netcup der Zugriff auf die Iptables nur über ein Webinterface möglich ist.
Es existierte zwar ein Script für das alte Webinterface, dieses funktionierte bei mir allerdings nur selten, oder gar nicht.
Deshalb habe ich mit dem alten Script als Basis ein neues geschaffen, mit dem es möglich ist, die Firewall vom Server aus über das neue VCP zu steuern.
Damit das folgende Script funktioniert muss curl installiert sein. Für Debian:
apt-get install curl
Zuerst entfernt ihr alles, was in “/etc/fail2ban/action.d/” ist und erstellt dann folgendes Script als “sync.sh” im Ordner “action.d” und gebt ihm x-Rechte (Userdaten im Script nicht vergessen).
Script:
#!/bin/sh # # Als Anreiz diente ein Script von # Michael Geiger - tux1337 - www.geigers-site.de # # Der erste Parameter nimmt die IP, der zweite den Befehl (add oder del) # # Copyright (C) 2011 Christoph Schuster | ndurchx | www.n-durch-x.de # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation; either version 3 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, see <http://www.gnu.org/licenses/>. # #check for running process while [ -e /tmp/nvcp/vcp.pid ]; do if ( kill -0 `cat /tmp/nvcp/vcp.pid` 2> /dev/null ); then sleep 5 else rm -R /tmp/nvcp fi done #CONFIG user="" #your vcp login name password="" #your vcp password servername="" #your vserver name (vXXXXXXXXXXXX) #CONFIG END #PARAMETERS # normally you dont have to change that direction="INPUT" protokoll="ANY" sourceip="$1" ownipv4="0.0.0.0/0" ownipv6="%3A%3A%2F0" policy="DROP" #PARAMETERS END mkdir /tmp/nvcp chmod 600 /tmp/nvcp cd /tmp/nvcp echo $$ > vcp.pid iptest=`echo $sourceip | grep ".*:.*:.*" | wc -l` if [[ "$iptest" -ge "1" ]] then ipversion="v6" else ipversion="v4" fi updateRulesV6() { curl -b cookie.txt -d "updateRules=updateRules" --url "https://www.vservercontrolpanel.de/VServers?selectedVServerId=$serverid&page=filter§ion=IPv6" } updateRulesV4() { curl -b cookie.txt -d "updateRules=updateRules" --url "https://www.vservercontrolpanel.de/VServers?selectedVServerId=$serverid&page=filter§ion=IPv4" } #Login curl -b cookie.txt -c cookie.txt -d "doLogin=Login&username=$user&password=$password" --url https://www.vservercontrolpanel.de/Login curl -b cookie.txt -o tmp.txt --url https://www.vservercontrolpanel.de/Home tr -d \\012 < tmp.txt > servers.txt serverid=`grep -o "selectedVServerId=[0-9]\{1,10\}[^0-9]*$servername" servers.txt | grep -m 1 -o "Id=[0-9]*" | grep -o [0-9]*` banaction="addRule=addRule&addRuleSubmit=hinzuf%C3%BCgen&direction=$direction&foreignip=$sourceip&match=STATE&ESTABLISHED=ESTABLISHED&NEW=NEW&RELATED=RELATED&proto=$protokoll&sortINPUT=1&sortOUTPUT=1&target=$policy" case "$2" in add) curl -b cookie.txt -d "$banaction&ipType=IPv6&ownip=$ownipv6" --url "https://www.vservercontrolpanel.de/VServers?selectedVServerId=$serverid&page=filter§ion=IPv6" updateRulesV6 if [[ "$ipversion" != "v6" ]] then curl -b cookie.txt -d "$banaction&ipType=IPv4&ownip=$ownipv4" --url "https://www.vservercontrolpanel.de/VServers?selectedVServerId=$serverid&page=filter§ion=IPv4" updateRulesV4 fi ;; del) curl -b cookie.txt -o ipv6.txt --url "https://www.vservercontrolpanel.de/VServers?selectedVServerId=$serverid&page=filter§ion=IPv6" fwids=`cat ipv6.txt | grep "foreignip\" value=\".*$sourceip" | cut -d "(" -f 2 | cut -d ")" -f 1` for id in $fwids; do curl -b cookie.txt -d "deleteId=$id&direction=$direction&foreignip=$sourceip&ipType=IPv6&match=&ownip=$ownipv6&proto=$protokoll&sortINPUT=1&submit$id=&target=$policy" --url "https://www.vservercontrolpanel.de/VServers?selectedVServerId=$serverid&page=filter§ion=IPv6" done updateRulesV6 if [[ "$ipversion" != "v6" ]] then curl -b cookie.txt -o ipv4.txt --url "https://www.vservercontrolpanel.de/VServers?selectedVServerId=$serverid&page=filter§ion=IPv4" fwids=`cat ipv4.txt | grep "foreignip\" value=\"$sourceip" | cut -d "(" -f 2 | cut -d ")" -f 1` for id in $fwids; do curl -b cookie.txt -d "deleteId=$id&direction=$direction&foreignip=$sourceip&ipType=IPv4&match=&ownip=$ownipv4&proto=$protokoll&sortINPUT=1&submit$id=&target=$policy" --url "https://www.vservercontrolpanel.de/VServers?selectedVServerId=$serverid&page=filter§ion=IPv4" done updateRulesV4 fi ;; *) echo "Usage: $0 IPADDRESS {add|del}" exit 1 ;; esac #Logout curl -b cookie.txt --url https://www.vservercontrolpanel.de/Logout rm -R /tmp/nvcp exit 0
Dann erstellt ihr die Datei “sync.conf” in Ordner “action.d” und kopiert das hier rein:
[Definition] # Option: actionstart # Notes.: command executed once at the start of Fail2Ban. # Values: CMD # actionstart = # Option: actionstop # Notes.: command executed once at the end of Fail2Ban # Values: CMD # actionstop = # Option: actioncheck # Notes.: command executed once before each actionban command # Values: CMD # actioncheck = # Option: actionban # Notes.: command executed when banning an IP. Take care that the # command is executed with Fail2Ban user rights. # Tags: <ip> IP address # <failures> number of failures # <time> unix timestamp of the ban time # Values: CMD # actionban = /etc/fail2ban/action.d/sync.sh <ip> add # Option: actionunban # Notes.: command executed when unbanning an IP. Take care that the # command is executed with Fail2Ban user rights. # Tags: <ip> IP address # <failures> number of failures # <time> unix timestamp of the ban time # Values: CMD # actionunban = /etc/fail2ban/action.d/sync.sh <ip> del
Anschließend passt ihr noch die “jail.conf” im Ordner “/etc/fail2ban” an.
Welche Regeln Ihr einschaltet bleibt euch überlassen, aber folgenden Wert müsst ihr ändern (Defaultwert: “action = %(action_)s”):
action = syncDann noch fail2ban neustarten und fertig!
Bitcoin Spendenadresse: 17GAjCyAWpqreJ3nBAkZh4rGPHnZnCNM2P
super. vielen Dank.
Wer noch Bedarf an einer automatischen Information via Email hat, der natürlich mit diesem Skript nicht mehr nativ über Fail2Ban funktioniert, fügt einfach:
echo “$1 wurde gebannt.” | mailx -s “Fail2Ban-Warnung” deine@email.net
nach dem Logout in das sync.sh Skript ein und schon wird man per Mail darüber informiert.
Bei Debian 6 (Squeeze) muss das “#!/bin/sh” durch “#!/bin/bash” ersetzt werden.
…für den Fall, dass die bans nur für IPV6 und nicht für IPV4 eingetragen werden
Wenn man nicht die Standart-Shell wieder auf #sh geändert hat
Leider klappt das nicht bei mir mit netcup
fail2ban scheint richtig zu laufen ip’s werden auch gebannt,zumindest werden Einträge in der fail2ban.log erstellt. [BAN] sowie [UNBAN]aber die Kommunikation mit netcup klappt nicht. Sprich es werden keine Rules im ccp eingetragen. Da ich das live getestet habe , habe ich sofort nach dem Ban nachgesehen also noch vor dem unban. Es werden deffinitiv keine Einträge erstellt.
Ich kann dir leider keine Lösung für das Problem anbieten, da der Fehler bisher noch bei niemandem aufgetreten ist. Wenn du noch zusätzliche Informationen hast, die mir für die Lösung helfen könnten (OS-Version, Curl-Version, etc.) kannst du sie mir gern unter christoph.schuster@n-durch-x.de schreiben.
so ich möchte noch schnell nachreichen , warum es bei mir nicht geklappt hat, falls jemand das selbe Problem hat wie ich.
es lag am servername den ich angegeben habe.
servername=”" #your vserver name (vXXXXXXXXXXXX)
hier darf nur der servername(vXXXXXXXXXXXX) wie ja auch angegeben rein.
ich hatte an den Servernamen noch den FQDN angehängt
also:
servername=”vXXXXXXXXXXXXXX.yourvserver.net”;
was mir immer n 500-Fehler (internal Servererror) auswarf.
Also mein Fehler
Das script läuft jetzt super
Danke nochmal für deine Leistung
ndurchx
hab das alles so gemacht wie es hier steht,bekomme auch ne mail das er gebannt wurde aber in der FW steht nichts drin.Benutzte Debian 6 mit IspCp,jemand ne idee?
Gelöst. Das Problem war, dass curl nicht installiert war.
vielen dank nochmal
[...] Hier geht es zum Artikel Howto ← SSH absichern Kommentar schreiben0 Kommentare. /* */ [...]
Hallo zusammen,
Ich hätte gerne zusätzlich zur Funktion des Action Scriptes auch die Funktion von E-Mail Notofication. Nach diesem Tutorial wurde ja aber alle Dateien aus action.d entfernt.
Hat hier jemand eine Idee, wie man diese Funktion zusätzlich zum Actionscript verwenden könnte?