Meillo hat geschrieben: 25.12.2019 22:50:10
Hier eine Ueberarbeitung des Scripts in Richtung der Art, wie ich es schreiben wuerde:
Code: Alles auswählen
#!/bin/bash
new=/etc/fail2ban/home_ip.txt
old=/etc/fail2ban/home_ip_old.txt
config_file=/etc/fail2ban/jail.local
IPfix="127.0.0.1\ 127.0.0.0\/8\ 10.0.0.0\/8\ 172.16.0.0\/12\ 192.168.0.0\/16\ "
wget -O "$new" https://eine-domain.de/homeIP.txt
if cmp -s "$new" "$old"; then
exit
fi
mv "$new" "$old"
sed -i "s/\(ignoreip *= *\).*/\1$IPfix`cat $new`/" "$config_file"
/etc/init.d/fail2ban restart
echo "Neue IP gewhitelisted: `cat $new` Fail2ban neu gestartet"
Den sed-Befehl habe ich nicht umgebaut, weil ich die genaue Syntax von $config_file nicht kenne. (Ich wuerde versuchen IPfix drin zu lassen und nur den Rest der Zeile zu aendern ... oder mal schauen, ob die Config sowas wie `+=' unterstuetzt, damit ich es in zwei Zeilen aufteilen kann ... oder eine separate Datei unter /etc/fail2ban anlegen, mit dem Ziel, dass manuelle Werte und automatisch geaenderte Werte klar voneinander getrennt sind.)
Die Dateien wuerde ich persoenlich anders nennen, weil Dateiendungen auf Unix egal sind. Old waere bei mir eher "$new.backup", oder ich wuerde gleich ein Logfile anlegen:
Die Ausgabe am Ende wuerde ich nur drin lassen, wenn ich die bei jeder Aenderung per Mail bekommen will. Das kann Sinn machen, wenn es selten ist oder ich die Info brauche, sonst wuerde ich sie her rausnehmen.
Soviel von mir an dieser Stelle mal an Input.
Hallo,
vielen lieben Dank für die Überarbeitung, das muss ich aber in Ruhe machen, ich bin schon froh das es jetzt überhaupt läuft
Ein explizites `cd' in ein definiertes Verzeichnis am Anfang waere gut. (Auf den ersten Blick scheint `cd /root' korrekt zu sein.) Derzeit gehst du naemlich nur davon aus, dass sowohl deine manuellen Aufrufe als auch Cron das Script schon aus dem richtigen Verzeichnis aufrufen werden. Besser du stellst das sicher.
Was meinst Du damit genau ?
Sollte der Command dann wie folgt aussehen oder hab ich da etwas falsch verstanden ? Kann man das dann überall so machen wo ein Verzeichnis angegeben wird oder gibt es commands die das dann falsch interpretieren könnten ?
D.h. um 12:00 und um 24:00.
Ich wollte eigentlich das mein Script nur um 12:00 Uhr Mittags ausgeführt wird, das reicht voll und ganz. Wie müsste der Command dann aussehen ?
Denn wenn ich
Code: Alles auswählen
* 12,24 * * * bash /etc/fail2ban/fail2ban-ip-whitelisting.sh
schreibe dann sagt er mit
"Bad Hour, Errors in Crontab".
Btw: Da dein Script ein Shebang hat ist das `bash' im Cronjob-Aufruf nicht noetig ... und sorgt bei zukuenftigen Umbauten des Scripts moeglicherweise fuer Fehler oder Irritationen.
Hab ich mal rausgenommen, das ist wohl durch das etliche mal hin und herprobieren stehen geblieben
echo `date` `cat "$new"` >>/var/log/home_ip.log
Die finde ich aktuell nicht in meinem Script. Vielleicht wieder der Wald und die Bäume
Lg
rodeoric