AG-Intra.net Arbeitsgemeinschaft
Intranet

Home
Was ist ein Intranet
Grundlagen
Netzwerke
Linux
Windows
Java
Sicherheit
Datenbanken
Projekte
Links
Impressum
Mitmachen ?
Diskussionsforum
Letztes Update:
21.11.2000
Liebe Besucher, ein aktueller Hinweis in eigener Sache:
Es ist beabsichtigt, diese Seiten und die Domain im Januar/Februar 2004 auf einen anderen Server umzuziehen. Es ist leider nicht auszuschließen, daß es während des Umzugs zu technischen Problemen mit diesen Seiten kommen wird. Insbesondere im eMail-Bereich wird es vermutlich Probleme geben. Wenn Sie fragen haben oder mich sonstwie erreichen wollen empfehle ich an rebel@snafu.de zu posten.
Nachdem der Umzug abgeschlossen ist, wird es allerdings auch inhaltliche Änderungen während des ersten Halbjahrs 2004 geben. Keine Angst. Es werden keine Inhalte verlorengehen, aber die Struktur der Seiten wird komplett geändert. Diese Seite hat eben eine andere Entwicklung genommen seit 2000, als das Projekt gestartet wurde ;-) Ich werde mich bemühen, daß bei ihnen vorhandene alte Bookmarks wenigstens zu einem Verweis auf die Neustruktur führen, und die gesuchten Inhalte für sie trotzdem leicht und schnell auffindbar sein werden.
Die eigentlich zu dieser Seite gehörenden Domains ag-intra.com, ag-intra.org und ag-intra.de werden von mir geschlossen bzw. gelöscht und unregistriert.

Anleitung - Logsurfer 1: Dial In fernsteuern 
Copyright 2000 by Frank Gehde
Logsurfer ist vereinfacht gesagt ein Programm, welches alles, was an der Standardeingabe erscheint, mit regulären Ausdrücken vergleicht, und im Trefferfall eine bestimmte Aktion auslöst. Im Standardanwendungsfall wird damit das Ausgabelog des Syslogdaemons analysiert. Normalerweise wird Logsurfer für sicherheitsrelevante Anwendungen verwendet (siehe auch der Folgeartikel Logsurfer 2). In diesem speziellen Fall, sollen Sie Logsurfer jedoch dazu "mißbrauchen"  Ihren Rechner aus der Ferne Online zu bringen.

Voraussetzungen für diese Lösung:

  • wie immer bei meinen Beschreibungen: SuSE 6.4
  • funktionsfähig installierte ISDN-Karte
  • Funktionsfähiges Handy (getestet mit ePlus)
  • Internetzugang als Dial On Demand konfiguriert
  • Flatrate (nicht zwingend, aber vorteilhaft)
  • installiertes Paket/Programm Logsurfer http://www.dfn-cert.de/eng/logsurf/index.html
Konkret will ich eigentlich folgende Situation schaffen. Ich sitze im Büro und habe Internet Zugang. Der Rechner zuhause (T-DSL) ist trotz Flatrate nicht permanent am Netz (wozu auch? Ab davon habe ich genügend Flatrate-Erfahrungen gesammelt. Man muß es wirklich nicht übertreiben). Ich möchte aber jetzt unbedingt entweder eine Datei von Zuhause aus dem Netzwerk herunterladen, oder eine Datei aus dem Büro auf meinem Heimrechner ablegen. Dazu habe ich zB. zuhause den WuFTPD für Guest FTP konfiguriert. Ich muß jetzt eine Möglichkeit finden, meinen Rechner zuhause dazu zu bewegen, daß er Online geht, und mir irgendwie seine dann aktuelle IP-Adresse mitteilt. Über das Internet geht das schon mal gar nicht, weil der Rechner ja nicht Online ist!
Die Lösung besteht darin, daß die ISDN-Karte (die ansonsten eigentlich in dem DSL-Rechner nutzlos ist) konfiguriert ist und i4L auch immer aktiv ist. In Yast sollten Sie ihrer ISDN-Karte eine der MSN zugeordnet haben, die sonst nicht genutzt wird. Die automatische Einwahl der ISDN-Karte sollten Sie unbedingt deaktivieren (manuell einstellen). Und jetzt kommt unsere Magic-Fernsteuerung ins Spiel: Das Handy. Beobachten Sie einfach einmal die Ausgaben des Syslog durch Eingabe von

tail -f /var/log/messages

Rufen Sie jetzt Ihre gewählte MSN einmal vom Handy aus an (die hier angegebene MSN, sowie die Handyrufnummer sind _natürlich_ fiktiv) durch Eingabe von 03055555555 auf dem Handy (setzen Sie hier Ihre Nummer inklusive Vorwahl ein).
In der Ausgabe des SyslogD erscheinen jetzt drei Zeilen, die ein eingehendes Telefonie-Gespräch anzeigen, aber nicht abnehmen. Das Schöne daran ist, daß die Rufnummer des Handys, nämlich 0177/5555555 im Log angezeigt wird (wenn nicht, überprüfen Sie Ihre i4L Einstellungen). Da haben wir doch ein wunderschönes externes Signal, daß in Echtzeit auf unserem Computer auftaucht, und das wir selbst steuern können. Ich bin mir jetzt nicht sooo sicher, aber ich glaube, daß der Computer das Gespräch noch nicht einmal annimmt, und auf diese Weise noch nicht einmal Kosten entstehen.
Jetzt, wo wir wissen, wie man ohne Internet in Echtzeit einen entsprechenden Log-Eintrag auf dem Rechner erzeugen kann, müßen wir nur noch wissen, wie man in Echtzeit genau diese Logdatei überwacht, und auf das Auftauchen der Handynummer im Log mit einer Aktion, nämlich dem Online-Gehen reagieren kann. Genau dazu dient uns Logsurfer.
Das Anzeigen der eigenen Rufnummer ist noch aus einem weiteren Grund interessant. Niemand anderes kann Ihren Computer zum Online-Gehen veranlassen, als der Besitzer dieses einen Handys (bzw. der SIM-Karte). Soweit ich weiß, und ich weiß einiges darüber, ist die Manipulation der Rufnummerübermittlung im Funknetz nicht möglich (okay, Techniker der Telefongesellschaften könnten etc. etc.).
Kommen wir nun zu Logsurfer. Abgesehen vom Aufruf, ist die Konfigurationsdatei /etc/logsurfer.confentscheidend. In der SuSE-Default Konfiguration ist sie nur ein ziemlich leeres Beispiel. Welches Format hat diese Datei also ?
Zunächst einmal werden alle Zeilen, die mit dem "#"-Zeichen beginnen als Kommentar interpretiert und somit ignoriert. Fängt eine Zeile mit einem Leereichen (oder Tab) an, so wird diese als Fortsetzung der vorhergehenden Zeile betrachtet. Dadurch muß man nicht durch elendig lang gewordene Zeilen scrollen.
Jede andere Zeile fängt mit regulären Ausdrücken an, wobei die dem ersten folgenden auch durch "-" ersetzt werden können. Reguläre Ausdrücke können zwar ganz schön kompliziert sein, sind aber auch sehr mächtig. Wie fast alle anderen, kann ich auch keine Anleitung an dieser Stelle mitgeben. Aber vielleicht hilft Ihnen ja schon das hier gezeigte Beispiel weiter (bzw. die im folgenden zweiten Teil wo Logsurfer für die eigentlichen sicherheitsrelevanten Dinge konfiguriert wird).
Als Grundregel kann man hier noch anmerken, daß Ausdrücke, die durch zwei einzelene Anführungszeichen zB. 'String' eingeschlossen sind komplett so verglichen werden, wie sie geschrieben wurden (Sonderzeichen innerhalb der Anführungszeichen  haben keine besondere Bedeutung). Wir der String durch doppelte Anführungszeichen eingeschlossen, so kann man zusätzlich die Parameter $0 - $9 als Platzhalter verwenden. $0 repräsentiert dabei die gesamte Zeile des Logs, $1 entspricht dem Teilstring der erkannt wurde.
Die Syntax für eine Zeile in der Datei /etc/logsurfer.confwürde so aussehen (RA steht für Regulärer Ausdruck):

RA  RA_NOT  RA_Stop  RA_Not_Stop  Timeout  continue  action (Parameters)

RA steht für den regulären Ausdruck der gesucht wird. Das kann zB. 'login failed' sein, um immer eine Aktion auszulösen, wenn ein Login fehlschlägt. 
RA_Not wird angegeben, wenn ich einige der Treffer ausschließen möchte. Beispielsweise wenn der fehlgeschlagene Login durch den Nutzer ftp verursacht wird, und hier 'ftp' steht. Das bewirkt, daß der erste Treffer durch den RA-Ausdruck doch wieder verworfen wird, wenn zusätzlich ftp in der untersuchten Logzeile vorkommt.
RA_Stop dient dazu, die aktuelle Regel beim Zutreffen des Ausdrucks zu löschen, und in Zukunft ohne diese Regel die Logzeilen zu untersuchen. RA_Stop_Not hat in dem Fall die gleiche Ausschlußwirkung wie RA_Not, wenn also der Ausdruck auch zutrifft, wird die Reegel nicht gelöscht. Die Ausdrücke sind interessant, weil man auch dynamisch Regeln zur Laufzeit erzeugen kann.
Der Timeout bezieht sich auf Kontexte. Das ist eine der Fähigkeiten von Logsurfer, die im zweiten Teil beschrieben werden.
Continue kann angegeben werden. Normalerweise würde die Untersuchung der Logzeile nur solange durchgeführt, bis eine Regel zutrifft. Folgeregeln aus der Datei logsurfer.conf erhalten den String dann nicht mehr zur Auswertung. Mit dem Schlüsselwort Continue erhalten Sie sie dann aber doch.
Action bestimmt schließlich, welche Aktion ausgeführt wird, wenn die Regel nun tatsächlich zutrifft. Wir werden hier in diesem Artikel nur die Aktion exec beleuchten.

So, um wieder ein praktisches Beispiel zu haben nehmen wir doch einfach mal die Beispielzeile, die nach frischer SuSE Installation in der Datei/etc/logsurfer.confsteht:

'.*' - - - 0 exec "/bin/echo $0"

Das erste ist ein Regulärer Ausdruck und entspricht also RA. Es werden beliebige Zeichen erfasst. Der RA_Not Ausdruck steht hier auf "-". Das bedeutet, er wird ignoriert. Es gibt keine Ausnahmeregeln. Dies trifft auch auf die Stop-Ausdrücke zu. Nun kommt die 0. Sie ist der Timeoutparameter. 0 steht für "kein Timeout". Dies ist auch okay, weil wir keinen Kontext haben. Schließlich kommt die Aktion "exec" mit Ihrem Parameter, nämlich dem Kommando das ausgeführt wird. Dabei ist zu beachten, daß der komplette Pfad zu dem entsprechenden Befehl angegeben wird. Übrigens gilt auch hier, daß $0als Variable verwendet wird, die zur Laufzeit durch die jeweils aktuelle Trefferzeile ausgetauscht wird.
Würde Logsurfer mit dieser Konfigurationsdatei aufgerufen, würde es alles was am Standard-In anliegt, per echo am Standard-Out wieder ausgeben.
Wir sollten jetzt eigentlich eine Idee haben, wie die Zeile auszusehen hat, mit der wir unseren Handy-Anruf abfangen wollen. Ich red nicht lange rum, bei mir sieht der einzige gültige Eintrag in der Datei /etc/logsurfer.conf so aus:

'177/5555555, Deutschland' --- 0 exec "/bin/ping -c 1 192.168.0.2"

Im wesentlichen dürfte jetzt nach der Erklärung oben alles klar sein. Wenn der Ausdruck '177/5555555, Deutschland'in der untersuchten Logzeile vorkommt, führe das Kommando "/bin/ping -c 1 192.168.0.2" aus (natürlich ist die IP fiktiv, und muß in der Praxis in eine echte öffentliche IP-Adresse geändert werden). Der reguläre Ausdruck ist in Anführungszeichen, also kann auch ein Komma darin verwendet werden. Diese Parametrisierung von Ping, schickt genau ein Ping auf die angegebene IP-Adresse. Dies ist jetzt auch der Grund, warum Dial on Demand eingerichtet sein soll. Ist der Rechner Offline, würde dieser Befehl auslösen, daß eine Verbindung zum Internet aufgebaut wird, weil ja eine öffentliche IP-Adresse angesprochen werden soll (da übrigens drei Zeilen mit der Telefonnummer im Log erscheinen, werden auch drei Pings gesendet. Wer will, kann das über den zweiten regulären Ausdruck natürlich finetunen).

Wie sie nun die eigene IP-Adresse veröffentlichen können, lesen Sie auch hier auf dem Server unter IP-UP.

Jetzt fehlt nur noch die Art und Weise wie Logsurfer gestartet werden soll. Logsurfer hat auch einige Parameter. Ich beschreibe hier nur kurz zwei. Zuerst der Aufruf am Prompt:

logsurfer -f -r Nov.22.20.25 /var/log/messages

Logsurfer behält jetzt die Shell, und gibt entsprechende Meldungen aus, wenn sich etwas ereignet. Der Parameter -f bewirkt, daß sich logsurfer wie tail verhält, und nach dem Durcharbeiten des Logfiles weiterläuft und neue Zeilen untersucht, die in die Logdateien einfließen. -r und das folgende bewirkt, daß nicht alle beim Start in der zu untersuchenden Datei vorhandenen Zeilen durchgearbeitet und untersucht werden, sondern erst ab der Zeile untersucht wird, die mit dem regulären Ausdruck einen Treffer hat, der nach -r steht. In meinem Fall ist das eine Datumsangabe. Enthält die Logdatei nämlich bereits mehrere veraltete Einträge von Handyanrufen, würde für jeden bereits vorhandenen Eintrag ein Ping abgeschickt. Ich glaube, die Administratoren wären nicht so glücklich wenn auf einmal eine Flut von Pings über sie hineinbricht. Man sorgt also mit -rdafür, daß das Logfile erst ab so ziemlich der letzten Zeile durcharbeitet wird. zum Schluß folgt schließlich die Datei, die untersucht werden soll. Diese ist bei SuSE übrigens nur für Root lesbar. Entweder ändert man die Dateirechte, oder startet Logsurfer als Root (was zwar eine Warnung anzeigt, aber schließlich auch funktioniert).

Hat man die Datei /etc/logsurfer.conf entsprechend eingestellt, und Logsurfer wie gezeigt gestartet, wird der Computer von nun an bei jedem Anruf ein Ping aussenden. Bei Dial on Demand würde er danach theoretisch Online sein. Hat man kein Dial On Demand ruft man hier den Befehl zum Anwählen auf, oder ein Einwahlscript.

Das wars erstmal zu Logsurfer. Wie man Logsurfer noch einsetzt, zeig ich Euch ein anderes Mal.


zurück zur Linux Übersicht

Copyright 2000 by Frank Gehde