Zugrifffe auf das Webinterface einer CCU/RM loggen/überwachen

Moderator: Co-Administratoren

Xel66
Beiträge: 14169
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 587 Mal
Danksagung erhalten: 1501 Mal

Zugrifffe auf das Webinterface einer CCU/RM loggen/überwachen

Beitrag von Xel66 » 04.11.2023, 13:20

Da ja regelmäßig von Hackerangriffen auf CCUs berichtet wird (die Gefahr hält sich zwar in Grenzen, wenn keine Portweiterleitung eingerichtet ist), würde ich trotzdem gern die Logdatei des Webservers der WebUI auf unbekannte Zugriffe überwachen. Das geht auf der Konsole recht einfach mit tail -f /var/log/lighttpd-access.log | egrep -v "(192\.168\.178\.3|127\.0\.0\.1)" . Hierbei werden die Ausgaben in die Konsole geschrieben, wenn sie nicht vom zugreifenden PC (Beispiel-Adresse ;-) ) oder von der CCU selbst (localhost-Adresse) kommen. Klappt soweit.

Nun würde ich das gern um ein Schreiben der Zugriffe in eine separate Datei (und vielleicht später auch in eine Systemvariable) erweitern. Für das Schreiben in eine Ausgabedatei brauche ich im Normalfall nur mit ">> /tmp/access.txt" an den Befehl anhängen.Die wird Datei zwar angelegt, aber leider nicht mit Inhalt gefüllt, da dieses erst nach Abschluss des tail-Befehls passieren würde. Also das laufende Umleiten der Konsolenausgabe in die Datei funktioniert nicht. Grundsätzlich wäre das mit einer zusätzlichen Option für (e)grep möglich, aber die Option "--line-buffered" ist wohl auf Raspberrymatic in der BusyBox nicht verfügbar (Meldung: egrep: unrecognized option '--line-buffered'). Welche Optionen habe ich noch? Jemand eine Idee? Vielen Dank.

Gruß Xel66
Zuletzt geändert von Xel66 am 09.11.2023, 16:57, insgesamt 1-mal geändert.
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

Benutzeravatar
Henke
Beiträge: 1526
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 141 Mal
Danksagung erhalten: 306 Mal

Re: Zugrifffe auf das Webinterfache einer CCU/RM loggen/überwachen

Beitrag von Henke » 04.11.2023, 15:28

tail liefert dir die letzte Zeile. Wie realisierst du, das jede neue/letzte Zeile verarbeitet wird?
Zyklisch aufgerufen oder bei Änderung der Datei wird dazu führen das viele Zeilen überlesen werden.
Die lighttpd-access.log ist bei mir recht groß, so das ich diesen log abgeschaltet habe. Anders herum, ist damit eine zyklische Auswertung der gesamten Datei recht rechenintensiv.
Sauber wäre es über einen UPD Listen die Werte zu filtern und dann entsprechend eine Warnung auszugeben.

Benutzeravatar
Henke
Beiträge: 1526
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 141 Mal
Danksagung erhalten: 306 Mal

Re: Zugrifffe auf das Webinterfache einer CCU/RM loggen/überwachen

Beitrag von Henke » 04.11.2023, 15:36

Nachtrag:
Vielleicht noch ein anderer Ansatz.
lighttpd hat sehr viele Möglichkeiten der Konfiguration. Dort können die Zugriffe umgeleitet/gesperrt werden. Wenn jetzt bestimmte Adressen in einer anderen Datei geloggt werden, musst du nur noch kontrollieren, ob diese Datei nicht leer ist.

Xel66
Beiträge: 14169
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 587 Mal
Danksagung erhalten: 1501 Mal

Re: Zugrifffe auf das Webinterfache einer CCU/RM loggen/überwachen

Beitrag von Xel66 » 04.11.2023, 16:08

Henke hat geschrieben:
04.11.2023, 15:28
tail liefert dir die letzte Zeile. Wie realisierst du, das jede neue/letzte Zeile verarbeitet wird?
Das macht ja der nachgestellt Gruppe-Aufruf schon. Er filtert die Ausgaben auch und unterdrückt die Ausgabe lokaler (eigener Techner und localhost) Zugriffe. Wie geschrieben, auf der Konsole funktioniert es ja. Nur leider landen diese Konsolen-Ausgaben nicht in der gewünschten Datei, da dazu jedes Mal grep beendet werden müsste. Das wird unter anderen Linux-Umgebungen eben mit der Option --line-buffered umgangen, die in der grep-Version der Buidroot-Umgebung einer Raspberrymatic nicht implementiert ist.
Henke hat geschrieben:
04.11.2023, 15:28
Zyklisch aufgerufen oder bei Änderung der Datei wird dazu führen das viele Zeilen überlesen werden.
Genau darum wäre mir ja die Lösung mit dem Zeilenpuffer am liebsten. Die hätte das Problem nicht.

Ziel eigentlich ist eine Systemvariable mit Zeitpunkt und IP des letzten fremden Zugriffes zu beschreiben. Das Aktualisieren dieser Variable könnte dann auch andere Aktionen (Push, Mail, Warnlicht) triggern. Darum würde ich eben eine schlanke wie tail und lokale (im Sinne auf der CCU) bevorzugen. Ich könnte die lighttp.log auch auf einem externen Loghost loggen und dort auswerten. Aber das ist dann auch nicht mehr lokal und verkompliziert wieder das Triggern von Aktionen (wäre aber grundsätzlich handhabbar). Trotzden danke erst mal. Ich suche weiter.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

Benutzeravatar
Henke
Beiträge: 1526
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 141 Mal
Danksagung erhalten: 306 Mal

Re: Zugrifffe auf das Webinterfache einer CCU/RM loggen/überwachen

Beitrag von Henke » 04.11.2023, 16:40

egrep geht die ganze Datei durch. Nicht optimal!
Das dürfte laufen:

Code: Alles auswählen

cat /var/log/lighttpd-access.log | egrep -v "(192\.168\.178\.3|127\.0\.0\.1)" | tail -n1 >> /tmp/last_access.txt
Xel66 hat geschrieben:
04.11.2023, 16:08
Ich könnte die lighttp.log auch auf einem externen Loghost loggen und dort auswerten.
Warum, das kann die CCU auch?

jp112sdl
Beiträge: 12116
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 849 Mal
Danksagung erhalten: 2150 Mal
Kontaktdaten:

Re: Zugrifffe auf das Webinterfache einer CCU/RM loggen/überwachen

Beitrag von jp112sdl » 04.11.2023, 16:47

Henke hat geschrieben:
04.11.2023, 16:40
egrep geht die ganze Datei durch. Nicht optimal!
Wäre es dann nicht besser, ein auf die Datei als Daemon zu persistieren?

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

Benutzeravatar
Henke
Beiträge: 1526
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 141 Mal
Danksagung erhalten: 306 Mal

Re: Zugrifffe auf das Webinterfache einer CCU/RM loggen/überwachen

Beitrag von Henke » 04.11.2023, 18:06

Wie schon gesagt, ich würde da anders dran gehen. Nicht über die log Datei.

jp112sdl
Beiträge: 12116
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 849 Mal
Danksagung erhalten: 2150 Mal
Kontaktdaten:

Re: Zugrifffe auf das Webinterfache einer CCU/RM loggen/überwachen

Beitrag von jp112sdl » 04.11.2023, 19:20

Interessant ist es auch, eingehende Verbindungen mit iptables zu loggen, zu filtern und entsprechend dann in eine Datei oder Syslog umleiten
https://serverfault.com/questions/45734 ... -to-a-port

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

Xel66
Beiträge: 14169
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 587 Mal
Danksagung erhalten: 1501 Mal

Re: Zugrifffe auf das Webinterfache einer CCU/RM loggen/überwachen

Beitrag von Xel66 » 04.11.2023, 20:10

jp112sdl hat geschrieben:
04.11.2023, 16:47
Wäre es dann nicht besser, ein auf die Datei als Daemon zu persistieren?
Ich dachte eigentlich, das habe ich mit meiner urprünglichen Variante getan, bzw. die Vorarbeit dazu geleistet. Tail überwacht die Logeinträge und übergibt stetig die letzte Zeile an grep. Grep wiederum filtert seine Ausgaben entsprechend meiner Vorgagen (eigene IPs sowie localhost aussortieren). Das Ergebnis wird auf der Konsole dargestellt. Soweit funktioniert die Lösung ja auf der Konsole. Dieses als Daemon einzurichten war das Endziel, aber eben muss es erst mal auf der Konsole laufen.

Das Einzige was momentan eben nicht funktioniert ist, das was auf der Konsole geschrieben wird (wenn grep gefiltert hat, dann ist das nichts mehr) in eine Datei umzulenken. Und das ist mein Problem. Ich hielt das eigenlich für eine recht schlanke Lösung, weil durch tail eben nur die letzte geloggte Zeile an grep weitergeleitet wird und grep sich nicht um die ganze Datei, sondern nur um den Output von tail kümmern muss. Nur dass eben eine Option (----line-buffered) in dem grep aus dem Buildroot feht, die das Schreiben in eine Datei nicht möglich macht.

Der Output von iptables ist mir zu ungenau. Mit der tail-Geschichte sehe ich auch gleich, was genau abgerufen wurde oder welche Befehle z.B. an Port 8181 gesendet wurden im Klartext.
Henke hat geschrieben:
04.11.2023, 16:40
Das dürfte laufen:

Code: Alles auswählen

cat /var/log/lighttpd-access.log | egrep -v "(192\.168\.178\.3|127\.0\.0\.1)" | tail -n1 >> /tmp/last_access.txt
Danke, das schreibt zumindest in die Datei. Aber eben mit dem Nachteil, dass grep durch die ganze Datei geht und es m.E. spätestens beim Logrotate zu Problemen kommt.
Henke hat geschrieben:
04.11.2023, 16:40
Warum, das kann die CCU auch?
Ja kann sie (läuft ja mit dem Befehl aus meinem Ursprungspost), aber eben mit dem fehlenden passenden Output (als Datei oder Sytemvariable). Und da hänge ich fest.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

Xel66
Beiträge: 14169
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 587 Mal
Danksagung erhalten: 1501 Mal

Re: Zugrifffe auf das Webinterfache einer CCU/RM loggen/überwachen

Beitrag von Xel66 » 04.11.2023, 22:19

Bin etwas weiter. Habe grep durch awk ersetzt. Mit

Code: Alles auswählen

 tail -f /var/log/lighttpd-access.log  | awk /^192.168.178.3/ >> /tmp/access.txt
wird nun schon mal was in die Datei geschrieben. Jetzt stehe ich mit der Syntax von awk noch auf Kriegsfuß. Die Negierung (also Filterung) funktioniert noch nicht so richtig und auch nicht die Verarbeitung mehrere Suchworte (IP-Adressen). Keep trying.

EDIT: Habe nun eine vorläufige Lösung gefunden, wie ich die Zugriffe gefiltert in eine Datei schreibe. Der aktuelle Code lautet:

Code: Alles auswählen

tail -f /var/log/lighttpd-access.log  | awk '!/^192.168.178.3/ && !/^192.168.178.252/ && !/^127.0.0.1/ { print $0 }' >> /tmp/access.txt
Hierbei ist die ..178.3 der lokale PC, die ..178.252 mein NAS, auf dem der Historian läuft und 127.0.0.1 localhost - also die CCU selbst. Mit dem Ausrufezeichen davor filtere ich diese Adressen aus der Datei und übrig bleiben im Moment (als Test) nur Zugriffe via "meine-homematic". Das werde ich im Endausbau auch noch filtern. Um Zugriffe via tailscale muss ich mich auch noch kümmern. Nun schaue ich mal, wie ich die IP des letzten fremden Zugriffes in eine Systemvariable bekomme. Im Grunde reicht es ja aus, wenn ich zyklisch ein tail/awk auf die access.txt laufen lasse und den Output gefiltert auf die IP (und vielleicht auf Änderung geprüft) in eine Systemvariable schreiben lasse (tail -n 1 /tmp/access.txt | awk '{print $1}'). Das kann man ja per ReGa-Script über stdout machen. Wobei ich ja zyklisch laufende Scripts so gar nicht mag. Nja, einen Tod muss man sterben. Und persistieren muss ich das auch noch. Still in progress.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

Antworten

Zurück zu „Sonstige Steuerungen und Visualisierungen“