English |
Dieses Packet dient der einfachen Protokollierung und Auswertung von Netzwerkverbindungen unter Linux. Es bezieht seine Daten aus der Netfilter Connection Tracking Schicht des Kernels. Dadurch ist es in der Lage auch Datenverkehr von verbindungslosen Protokollen (außer icmp), wie etwa UDP DNS Anfragen mit dazugehöriger Antwort, zu protokollieren.
Diese Software wird unter der
Das Packet besteht aus zwei Komponenten:
C Programm ipclog
Läuft als Daemon Prozeß und pollt die Pseudodatei
/proc/net/nf_conntrack (ip_conntrack in älteren Linux Versionen)
nach neuen oder beendeten Netzwerkverbindungen.
Diese werden in einem Logfile protokolliert.
Für jede Verbindung oder Pseudoverbindung (UDP, etc.) werden Datum und Uhrzeit von Verbindungsanfang und Ende, Protokoll, Source- und Destination-Adressen und Ports festgehalten.
Außerdem werden die Adressen und die Adressänderungen von lokalen Netwerkinterfaces (lo, eth0, ppp0, etc.) aufgezeichnet. Im Verbindungsprotokoll werden statt der lokalen Adressen die Interfacenamen benutzt. Das ist insbesondere für DHCP Adressen nützlich. Für Interfaces mit mehreren Adressen können Aliasnamen in einem Konfigurationsfile definiert werden.
Shell Script constat
Wertet die von ipclog geschriebenen Logfiles aus und stellt sie
in komprimierter Form dar.
Namen von bekannten und erwarteten Protokollen, Services und Hosts können in einer Lookup-Datei eingetragen werden und werden dann von constat verwendet. Anderenfalls werden Protokolle und Services numerisch und Hosts als IP Adressen angezeigt. Trägt man alle erwarteten IP Adressen in der Lookup-Datei ein, fallen alle nicht erwarteten sofort auf.
P 2004-08-05-16:41:22 ipclog started H 2004-08-05-16:41:22 prot src dst sport dport fl time I 2004-08-05-16:41:22 UP lo 127.0.0.1 I 2004-08-05-16:41:22 UP eth0 192.168.0.1 I 2004-08-05-16:41:22 UP ppp0 217.235.218.69 O 2004-08-05-16:41:37 udp ppp0 217.237.151.97 32799 53 - - O 2004-08-05-16:41:37 tcp ppp0 212.227.15.145 32786 25 t - O 2004-08-05-16:42:22 tcp 192.168.0.2 212.227.15.149 1601 110 t - O 2004-08-05-16:43:22 tcp 192.168.0.3 eth0 1602 22 e - C 2004-08-05-16:41:37 tcp ppp0 212.227.15.145 32786 25 t 0 S 2004-08-05-16:43:47 tcp 192.168.0.3 eth0 1602 22 t 25 C 2004-08-05-16:42:22 tcp 192.168.0.2 212.227.15.149 1601 110 t 0 C 2004-08-05-16:41:37 udp ppp0 217.237.151.97 32799 53 - 0 O 2004-08-05-16:45:27 udp ppp0 217.237.151.97 32799 53 U - O 2004-08-05-16:45:32 tcp ppp0 212.227.119.68 32788 80 e - S 2004-08-05-16:45:37 tcp ppp0 212.227.119.68 32788 80 w 5 S 2004-08-05-16:45:42 tcp ppp0 212.227.119.68 32788 80 t 10 C 2004-08-05-16:43:47 tcp 192.168.0.3 eth0 1602 22 t 25 O 2004-08-05-16:45:47 tcp ppp0 212.227.119.68 32789 80 c - O 2004-08-05-16:45:47 tcp ppp0 212.227.119.68 32790 80 e - S 2004-08-05-16:45:52 tcp ppp0 212.227.119.68 32790 80 w 5 S 2004-08-05-16:45:57 tcp ppp0 212.227.119.68 32790 80 t 10 C 2004-08-05-16:45:47 tcp ppp0 212.227.119.68 32789 80 c 0 C 2004-08-05-16:45:42 tcp ppp0 212.227.119.68 32788 80 t 10 C 2004-08-05-16:45:57 tcp ppp0 212.227.119.68 32790 80 t 10 C 2004-08-05-16:45:47 udp ppp0 217.237.151.97 32799 53 - 20 P 2004-08-05-16:49:00 ipclog stopped, 0 errors
Das Protokoll zeigt drei lokale Interfaces als "UP": lo, eth0 und ppp0. Es wurden mehrere eingehende, ausgegende und durchgehende Verbindungen protokolliert. Der Beispielrechner ist als Router (unter Einsatz von NAT) configuriert. Jede Verbindung hat einen open ('O') und einen closed ('C') Eintrag. Der closed Eintrag zeigt in der letzten Spalte die Verbindungszeit in Sekunden. Bei tcp Verbindungen gibt es zusätzlich einen state change ('S') Eintrag (time wait state, 't'). Der 'H' Eintrag zeigt die Spaltenüberschriften für die 'O', 'C' und 'S' Einträge.
Zu weiteren Einzelheiten siehe den Kommentar oben im Sourcecode von ipclog.
Linkt man ipclog auf den Namen "ipc" (gleichwertig mit "ipclog -1") bekommt man ein User Kommando (kein Daemon), das alle zu Zeit offenen Verbindungen anzeigt:
$ ipc H 2004-08-31-12:40:06 prot src dst sport dport fl time O 2004-08-31-12:46:13 50 ppp0 195.135.220.3 - - - -
Bei Einsatz von NAT zeigt ipclog immer die urspüngliche Source Adresse des eingehenden Packetes und die endgütige Destination Adresse des ausgehenden Packetes an, die eventuell durch NAT geändert wurde. Mit der Option -N kann man zusätzlich die durch NAT eventuell geänderte ausgehende Source Adresse und die ursprüngliche eingehende Destination Adresse anzeigen.
Ipclog eignet sich wenig zum Anzeigen von ICMP Packeten (wie zum Beispiel ping), da diese von der Netfilter Schicht des Kernels normalerweise nur ganz kurz (im Millisekundenbereich) in /proc/net/nf_conntrack (bzw. ip_conntrack) sichtbar gemacht werden.
Der Aufruf
constat
beziehungsweise
constat -d 2004-08-05
gibt eine Übersicht über die Verbindungen des heutigen Tages bzw. über die des angegebenen Datums aus:
scanning for date 2004-08-05 src prot dport dst n nopn avgtm maxtm --------------------------------------------------------------------------- 192.168.0.3 tcp ssh eth0 1 0 25.0 25 nat-pc tcp pop3 my-pop-server 1 0 0.0 0 ppp0 tcp http any 3 0 6.7 10 ppp0 tcp smtp my-smtp-server 1 0 0.0 0 ppp0 udp domain my-nameserver 2 0 10.0 20 0 ERRORS
Die Ausgabe gruppiert die weiter oben gezeigten ipclog Einträge. Neben Source, Destination, Protokoll und Port wird die Anzahl der Verbindungen, die Anzahl der noch offenen Verbindungen und die durchschnittliche und maximale Verbindungszeit angezeigt.
Alle IP Adressen außer 192.168.0.3 sind in der Lookup-Datei eingetragen, und werden im Klartext ausgegeben, ebenso alle verwendeten Services (siehe File constat.lookup im Download). So fallen nicht eingetragene Adressen sofort auf und können näher untersucht werden.
Da beim Browsen im Web meist in kurzer Zeit viele Verbindungen mit vielen Webservern hergestellt werden, werden alle http und https Verbindungen unter Destination 'any' zusammengefasst (unterdrückbar durch "constat -noany"). Man kann aber auch http und https Verbindungen in der Lookup-Datei eingetragen und dann getrennt darstellen.
Aufrufübersicht:
usage: constat [options] options: -a: scan whole file -d 'jjjj-mm-dd': specific date -f logfile: scan logfile, default /var/logs/ipclog.log -h: help -noany: no 'any' dst hosts -nc: no name cache lookup
Laden Sie die Datei constat.tar.gz herunter und entpacken Sie sie mit "tar xzvf constat.tar.gz".
Compilieren Sie ipclog.c durch den Aufruf von "make".
Legen Sie ipclog und constat im Dateisystem an einen Ort wo man Sie gut aufrufen kann, z.B. nach /usr/local/bin. Stellen Sie einen Link von ipclog nach "ipc" her, wenn Sie das ipc Kommando benutzen wollen.
Wählen Sie einen Pfadnamen "log-path" für das Verbindungslogfile und starten Sie
ipclog > log-pathIpclog setzt sich selbst in den Hintergrund und läuft als Daemonprozeß (außer "ipclog -d").
Zum ständigen Gebrauch integriert man ipclog am besten in den Boot Prozeß des Systems.
Ipclog läuft als beliebiger User, solange es Schreibrechte auf sein eigenes Logfile hat.
Editieren Sie im Script constat den Inhalt der Variablen LOGFILE und LOOKUPFILE.
LOGFILE soll den absoluten Pfad des ipclog Logfiles enthalten ("log-path").
LOOKUPFILE soll den absoluten Pfad des Lookupfiles enthalten und darf auch leer sein, falls Sie kein Lookupfile verwenden wollen.
Legen Sie gegebenenfalls das Lookupfile an. Die Datei im Download kann Ihnen als Vorlage dienen. Weitere Details finden Sie im Kommentar in dieser Datei.
Nun können Sie jederzeit "constat" aufrufen oder das Logfile direkt inspizieren.