Frage: In meinen Logfiles z.B. /var/log/messages finde ich regelmäßig Einträge folgender Art "Sep 17 15:54:55 server sshd[22487]: Invalid user xxxx from ::ffff:xx.xx.xx.xx". Offenbar versucht jemand, mit Hilfe eines illegalen Programmes in meinen Server einzubrechen. Dabei werden der Reihe nach alle möglichen Namen ausprobiert. Was kann man dagegen tun ?
Antwort: Mir sind diese Angriffe von meinen eigenen Servern bekannt. Sie sind lästig und als verantwortungsvoller Administrator hat man nie richtig Ruhe. Es könnte ja sein, daß es tatsächlich jemandem gelingt, in den Server einzubrechen. Einige Admins tun die Angriffe als "übliches Netzrauschen" oder "erfolgloses Werk von Skriptkiddies" ab - ich betrachte diese Ansicht als verantwortungslos. Das gilt erst recht, wenn man seinen Server an andere Unternehmen weitervermietet.
Es gibt mehrere Lösungsansätze, um dieses Angreiferproblem zu lösen. Zunächst muß man die Einträge der Logfiles regelmäßig überwachen und Attacken erkennen. Aufgrund des Logfile-Rotatings unter Linux ist man gezwungen, das täglich auszuführen, was nicht nur aufwändig ist, sondern auch fehleranfällig.
Ich habe mir zur Erkennung dieser fehlerhaften Logins ein PERL-Skript geschrieben, welches eine Minute vor dem Logfile-Rotating als cronjob gestartet wird. Die Erkennung dieser Attacken auf den SSHD ist aber lediglich der erste Schritt !
#! /usr/bin/perl
# Finde automatisiierte Einbruchsversuche per SSH
#
$MAILFROM='root <root@meine.domain>';
$MAILTO='mein name <meine@email.adresse>';
$crlf = chr(13) . chr(10);
$MAILSTRING= '| /usr/lib/sendmail -t';
open (MAIL, $MAILSTRING);
print MAIL "From: $MAILFROM ";
print MAIL "To: $MAILTO ";
print MAIL "Subject: SSH Intruder-Erkennung ";
print MAIL "content-type:text/html ";
open (IN,"/var/log/messages");
while ()
{
$zeile=$_;
if ($zeile=~ /invalid user/ig)
{
print MAIL $zeile."
";
}
}
close IN;
print MAIL " ". $crlf;
close MAIL;