FHEM Forum

FHEM => Frontends => Thema gestartet von: rx am 02 Juli 2014, 22:21:12

Titel: Fehlgeschlagene Loginversuche protokollieren
Beitrag von: rx am 02 Juli 2014, 22:21:12
Um fehlgeschlagene Loginversuche zu protokolllieren habe ich eine Änderung an 01_FHEMWEB.pm im FHEM-Verzeichnis vorgenommen (als Perl-Noob).

Zeile ca. 352:

    if(!$pwok) {
      my $msg = AttrVal($FW_wname, "basicAuthMsg", "Fhem: login required");
      print $c "HTTP/1.1 401 Authorization Required\r\n",
             "WWW-Authenticate: Basic realm=\"$msg\"\r\n",
             $FW_headercors,
             "Content-Length: 0\r\n\r\n";

      #######################################################################################################################
      if ($secret ne "")
      {
        Log3 $FW_wname, 1, "Password error for $name -> ".decode_base64($secret);
        system("echo 'Subject: fhem: Password-Fehler bei $name\n\n".decode_base64($secret)."' | sendmail email\@provider.de");
      }
      #######################################################################################################################

      delete $hash->{CONTENT_LENGTH};
      delete $hash->{BUF};
      return;

Titel: Antw:Fehlgeschlagene Loginversuche protokollieren
Beitrag von: Ich79 am 02 Juli 2014, 22:29:31
Hi!
An sich eine gute Idee. Ich würde aber vorschlagen das mit "Hausmitteln" zu machen. Ich habe in für mein WEB das Attribut basic auth so definiert:

attr WEB basicAuth { VerifyLogon($user, $password); }

Dazu habe ich eine separate 99_myAuthenticationUtils die nichts anderes macht als die Authentifizierung. Damit kann ich gefahrlos meine 99_myUtils.pm und fhem.cfg mit Freunden teilen ohne mein Kennwort preis zu geben. In der Methode VerifyLogon kann ich dann auch das Loggin machen.
Damit wärst Du modifikationsfrei und hast das Gleiche erreicht.

Viele Grüße
Boris
Titel: Antw:Fehlgeschlagene Loginversuche protokollieren
Beitrag von: rx am 03 Juli 2014, 09:40:54
Super Tipp und natürlich viel eleganter - fein!
Titel: Antw:Fehlgeschlagene Loginversuche protokollieren
Beitrag von: rx am 03 Juli 2014, 11:54:09
Da ich von Perl keine Ahnung habe und ich via Google nichts gefunden habe.

Ich musste bei mir in die fhem.cfg die Zeile ohne ";" eintragen:


attr WEB basicAuth { VerifyLogon($user, $password) }


Und wie sieht bei dir die Funktion VerifyLogon aus? Würdest du die hier posten?

Und gibt es eine Chance in der Funktion VerifyLogon an die IP-Adresse des Rechners zu kommen, der sich falsch authentifiziert hat?


Danke!
Titel: Antw:Fehlgeschlagene Loginversuche protokollieren
Beitrag von: Ich79 am 03 Juli 2014, 13:31:41
Moin!
Jau, kann ich Dir geben, aber ich mache das Logging selbst nicht in FHEM. Ich nutze dafür meine Apache Logs. Ich habe einen Reverse Proxy und nur der sieht die externen IP's. Dennoch kann ich Dir mal ein Beispiel für die Methode geben:

# start-of-template
package main;

use strict;
use warnings;
use POSIX;

sub myAuthenticationUtils_Initialize($$) {
my ($hash) = @_;
}

sub VerifyLogon($$@) {
my %users = (
'USER1' => 'PASSW1',
'USER2' => 'PASSW2'
);
my ($user, $pass) = @_;
my $rightpass = $users{$user};
return $rightpass eq $pass;
}

# behind your last function, we need the following
1;
# end-of-template


USER1 / PASSW1 usw sind natürlich ersetzt.
Ich habe das nur ausgelagert um eine klare Trennung zu haben und weil meine Madamme natürlich einen seperaten Zugang bekommen hat. Ich wollte kein zweites WEB device oder anderen Port, usw. Darin kannst Du aber das Logging auch einbauen.

VG!
Titel: Antw:Fehlgeschlagene Loginversuche protokollieren
Beitrag von: rx am 09 Juli 2014, 13:25:03
Hey, vielen Dank für dein Skript! Vielleicht kann noch jemand beisteuern, wie ich innerhalb dieses Skriptes auf die Variable mit der IP-Adresse des Besuchers zugreifen kann.
Innerhalb von 01_FHEMWEB.pm gelingt mir dies mit der Variable $name. Aber wie kann ich innerhalb dieser Funktion auf $name zugreifen?

Vielleicht hat ja jemand von den Profis eine Idee - würde mich sehr freuen!
Titel: Antw:Fehlgeschlagene Loginversuche protokollieren
Beitrag von: rx am 17 November 2014, 20:59:38
Ja, witzig eigentlich. Heute nochmal schnell geschaut und dann die Lösung gefunden, um auch die IP-Adresse des Aufrufers zu protokollieren:

fhem.cfg:
attr WEB basicAuth { VerifyLogon($user,$password,$name) }

99_basicAuth.pm:

##############################################
package main;

#use strict;
use warnings;
use POSIX;
use Time::HiRes qw(gettimeofday);

sub
VerifyLogon($$$)
{
#
#  Log3 "99_basicAuth.pm", 1, "Enter logon";
    my ($username, $password, $name) = @_;
#    Log3 "99_basicAuth.pm", 1, "$username $password";

    if ("$username" eq "frank" && "$password" eq "xxxxxxxxxxxxxxxxxxxxx")
    {
#       Log3 "99_basicAuth.pm", 1, "true";
        return true;
    }
    else
    {
        Log3 "99_basicAuth.pm", 1, "Passwort-Fehler ($username/$password/$name)";
    }
}

1;
Titel: Antw:Fehlgeschlagene Loginversuche protokollieren
Beitrag von: rx am 04 Januar 2016, 12:18:16
Update:

Mit der Einführung des Moduls 96_allowed.pm muss der o.g. Code etwas angeändert werden und zwar lautet die Variable für die IP-Adresse nicht mehr $name, sondern jetzt

           $aName

D.h. der entsprechende Aufruf in fhem.cfg muss so aussehen:

attr allowed_WEB basicAuth { VerifyLogon($user,$password,$aName) }


Grüße
Titel: Antw:Fehlgeschlagene Loginversuche protokollieren
Beitrag von: rx am 01 September 2016, 11:09:13
Und heute habe ich dann noch ein kleines Update in Sachen IP-Adresse durchgeführt, die steht nämlich in einer anderen Variable mittlerweile:

fhem.cfg:
attr allowed_WEB basicAuth { VerifyLogon($user,$password,$cl->{PEER}) }