.vash Geschrieben 15. Dezember 2004 Teilen Geschrieben 15. Dezember 2004 Ich würde gerne eine Email erhalten sobald sich jemand auf unserem Server über SSH versucht einzuloggen: und zwar immer genau dann wenn jemand das passwort eingegeben hat und enter drückt, unabhängig davon ob das Passwort korrekt ist oder nicht. Wer kann mir sagen wo ich dazu sinvoll ansetzen muss? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DevilDawn Geschrieben 15. Dezember 2004 Teilen Geschrieben 15. Dezember 2004 Genau wenn jemand Enter drückt wird es nicht immer gehen, es sei denn du modifizierst den sshd entsprechend. Eine einfachere Methode ist sich lesend auf das syslog zu hängen. sshd generiert dort einige interessante Einträge die man Abfangen kann: - Accepted password for user from 111.111.111.111 port 11111 ssh2 - Failed XYZ for illegal user user from 111.111.111.111 port 11111 ssh2 - refused connect from 111.111.111.111 etc. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Kernel-Error Geschrieben 21. Dezember 2004 Teilen Geschrieben 21. Dezember 2004 Hi! DevilDawn schrieb: Eine einfachere Methode ist sich lesend auf das syslog zu hängen. sshd generiert dort einige interessante Einträge die man Abfangen kann: Genau. Da baust du dir am besten eine kleines Bashscript und startest dieses dann über nen cronjob. Ist eigentlich sehr simpel.. #!/bin/bash TEMPFILE="/tmp/boxcheck.tmp.$$" cat /var/log/messages | grep "$DATUM" | grep -i "FAILED" | grep -i "root" | grep -v "tty" |> $TEMPFILE FAILLOGINCOUNT=`cat $TEMPFILE | wc -l` if [ $FAILLOGINCOUNT -ge 15 ] ; then echo "### WARNUNG: Es gab mehr als 15 root-Fail-Logins! " elif [ $FAILLOGINCOUNT -ge 1 ] ; then echo " Es gab folgende root-Fail-Logins:" fi cat $TEMPFILE fi #rm $TEMPFILE ==> wenn es wieder sauber sein soll! Musst natürlich das ganze etwas anpassen Grüße Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
.vash Geschrieben 21. Dezember 2004 Autor Teilen Geschrieben 21. Dezember 2004 ich habe selber an einer Lösung wie dieser gebastelt, aber das ist natürlich doch sehr komfortabel danke Vash Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
BenjieAul Geschrieben 21. Dezember 2004 Teilen Geschrieben 21. Dezember 2004 dann schreibe uns deine Möglichkeit doch mal=) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
.vash Geschrieben 21. Dezember 2004 Autor Teilen Geschrieben 21. Dezember 2004 wenn sie funktionieren würde hätte ich das bereits getan Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
generic05 Geschrieben 21. Dezember 2004 Teilen Geschrieben 21. Dezember 2004 Schreib doch einfach ein PAM Modul (Google: linux pam tutorial), damit hast Du ne saubere Lösung, das mit dem log-file durchsuchen ist für meinen Geschmack doch etwas frickelig.... Viel Erfolg, Stefan Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
.vash Geschrieben 22. Dezember 2004 Autor Teilen Geschrieben 22. Dezember 2004 das ist ein guter Tip, danke nun habe ich auch Lektüre für die Weihnachtszeit : http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/ Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DevilDawn Geschrieben 22. Dezember 2004 Teilen Geschrieben 22. Dezember 2004 Schreib doch einfach ein PAM Modul (Google: linux pam tutorial), damit hast Du ne saubere Lösung, das mit dem log-file durchsuchen ist für meinen Geschmack doch etwas frickelig.... Muss ich mal Kommentieren. Erstens hast du dann nur eine Lösung für Linux - Ein Shellscript dagegen sollte fast überall laufen (BSD, Unix). Zweitens:Ob es die "sauberere" Lösung ist hängt davon ab wie sauber das PAM geschrieben wird. Für ein einfaches Reporting in das Auth-System zu greifen bringt dir potentiell mehr Sicherheitslücken. Es gilt auch hier KISS (keep it simple, stupid!). Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
.vash Geschrieben 22. Dezember 2004 Autor Teilen Geschrieben 22. Dezember 2004 Gibt es denn PAM ausschliesslich für Linux? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Terran Marine Geschrieben 22. Dezember 2004 Teilen Geschrieben 22. Dezember 2004 Gibt es denn PAM ausschliesslich für Linux? Nein, pam würde ursprünglich auch von Sun entwickelt, und sollte auch bei anderen Unixen mitgeliefert sein. Die Frage ist nur, wie kompatibel sind die einzelnen pam versionen untereinander ? Und was devildawn auch schon geschrieben hat, ein Bash-Skript lässt sich wesentlich leichter portieren, als irgendwelche Systembibliotheken. Gruß Terran Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
.vash Geschrieben 5. Januar 2005 Autor Teilen Geschrieben 5. Januar 2005 mangels Zeit und Lust habe ich mir ein einfaches Skript geschrieben was täglich kurz vor Mitternacht aufgerufen wird: #!/bin/bash TEMPFILE="/tmp/sshlogin.tmp.$$" cat /var/log/messages | grep sshd | grep "`date +"%b %e"`" > $TEMPFILE mail [email]email@provider.com[/email] -c [email]x@sonstwohin.de[/email] -s "SSHD" < $TEMPFILE Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DanielB Geschrieben 6. Januar 2005 Teilen Geschrieben 6. Januar 2005 Hallo, das hab ich mal für meine Kiste zu Hause gebastelt. Eventuell hilft es Dir weiter. Den eMail Teil müsstest Du allerdings hinzufügen, sollte aber nicht weiter schwierig sein. Am besten mittels cron alle 24 Stunden neu starten um die Zähler zu resetten. #!/usr/bin/perl $log = "/var/log/messages"; $max_attempts = 5; $max_logins = 5; my %attempts = {}; my %logins = {}; open(LOGFILE,"tail -f $log |") || die "Error : Unable to open $log. ($!)\n"; $i = 0; while($line = <LOGFILE>) { $i++; if($i > 10) { if(($line =~ /(\w+)\s+(\d+)\s+(\d+:\d+:\d+)\s+(\w+)\ssshd.*Failed\spassword\sfor\sroot\sfrom(.*)\sport/) || $line =~ /(\w+)\s+(\d+)\s+(\d+:\d+:\d+)\s+(\w+)\ssshd.*Authentication\sfailure\sfor\sroot\sfrom\s(.*)\s/) { $date = $2 . " " . $1; $time = $3; $host = $4; $remote_host = $5; print "Alert: ($date - $time) Failed root login on $host from $remote_host\n"; $attempts{'$remote_host'} = $attempts{'$remote_host'} + 1; if($attempts{'$remote_host'} > $max_attempts) { print "ALERT!!! : Detected more than $max_attempts failed root login attempts on $host from $remote_host\n"; } } elsif($line =~ /(\w+)\s+(\d+)\s+(\d+:\d+:\d+)\s+(\w+)\ssshd.*for\sroot\sfrom\s(.*)\s/) { $date = $2 . " " . $1; $time = $3; $host = $4; $remote_host = $5; print "Alert: ($date - $time) root login from $remote_host on $host\n"; $logins{'$remote_host'} = $logins{'$remote_host'} + 1; if($logins{'$remote_host'} > $max_logins) { print "ALERT!!! : Detected more than $max_logins root logins on $host from $remote_host\n"; } } } } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.