Hauptmenü

Angriffsversuch auf fhem?

Begonnen von MichaelO, 07 Juni 2020, 21:47:31

Vorheriges Thema - Nächstes Thema

Wernieman

Und nur mal als Zusatz:
Die beste Firewall bringt nichts, wenn das Netz dahinter nicht abgesichert ist

Nur mal als Analogon:
Baue eine Burg mit einer Supersichere Eingangspforte (Firewall) ... und dann vor der Schatzkammer kein Schloß, weil "ich habe doch eine Firewall" ... und man wundern, das die Schatzkammer sich immer leert ...
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

viegener

Zitat von: MadMax-FHEM am 08 Juni 2020, 11:15:09
Wobei man ja ehrlicherweise sagen muss: auch vpn bedingt mind. einen offenen Port ;)

Gruß (und weg), Joachim

Absolut - VPN ist auch offen - am besten ist zu und wenn man nicht abschätzen kann was es bedeutet ist zu aus meiner Sicht die einzige Wahl.

OT - Nur weil Telegram oben erwähnt wurde -> Generell ist auch TelegramBot, insbesondere mit Möglichkeit zur Ausführung - eine Variante von offen
Netzwerktechnisch und Risikobasiert kann ein Ausgang auch einen Eingang darstellen...
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

swsmily

Gibt es eigentlich eine Möglichkeit auf fail2ban in FHEM zu reagieren?
ich hätte gern sobald eine IP blockiert wird, dass mir FHEM per Telegram eine Meldung schickt.

MadMax-FHEM

Zitat von: swsmily am 08 Juni 2020, 23:55:53
Gibt es eigentlich eine Möglichkeit auf fail2ban in FHEM zu reagieren?
ich hätte gern sobald eine IP blockiert wird, dass mir FHEM per Telegram eine Meldung schickt.

Ja ;)

Du kannst ja den fail2ban Status abfragen:


sudo fail2ban-client status openvpn


als Beispiel für openvpn...

Und dann das Ergebnis parsen, z.B.:


| grep 'Currently banned'


Und damit dann entweder direkt schon was triggern, z.B. eine Telegram Nachricht...
...oder eben z.B. einen Dummy "füttern", dann kannst du auch mit Loggen...
...und nat. reagieren.

Du kannst neben geblockten IPs auch die Versuche o.ä. rauskriegen...

Einfach mal ein wenig mit fail2ban-client "spielen"...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Wernieman

#19
Oder in fail2ban ein action definieren und in der Daten zu FHEM pushen .. mache ich bei mir, allerdings pushe ich die Daten in eine DB ...

(Kann zwar fail2ban mittlerweile selber, aber ich hatte es eingerichtet, als fail2ban so etwas selber noch nicht konnte ...)

Edit:
Ich selber lasse mich nicht mehr direkt Informieren (sondern eben über DB), da ansonsten zu viel Info reinkommen. Viel Wichtiger sind automatische Regeln wie: Sperre die IP (iptables). Wenn man dann auch nicht die default Zeit (10 Minuten) sondern länger nimmt (z.B. 1h), erreicht man schon eine deutliche Verbesserung

Eine Info am Rand: Bitte keine ganze Zeiten nehmen. z.B. nicht 1h sondern 1h und 2m. Viele Scripte gucken nach festen Zeiten, ob der Port wieder offen ist. Wenn man also 1-2 Minuten "drauflegt", hat man solche automatischen Scripte sehr geärgert, ohne nennenswerten Komfortverlust. Wenn man jetzt 3 mal  töffelig das Passwort falsch eingegeben hat, sind 1-2 Minuten bei 1h irrelevant mehr zu warten....
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

swsmily

Danke für eure Rückmeldungen.
Laut Logfiles hatte ich wohl noch keinen Zugriff, der nicht hätte sein dürfen. Mal selbst beim Passwort vertippt, aber fremde Zugriffe bisher noch nicht. Wahrscheinlich da ich nicht Standardports freigegeben habe.
Dennoch will ich natürlich besser absichern.
fail2ban funktioniert auch wie es soll. Der Tipp aber mit der "krummen" Sperrzeit ist gut.

Aber wie das mit der Action um Daten zu FHEM zu pushen funktioniert hab ich noch nicht so ganz rausgefunden.

Wernieman

Hast Du Telnet offen? Ansonsten gibt es mehrere Scipts für HTTP-Push (z.B. von Otto)

Für Push HTTPs kann ich Dir nicht helfen, aber gerne bei der Definition einer Action ....
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

swsmily

Ja Telnet von FHEM ist aktiv.

Eine kleine Hilfe, wie man die Action definiert wäre glaube ich wirklich hilfreich.

Wernieman

#23
Habe eine /etc/fail2ban/action.d/mysql_eintrag.conf
[Definition]
actionstart =
actionstop =
actioncheck =

actionban = /etc/fail2ban/logeintragen.pl <time> <ip> <name>
actionunban = /etc/fail2ban/logupdate.pl <time> <ip> <name>

[Init]
name = default
port = default
protocol = default


Habe so meine Action definiert. Warscheinlich brauchst Du kein actionunban und für actionban:
Zitatecho -en "set <Device> <ip>\nquit\n" | nc -w 5 <fhem-server> 7072
Bitte <Device> und <fhem-server>  anpassen.

In der jail.conf dann

# ban & mysql-Logging
action_mysql = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
                mysql_eintrag[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s"]
.....
action = %(action_mysql)s

Kann man bestimmt besser machen, habe noch keine Zeit für ein Refaktoring gefunden ....

Reichen Dir diese Fingerzeige?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

swsmily

#24
So ganz verstehe ich es noch nicht.
Ich habe eine Datei unter /etc/fail2ban/action.d/fhem.conf angelegt
Inhalt:
[Definition]
actionstart =
actionstop =
actioncheck =

actionban = echo -en "set test ban\nquit\n" | nc -w 5 <FHEM-IP> 7072
actionunban = echo -en "set test unban\nquit\n" | nc -w 5 <FHEM-IP> 7072

[Init]
name = default
port = default
protocol = default


in /etc/fail2ban/jail.local
# The simplest action to take: ban only
action_ = %(banaction)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]

# ban & fhem
action_fhem = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
              fhem[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s"]

Nach weiteren Beispielen, die in der jail.local stehen, die Zeile action = %(action_)s durch folgendes ersetzt:
# Choose default action.  To change, just override value of 'action' with the
# interpolation to the chosen action shortcut (e.g.  action_mw, action_mwl, etc) in jail.local
# globally (section [DEFAULT]) or per specific section
action = %(action_fhem)s


Der echo-Befehl direkt auf der Konsole funktioniert und setzt entsprechend auch den Dummy.
Lass ich mich jedoch blocken, wird die IP geblockt, aber in FHEM wird der Dummy nicht geändert.

Wo liegt mein Fehler?

EDIT:
actionban = /etc/fail2ban/fhemban.py <time> <ip> <name> in fhem.conf
und in /etc/fail2ban/fhemban.py:
echo -en "set test ban <ip>\nquit\n" | nc -w 5 <FHEM-IP> 7072
geht es nicht.

chmod 777 hab ich gemacht.
Aufruf mit ./fhemban.py sendet den Befehl an FHEM.

Wernieman

Sorry aber Dein Edit verstehe ich jetzt nicht. Hast DU den "echo | nc" jetzt in ein externes Programm verschoben?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

swsmily

Ja, das war ein Versuch, bei actionban ein Skript anzugeben, in dem dann das echo steht. Hat aber leider auch nicht zum Erfolg geführt.

Wernieman

Wie sieht denn Dein  /etc/fail2ban/fhemban.py jetzt komplett aus?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

swsmily

Da steht nur diese eine Zeile
echo -en "set test ban <ip>\nquit\n" | nc -w 5 <FHEM-IP> 7072

Wernieman

- Woher soll denn das Programm wissen, wie es <ip> und <FHEM-IP> zu setzen hast?
- Woher soll der Interpreter wissen, mit welchem "Interpreter" er das Programm starten soll?

Deshalb mußt Du zuerst die berühmte #! setzen, z.B. als Shell-Programm in:
#!/bin/bash

time=$1
ip=$2
name=$3
fhemip=1.2.3.4 #< Anpassen!!

echo -en "set test ban $ip\nquit\n" | nc -w 5 $fhemip 7072


Und dann bitte mal testen außerhalb von fail2ban.

Btw:
verwende für Deine eigene Übersichtlichkeit am besten am Ende eines Dateinamens passende Endungen.

z.B.
- für Shell-Programm: .sh
- für Phyton: .py
- für perl: .pl

Es ist bei unix nicht notwendig fürs System, aber übersichtlicher für den Administrator (Du)
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html