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 |