Bash Script erstellen

Warum Debian und/oder eine seiner Spielarten? Was muss ich vorher wissen? Wo geht es nach der Installation weiter?
rodeoric
Beiträge: 30
Registriert: 23.12.2019 15:02:54

Re: Bash Script erstellen

Beitrag von rodeoric » 24.12.2019 11:29:25

Bullet64 hat geschrieben: ↑ zum Beitrag ↑
24.12.2019 11:15:49

Code: Alles auswählen

# m h  dom mon dow   command
Mach mal das bash da weg.
P.s. Geile Webseite, direkt mal in die Favoriten.

Lg

Benutzeravatar
Meillo
Moderator
Beiträge: 8818
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Bash Script erstellen

Beitrag von Meillo » 24.12.2019 12:02:02

rodeoric hat geschrieben: ↑ zum Beitrag ↑
24.12.2019 11:20:45
hab ich jetzt gemacht, mal schauen ob er um 12 Uhr nachher durchläuft.
Du kannst die Zeit ja auf in fuenf Minuten setzen, dann musst du keine 14 Stunden warten. Wenn's klappt, dann setzt du die Zeit auf den korrekten Wert.

Btw: Ist dein Script ausfuehrbar? (D.h. hat es `x' bei `ls -l'?)
Use ed once in a while!

rodeoric
Beiträge: 30
Registriert: 23.12.2019 15:02:54

Re: Bash Script erstellen

Beitrag von rodeoric » 24.12.2019 12:05:31

Meillo hat geschrieben: ↑ zum Beitrag ↑
24.12.2019 12:02:02
rodeoric hat geschrieben: ↑ zum Beitrag ↑
24.12.2019 11:20:45
hab ich jetzt gemacht, mal schauen ob er um 12 Uhr nachher durchläuft.
Du kannst die Zeit ja auf in fuenf Minuten setzen, dann musst du keine 14 Stunden warten. Wenn's klappt, dann setzt du die Zeit auf den korrekten Wert.

Btw: Ist dein Script ausfuehrbar? (D.h. hat es `x' bei `ls -l'?)
Servus,

das scheint nicht geklappt zu haben.

ls l zeigt folgendes:
-rwxr-xr-x 1 root root 686 Dec 24 00:13 fail2ban-ip-whitelisting.sh

Mein Crontab sieht nun wie folgt aus:
0 12 * * * /etc/fail2ban/fail2ban-ip-whitelisting.sh

Nachtrag: Das gibt mir die Proxmox Console aus. Aber sieht nicht so aus als hätte er das gemacht was er machen sollte. Manuell jedoch funktioniert das Script.
Dec 24 12:50:01 hostname CRON[7953]: (root) CMD (/etc/fail2ban/fail2ban-ip-whitelisting.sh)

Noch jemand eine Idee :D ?

Benutzeravatar
Meillo
Moderator
Beiträge: 8818
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Bash Script erstellen

Beitrag von Meillo » 24.12.2019 12:57:13

rodeoric hat geschrieben: ↑ zum Beitrag ↑
24.12.2019 12:05:31
Nachtrag: Das gibt mir die Proxmox Console aus. Aber sieht nicht so aus als hätte er das gemacht was er machen sollte. Manuell jedoch funktioniert das Script.
Dec 24 12:50:01 hostname CRON[7953]: (root) CMD (/etc/fail2ban/fail2ban-ip-whitelisting.sh)

Noch jemand eine Idee :D ?
Sieht so aus, als ob der Cronjob ausgefuehrt (d.h. gestartet) worden ist. Nur das Script scheint nicht (vollstaendig) abgelaufen zu sein.

Hier kommt nun die Mail ins Spiel, die Cron verschickt, wenn der Job Ausgaben oder Fehler erzeugt hat.

Schaue dir also die Mail von root an. (Als User root den Befehl `mail' aufrufen. mit `p$' kannst du dir die letzte Mail anzeigen lassen. Mit `q' kommst du wieder raus.) Dort wird sich vermutlich eine Fehlermeldung finden.
Use ed once in a while!

rodeoric
Beiträge: 30
Registriert: 23.12.2019 15:02:54

Re: Bash Script erstellen

Beitrag von rodeoric » 24.12.2019 13:14:49

Meillo hat geschrieben: ↑ zum Beitrag ↑
24.12.2019 12:57:13
rodeoric hat geschrieben: ↑ zum Beitrag ↑
24.12.2019 12:05:31
Nachtrag: Das gibt mir die Proxmox Console aus. Aber sieht nicht so aus als hätte er das gemacht was er machen sollte. Manuell jedoch funktioniert das Script.
Dec 24 12:50:01 hostname CRON[7953]: (root) CMD (/etc/fail2ban/fail2ban-ip-whitelisting.sh)

Noch jemand eine Idee :D ?
Sieht so aus, als ob der Cronjob ausgefuehrt (d.h. gestartet) worden ist. Nur das Script scheint nicht (vollstaendig) abgelaufen zu sein.

Hier kommt nun die Mail ins Spiel, die Cron verschickt, wenn der Job Ausgaben oder Fehler erzeugt hat.

Schaue dir also die Mail von root an. (Als User root den Befehl `mail' aufrufen. mit `p$' kannst du dir die letzte Mail anzeigen lassen. Mit `q' kommst du wieder raus.) Dort wird sich vermutlich eine Fehlermeldung finden.
Hallo,

root@hostname ~ # mail
No mail for root
root@hostname ~ #

Da ist leider nichts gespeichert.

Das Script selbst sieht wie folgt aus: Die Server IP's und Domain habe ich lediglich für die öffentlichkeit ausgeblendet.

Code: Alles auswählen

#!/bin/bash
wget https://einedomain.de/homeIP.txt /etc/fail2ban/homeIP.txt
sleep 4;
cat /etc/fail2ban/homeIP.txt > /etc/fail2ban/home_ip.txt
sleep 2;
rm -r homeIP.txt
sleep 2;

IPn=`cat /etc/fail2ban/home_ip.txt`
IPo=`cat /etc/fail2ban/home_ip_old.txt`
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\ 123.123.123.123\/24\ 123.123.123.123\ 123.123.123.123\ 123.123.123.123\ 123.123.123.123\ 123.123.123.123\ "
CONFIG_FILE=/etc/fail2ban/jail.local
 
 
if [ "$IPn" != "$IPo" ]
then
sed -i "s/\(ignoreip *= *\).*/\1$IPfix$IPn/" $CONFIG_FILE
echo $IPn > /etc/fail2ban/home_ip_old.txt
service fail2ban restart
echo "Neue IP gewhitelisted: $IPn Fail2ban neu gestartet"
fi
Lg

rodney
Beiträge: 334
Registriert: 09.12.2016 04:15:59

Re: Bash Script erstellen

Beitrag von rodney » 24.12.2019 13:31:20

Was soll die Zeile:

Code: Alles auswählen

wget https://einedomain.de/homeIP.txt /etc/fail2ban/homeIP.txt
bezwecken?

Moechtest du https://einedomain.de/homeIP.txt in der Datei /etc/fail2ban/homeIP.txt speichern? Dann schau dir mal die Option -O von wget an.

Benutzeravatar
MSfree
Beiträge: 10777
Registriert: 25.09.2007 19:59:30

Re: Bash Script erstellen

Beitrag von MSfree » 24.12.2019 13:47:53

rodeoric hat geschrieben: ↑ zum Beitrag ↑
24.12.2019 13:14:49

Code: Alles auswählen

#!/bin/bash
wget https://einedomain.de/homeIP.txt /etc/fail2ban/homeIP.txt
sleep 4;
cat /etc/fail2ban/homeIP.txt > /etc/fail2ban/home_ip.txt
sleep 2;
rm -r homeIP.txt
sleep 2;

IPn=`cat /etc/fail2ban/home_ip.txt`
IPo=`cat /etc/fail2ban/home_ip_old.txt`
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\ 123.123.123.123\/24\ 123.123.123.123\ 123.123.123.123\ 123.123.123.123\ 123.123.123.123\ 123.123.123.123\ "
CONFIG_FILE=/etc/fail2ban/jail.local
 
 
if [ "$IPn" != "$IPo" ]
then
sed -i "s/\(ignoreip *= *\).*/\1$IPfix$IPn/" $CONFIG_FILE
echo $IPn > /etc/fail2ban/home_ip_old.txt
service fail2ban restart
echo "Neue IP gewhitelisted: $IPn Fail2ban neu gestartet"
fi
Die "sleeps" sind überflüssig. Was wilst du damit bezwecken? Es braucht keine "Ruhepause" zwischen simplen Operationen wie denen, die du in deinem Skript hast.

Wenn du das Skript debuggen willst, auch, um festzustellen, ob das Ding überhaupt läuft, kannst du echo-Befehle einbauen und in eine Datei speichern.

Code: Alles auswählen

#!/bin/bash
echo "skript gestartet" >> /root/crondebug.txt
echo "Schritt 1" >> /root/crondebug.txt
wget https://einedomain.de/homeIP.txt /etc/fail2ban/homeIP.txt
echo "Schritt 2" >> /root/crondebug.txt
cat /etc/fail2ban/homeIP.txt > /etc/fail2ban/home_ip.txt
echo "Schritt 3" >> /root/crondebug.txt
rm -r homeIP.txt
echo "Schritt 4" >> /root/crondebug.txt

IPn=`cat /etc/fail2ban/home_ip.txt`
IPo=`cat /etc/fail2ban/home_ip_old.txt`
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\ 123.123.123.123\/24\ 123.123.123.123\ 123.123.123.123\ 123.123.123.123\ 123.123.123.123\ 123.123.123.123\ "
CONFIG_FILE=/etc/fail2ban/jail.local
echo "Schritt 5" >> /root/crondebug.txt
if [ "$IPn" != "$IPo" ]
then
sed -i "s/\(ignoreip *= *\).*/\1$IPfix$IPn/" $CONFIG_FILE
echo $IPn > /etc/fail2ban/home_ip_old.txt
echo "Schritt 6" >> /root/crondebug.txt
service fail2ban restart
echo "Neue IP gewhitelisted: $IPn Fail2ban neu gestartet"
fi
echo "skript beendet" >> /root/crondebug.txt
Das produziert die Datei /root/crondebug.txt, wenn es läuft und schreibt ein paar Marken in die Datei, die Rückschlüsse zuläßt, wie wet das Skript läuft.

rodeoric
Beiträge: 30
Registriert: 23.12.2019 15:02:54

Re: Bash Script erstellen

Beitrag von rodeoric » 24.12.2019 15:00:18

MSfree hat geschrieben: ↑ zum Beitrag ↑
24.12.2019 13:47:53
rodeoric hat geschrieben: ↑ zum Beitrag ↑
24.12.2019 13:14:49

Code: Alles auswählen

#!/bin/bash
wget https://einedomain.de/homeIP.txt /etc/fail2ban/homeIP.txt
sleep 4;
cat /etc/fail2ban/homeIP.txt > /etc/fail2ban/home_ip.txt
sleep 2;
rm -r homeIP.txt
sleep 2;

IPn=`cat /etc/fail2ban/home_ip.txt`
IPo=`cat /etc/fail2ban/home_ip_old.txt`
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\ 123.123.123.123\/24\ 123.123.123.123\ 123.123.123.123\ 123.123.123.123\ 123.123.123.123\ 123.123.123.123\ "
CONFIG_FILE=/etc/fail2ban/jail.local
 
 
if [ "$IPn" != "$IPo" ]
then
sed -i "s/\(ignoreip *= *\).*/\1$IPfix$IPn/" $CONFIG_FILE
echo $IPn > /etc/fail2ban/home_ip_old.txt
service fail2ban restart
echo "Neue IP gewhitelisted: $IPn Fail2ban neu gestartet"
fi
Die "sleeps" sind überflüssig. Was wilst du damit bezwecken? Es braucht keine "Ruhepause" zwischen simplen Operationen wie denen, die du in deinem Skript hast.

Wenn du das Skript debuggen willst, auch, um festzustellen, ob das Ding überhaupt läuft, kannst du echo-Befehle einbauen und in eine Datei speichern.

Code: Alles auswählen

#!/bin/bash
echo "skript gestartet" >> /root/crondebug.txt
echo "Schritt 1" >> /root/crondebug.txt
wget https://einedomain.de/homeIP.txt /etc/fail2ban/homeIP.txt
echo "Schritt 2" >> /root/crondebug.txt
cat /etc/fail2ban/homeIP.txt > /etc/fail2ban/home_ip.txt
echo "Schritt 3" >> /root/crondebug.txt
rm -r homeIP.txt
echo "Schritt 4" >> /root/crondebug.txt

IPn=`cat /etc/fail2ban/home_ip.txt`
IPo=`cat /etc/fail2ban/home_ip_old.txt`
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\ 123.123.123.123\/24\ 123.123.123.123\ 123.123.123.123\ 123.123.123.123\ 123.123.123.123\ 123.123.123.123\ "
CONFIG_FILE=/etc/fail2ban/jail.local
echo "Schritt 5" >> /root/crondebug.txt
if [ "$IPn" != "$IPo" ]
then
sed -i "s/\(ignoreip *= *\).*/\1$IPfix$IPn/" $CONFIG_FILE
echo $IPn > /etc/fail2ban/home_ip_old.txt
echo "Schritt 6" >> /root/crondebug.txt
service fail2ban restart
echo "Neue IP gewhitelisted: $IPn Fail2ban neu gestartet"
fi
echo "skript beendet" >> /root/crondebug.txt
Das produziert die Datei /root/crondebug.txt, wenn es läuft und schreibt ein paar Marken in die Datei, die Rückschlüsse zuläßt, wie wet das Skript läuft.
Hallo,

ich habe beides nun probiert. Einmal manuell gestartet und einmal via crontab. Manuell hat funktioniert wie es soll, Crontab wurde keine IP eingetragen.
Die Logs sind auch nicht wirklich aufschlussreich.

Manuell:

Code: Alles auswählen

skript gestartet
Schritt 1
Schritt 2
Schritt 3
Schritt 4
Schritt 5
Schritt 6
skript beendet
Crontab:

Code: Alles auswählen

skript gestartet
Schritt 1
Schritt 2
Schritt 3
Schritt 4
Schritt 5
skript beendet
Lg

Benutzeravatar
MSfree
Beiträge: 10777
Registriert: 25.09.2007 19:59:30

Re: Bash Script erstellen

Beitrag von MSfree » 25.12.2019 15:56:23

rodeoric hat geschrieben: ↑ zum Beitrag ↑
24.12.2019 15:00:18
Die Logs sind auch nicht wirklich aufschlussreich.
Warum denn nicht?

Ich sehe da sofort, daß er Schritt 6 nicht ausführt, wenn das Script vom cron gestartet wird.
Mit anderen Worten, das if wird nicht abgearbeitet, weil IPn und IPo nicht unterschiedlich sind.

Wenn ich mir dann ansehe, wie IPo und IPn erzeugt werden, dann fallen mir da so einige Ungereimtheiten auf.

Code: Alles auswählen

wget https://einedomain.de/homeIP.txt /etc/fail2ban/homeIP.txt
liest irgendwas.

Code: Alles auswählen

cat /etc/fail2ban/homeIP.txt > /etc/fail2ban/home_ip.txt
wollte du hier nicht

Code: Alles auswählen

mv /etc/fail2ban/homeIP.txt /etc/fail2ban/home_ip.txt
aufrufen, um die Datei umzubenennen?

Das erspart dir dann nämlich

Code: Alles auswählen

rm -r homeIP.txt
was vom cron ausgeführt ohnehin nicht funkioniert, weil du die Datei im aktuellen Arbeitverzeichnis suchst (absoluter Pfad fehlt). Und in welchem Arbeitverzeichnis cron arbeitet, weill ich garnicht ergründen müssen.

Zu guter letzt willst du den alten Zustand in /etc/fail2ban/home_ip_old.txt sichern, was ausserhalb des ifs stattfinden sollte.

rodeoric
Beiträge: 30
Registriert: 23.12.2019 15:02:54

Re: Bash Script erstellen

Beitrag von rodeoric » 25.12.2019 18:39:15

Hallo,

danke für deine Rückmeldung.
liest irgendwas.
Korrekt, es liest die Datei von meinem Webspace mit dem Namen "homeIP.txt" und sichert diese auf dem Server unter "homeIP.txt"
wollte du hier nicht
Verstehe zwar nicht ganz was Du damit meinst aber es ruft die gespeicherte Datei auf und legt diese in einer neuen Datei ab.
aufrufen, um die Datei umzubenennen?
Ich dachte move ändert einfach nur den Namen, denn die alte Datei ist ja dann weg und unter dem neuen Namen aufrufbar. Sehe da keinen Fehler.
was vom cron ausgeführt ohnehin nicht funkioniert, weil du die Datei im aktuellen Arbeitverzeichnis suchst (absoluter Pfad fehlt). Und in welchem Arbeitverzeichnis cron arbeitet, weill ich garnicht ergründen müssen.
Das hört sich schlüssig an, der absolute Pfad fehlt, gebe ich Dir recht und das habe ich übersehen.
Mit anderen Worten, das if wird nicht abgearbeitet, weil IPn und IPo nicht unterschiedlich sind.
Das ist ebenfalls korrekt, ich mache immer vor dem testen beide Dateien leer da es sonst nicht funktioniert, verstehe ich auch und wurde beim testen immer so gemacht.
Zu guter letzt willst du den alten Zustand in /etc/fail2ban/home_ip_old.txt sichern, was ausserhalb des ifs stattfinden sollte.
Ja, das ist Quasi das Dokument in dem die aktuelle IP so zu sagen drinnen liegt, beim nächsten Run sollte er eigentlich die neue mit dem Dokument der alten abgleichen, sind diese identisch muss er weder etwas in jail.local hineinschreiben und auch den "service fail2ban restart" nicht ausführen, wozu auch wenn es keine Änderung gab.

Das es sicher hier auch andere Wege gibt die zum Erfolg führen, ist mir klar. Darum ging es doch aber nicht, ich habe gebastelt, es funktioniert manuell und den Fehler wollte ich hier mit euch gemeinsam suchen.

Ich habe jetzt mal den Pfad angepasst und versuche es nun nochmal auszuführen. Ich werde gleich berichten.

Benutzeravatar
Meillo
Moderator
Beiträge: 8818
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Bash Script erstellen

Beitrag von Meillo » 25.12.2019 18:57:51

rodeoric hat geschrieben: ↑ zum Beitrag ↑
25.12.2019 18:39:15
Das es sicher hier auch andere Wege gibt die zum Erfolg führen, ist mir klar. Darum ging es doch aber nicht, ich habe gebastelt, es funktioniert manuell und den Fehler wollte ich hier mit euch gemeinsam suchen.
Das ist auch eine gute Idee so.

Uns faellt es manchmal schwer, uns in Scripte einzulesen, teilweise sehr anders sind als wir sie schreiben wuerden oder ueberhaupt wie wir das Problem angehen wuerden. Wenn es dann noch ein Problem ist, dass wir nicht selber bei uns nachstellen und testen koennen, wird es noch schwieriger zu helfen. Dass wir uns hier doch recht schwer tun, zu helfen, liegt einfach an der Situation. Dabei bist du freundlich, willst dazulernen und reagierst schnell, was schonmal eine tolle Ausgangsbasis ist. Vielleicht musst du hier eher Geduld mit uns haben als wir mit dir. ;-)


... vielleicht findet jemand hier mal die Zeit und Lust eine Version des Scripts zu schreiben in der Art wie man es selber machen wuerde, als Vergleich. Das koennte die Diskussion zusaetzlich befruchten.

Interessant wird's eh am Ende, wenn das Problem geloest ist und wir uns anschauen koennen, wo das Problem lag, welcher Art es war, und uns dann ueberlegen koennen, wie man diese Art von Problem zukuenftig vermeidet.


Also, nur weiter hier. Der Thread ist wertvoll.
Use ed once in a while!

rodeoric
Beiträge: 30
Registriert: 23.12.2019 15:02:54

Re: Bash Script erstellen

Beitrag von rodeoric » 25.12.2019 19:13:06

Meillo hat geschrieben: ↑ zum Beitrag ↑
25.12.2019 18:57:51
rodeoric hat geschrieben: ↑ zum Beitrag ↑
25.12.2019 18:39:15
Das es sicher hier auch andere Wege gibt die zum Erfolg führen, ist mir klar. Darum ging es doch aber nicht, ich habe gebastelt, es funktioniert manuell und den Fehler wollte ich hier mit euch gemeinsam suchen.
Das ist auch eine gute Idee so.

Uns faellt es manchmal schwer, uns in Scripte einzulesen, teilweise sehr anders sind als wir sie schreiben wuerden oder ueberhaupt wie wir das Problem angehen wuerden. Wenn es dann noch ein Problem ist, dass wir nicht selber bei uns nachstellen und testen koennen, wird es noch schwieriger zu helfen. Dass wir uns hier doch recht schwer tun, zu helfen, liegt einfach an der Situation. Dabei bist du freundlich, willst dazulernen und reagierst schnell, was schonmal eine tolle Ausgangsbasis ist. Vielleicht musst du hier eher Geduld mit uns haben als wir mit dir. ;-)


... vielleicht findet jemand hier mal die Zeit und Lust eine Version des Scripts zu schreiben in der Art wie man es selber machen wuerde, als Vergleich. Das koennte die Diskussion zusaetzlich befruchten.

Interessant wird's eh am Ende, wenn das Problem geloest ist und wir uns anschauen koennen, wo das Problem lag, welcher Art es war, und uns dann ueberlegen koennen, wie man diese Art von Problem zukuenftig vermeidet.


Also, nur weiter hier. Der Thread ist wertvoll.
Hallo Meillo,

vielen Dank auch hier wieder für die netten Worte.

Es sieht aktuell sehr gut aus, es lag wohl tatsächlich an den direkten Verzeichnispfaden die ich wohl übersehen habe und den Fehler "wget..." habe ich auch gefunden, die IP wurde nämlich in's root Verzeichnis geschoben und dann kann der nächste Befehl diese logischerweise auch nicht mehr lesen :D

Ich lasse es nun nochmal durchlaufen und berichte.

Ich bin happy wenn es läuft, manchmal sieht man halt den Wald vor lauter Bäumen nicht :P

Lg

Benutzeravatar
MSfree
Beiträge: 10777
Registriert: 25.09.2007 19:59:30

Re: Bash Script erstellen

Beitrag von MSfree » 25.12.2019 20:23:12

rodeoric hat geschrieben: ↑ zum Beitrag ↑
25.12.2019 18:39:15
Verstehe zwar nicht ganz was Du damit meinst aber es ruft die gespeicherte Datei auf und legt diese in einer neuen Datei ab.
Sorry, mein Post war zwischen Mittagessen und Weihnachtsgans etwas dahingeschludert. :mrgreen:

Ich wollte sagen, daß du eine Datei mit wget holst, mit cat eine Kopie anlegst und dann das Original mit rm löschst. Das kann man auch einfacher haben, indem man die Datei mit mv umbenennt.
Zu guter letzt willst du den alten Zustand in /etc/fail2ban/home_ip_old.txt sichern, was ausserhalb des ifs stattfinden sollte.
Ja, das ist Quasi das Dokument in dem die aktuelle IP so zu sagen drinnen liegt, beim nächsten Run sollte er eigentlich die neue mit dem Dokument der alten abgleichen, sind diese identisch muss er weder etwas in jail.local hineinschreiben und auch den "service fail2ban restart" nicht ausführen, wozu auch wenn es keine Änderung gab.
So hatte ich deine Idee auch verstanden. Allerdings sollte man die old-Datei in jedem Fall erzeugen und nicht nur, wenn das Skript in das if verzeigt. Sonst gibt es das old ggfls. nicht

rodeoric
Beiträge: 30
Registriert: 23.12.2019 15:02:54

Re: Bash Script erstellen

Beitrag von rodeoric » 25.12.2019 21:20:47

MSfree hat geschrieben: ↑ zum Beitrag ↑
25.12.2019 20:23:12
rodeoric hat geschrieben: ↑ zum Beitrag ↑
25.12.2019 18:39:15
Verstehe zwar nicht ganz was Du damit meinst aber es ruft die gespeicherte Datei auf und legt diese in einer neuen Datei ab.
Sorry, mein Post war zwischen Mittagessen und Weihnachtsgans etwas dahingeschludert. :mrgreen:

Ich wollte sagen, daß du eine Datei mit wget holst, mit cat eine Kopie anlegst und dann das Original mit rm löschst. Das kann man auch einfacher haben, indem man die Datei mit mv umbenennt.
Zu guter letzt willst du den alten Zustand in /etc/fail2ban/home_ip_old.txt sichern, was ausserhalb des ifs stattfinden sollte.
Ja, das ist Quasi das Dokument in dem die aktuelle IP so zu sagen drinnen liegt, beim nächsten Run sollte er eigentlich die neue mit dem Dokument der alten abgleichen, sind diese identisch muss er weder etwas in jail.local hineinschreiben und auch den "service fail2ban restart" nicht ausführen, wozu auch wenn es keine Änderung gab.
So hatte ich deine Idee auch verstanden. Allerdings sollte man die old-Datei in jedem Fall erzeugen und nicht nur, wenn das Skript in das if verzeigt. Sonst gibt es das old ggfls. nicht
Hallöle,

kein Problem.

Es läuft nun wie es soll :D

Code: Alles auswählen

#!/bin/bash
rm -r /etc/fail2ban/home_ip.txt
wget https://eine-domain.de/homeIP.txt
mv /root/homeIP.txt /etc/fail2ban/home_ip.txt

IPn=`cat /etc/fail2ban/home_ip.txt`
IPo=`cat /etc/fail2ban/home_ip_old.txt`
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\  "
CONFIG_FILE=/etc/fail2ban/jail.local
if [ "$IPn" != "$IPo" ]
then
sed -i "s/\(ignoreip *= *\).*/\1$IPfix$IPn/" $CONFIG_FILE
echo $IPn > /etc/fail2ban/home_ip_old.txt
/etc/init.d/fail2ban restart

echo "Neue IP gewhitelisted: $IPn Fail2ban neu gestartet"
fi
Crontab sieht wie folgt aus und sollte nun aller 12 Stunden starten:

Code: Alles auswählen

* 12 * * * bash /etc/fail2ban/fail2ban-ip-whitelisting.sh
Nun besteht noch immer die Möglichkeit zu kürzen oder das ganze mit einem weiteren Script zu kombinieren das automatisch die gebannten Adressen in die Blacklist aufnimmt.

Ich danke schon mal bis hier her, das hat wunderbar geklappt mit eurer Hilfe. :THX: :THX: :THX:

Lg

Benutzeravatar
Meillo
Moderator
Beiträge: 8818
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Bash Script erstellen

Beitrag von Meillo » 25.12.2019 22:22:15

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.
Use ed once in a while!

Benutzeravatar
Meillo
Moderator
Beiträge: 8818
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Bash Script erstellen

Beitrag von Meillo » 25.12.2019 22:25:54

rodeoric hat geschrieben: ↑ zum Beitrag ↑
25.12.2019 21:20:47
Crontab sieht wie folgt aus und sollte nun aller 12 Stunden starten:

Code: Alles auswählen

* 12 * * * bash /etc/fail2ban/fail2ban-ip-whitelisting.sh
So laeuft der Job von 12:00 bis 12:59 jede Minute und sonst nicht.

Du willst wohl eher sowas:

Code: Alles auswählen

0 12,24 * * * ...
D.h. um 12:00 und um 24:00.



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.
Use ed once in a while!

Benutzeravatar
Meillo
Moderator
Beiträge: 8818
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Bash Script erstellen

Beitrag von Meillo » 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:

Code: Alles auswählen

echo `date` `cat "$new"` >>/var/log/home_ip.log
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.
Use ed once in a while!

rodeoric
Beiträge: 30
Registriert: 23.12.2019 15:02:54

Re: Bash Script erstellen

Beitrag von rodeoric » 25.12.2019 23:11:10

Meillo hat geschrieben: ↑ zum Beitrag ↑
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:

Code: Alles auswählen

echo `date` `cat "$new"` >>/var/log/home_ip.log
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 :D
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 ?

Code: Alles auswählen

mv cd /root/homeIP.txt /etc/fail2ban/home_ip.txt 
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 :D
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 :D

Lg
rodeoric

Benutzeravatar
Meillo
Moderator
Beiträge: 8818
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Bash Script erstellen

Beitrag von Meillo » 26.12.2019 09:54:48

rodeoric hat geschrieben: ↑ zum Beitrag ↑
25.12.2019 23:11:10
ich bin schon froh das es jetzt überhaupt läuft :D
Kann ich mir vorstellen. ;-)

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 ?
Ich meine, dass manche deiner Dateioperationen im aktuellen Verzeichnis arbeiten, z.B. legt wget die heruntergeladene Datei dorthin. Spaeter machst du dann den mv von /root ... was bedeutet, dass sich wget in /root befunden haben muss. Diese Information ist aber nirgends explizit abgelegt oder gesichert. Es ist mehr zufaellig so, dass alles zusammen passt. Was ich mir vorstelle ist diese Zeile irgendwo am Anfang des Scripts:

Code: Alles auswählen

cd /root
Damit ist explizit festgelegt in welchem Arbeitsverzeichnis das Script laeuft ... egal aus welchem es ausgerufen wird oder wie die konkrete Cron-Implementierung sich diesbezueglich verhaelt.

Code: Alles auswählen

mv cd /root/homeIP.txt /etc/fail2ban/home_ip.txt 
Das geht so nicht. (Dieser Befehl wuerde die Datei `cd' im aktuellen Verzeichnis und die Datei `/root/homeIP.txt' beide in das Zielverzeichnis `/etc/fail2ban/home_ip.txt' verschieben. Da das Zielverzeichnis aber kein Verzeichnis ist, sondern eine Datei, wird der Befehl fehlschlagen. Zudem kaeme eine Fehlermeldung, dass im aktuellen Arbeitsverzeichnis keine Datei `cd' zu finden ist.) Du brauchst zwei Befehle, einmal `cd' und einmal `mv' ... wobei das cd fuer diesen mv-Befehl nicht noetig ist, weil er ja nur absolute Pfade enthaelt. Der wget-Befehl ist derjenige, der die heruntergeladene Datei ins aktuelle Verzeichnis legt.

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 ?

Code: Alles auswählen

0 12 * * * ...
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".
Oh, es muss ``12,0'' heissen. ;-)

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 :D
Du kannst es nicht finden. Wenn du meinen Post (bei Tageslicht) nochmal in Ruhe liest, wirst du sehen, dass das eine Idee ist, wie *ich* ein Logging fuer die vorherigen IP-Adressen einrichten wuerde ... statt der Old-Datei und mit Historie.
Use ed once in a while!

Benutzeravatar
Meillo
Moderator
Beiträge: 8818
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Bash Script erstellen

Beitrag von Meillo » 26.12.2019 10:06:45

Hier nochmal eine Ueberarbeitung:

Code: Alles auswählen

#!/bin/bash

myip=/etc/fail2ban/home_ip.txt
log=/var/log/home_ip.log
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\  "

ip=`wget -O - https://eine-domain.de/homeIP.txt`

if [ "$ip" = `cat "$myip"` ]; then
	exit
fi

echo "$ip" >"$myip"
echo "`date +%F\ %H:%M:%S` $ip" >>"$log"
sed -i "s/\(ignoreip *= *\).*/\1$IPfix$ip/" "$config_file"
/etc/init.d/fail2ban restart

echo "Neue IP gewhitelisted: $ip; Fail2ban neu gestartet"
Ich habe die Old-Datei entfernt. Die aktuelle, neue IP-Adresse halte ich fuer die Verarbeitung in der Variable, statt sie gleich in die Datei zu schreiben.

Zudem gibt es jetzt das Log.

Das Script wird zunehmend uebersichtlicher, wie ich finde. (Das ist ein gutes Zeichen.)


Jetzt koennte man noch das Config-Update verbessern ... vermutlich am besten mit einer separaten, generierten Config-Datei, die man in die Hauptconfig included. Ich kenne mich aber mit fail2ban nicht aus, um zu wissen, wie das dort laeuft. Vielleicht kann da jemand anderes weiterhelfen?
Use ed once in a while!

rodeoric
Beiträge: 30
Registriert: 23.12.2019 15:02:54

Re: Bash Script erstellen

Beitrag von rodeoric » 26.12.2019 17:25:11

Hallo,

auch hier nochmal vielen Dank. Nur dazu brauch ich Ruhe und das wird jetzt knapp zwischen den Jahren.

Vielleicht schaust nochmal kurz über den Crontab drüber, den hätte ich gern um 12 Uhr Mittags einmal gestartet, dann wäre es erstmal so das es läuft und alles weitere nach und nach wenn Zeit ist.

Lg
rodeoric

Benutzeravatar
Meillo
Moderator
Beiträge: 8818
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Bash Script erstellen

Beitrag von Meillo » 26.12.2019 17:31:39

rodeoric hat geschrieben: ↑ zum Beitrag ↑
26.12.2019 17:25:11
auch hier nochmal vielen Dank. Nur dazu brauch ich Ruhe und das wird jetzt knapp zwischen den Jahren.
Klar, kein Problem.
Vielleicht schaust nochmal kurz über den Crontab drüber, den hätte ich gern um 12 Uhr Mittags einmal gestartet,
Habe ich oben schon getan. ;-)

Hier nochmal:

Code: Alles auswählen

0 12 * * * ...
(Lies: Minute 0, Stunde 12, jeden Tag, jeden Monat, jeden Wochentag.)

dann wäre es erstmal so das es läuft und alles weitere nach und nach wenn Zeit ist.
Nur kein Stress! :-)
Use ed once in a while!

rodeoric
Beiträge: 30
Registriert: 23.12.2019 15:02:54

Re: Bash Script erstellen

Beitrag von rodeoric » 26.12.2019 20:30:42

Nun bin ich aber verwirrt :D
* 12 * * * bash /etc/fail2ban/fail2ban-ip-whitelisting.sh
So laeuft der Job von 12:00 bis 12:59 jede Minute und sonst nicht.
Ich möchte ja nicht das er minütlich ausgeführt wird sondern eigentlich nur einmal um 12 Uhr Mittag :D

Das war ja mein bisheriger aus einem älteren Kommentar, ich sehe da keinen Unterschied.
* 12 * * * bash /etc/fail2ban/fail2ban-ip-whitelisting.sh
Vielleicht reden wir da gerade aneinander vorbei, aber ich verstehe von 12:00 Uhr - 12:59 Uhr das er dann wirklich um die 59 mal ausgeführt wird, ist das so korrekt ? :mrgreen:

Ich wünsche dennoch allen hier einen guten Rutsch ins neue Jahr.

Lg
rodeoric

Benutzeravatar
Meillo
Moderator
Beiträge: 8818
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Bash Script erstellen

Beitrag von Meillo » 26.12.2019 20:34:06

Das erste Zeichen muss eine Null und kein Stern sein.
Use ed once in a while!

rodeoric
Beiträge: 30
Registriert: 23.12.2019 15:02:54

Re: Bash Script erstellen

Beitrag von rodeoric » 26.12.2019 20:56:37

Meillo hat geschrieben: ↑ zum Beitrag ↑
26.12.2019 20:34:06
Das erste Zeichen muss eine Null und kein Stern sein.
Danke,

das ging aus dem Beitrag irgendwie nicht hervor. Nun ist es aber klar und angepasst.

Dankeschön.

Lg

Antworten