Wie analysiere ich das FTP-Logfile (proftpd) /var/log/xferlog?
Format des Logfiles
Die Analyse des Transferlogfiles von proftpd ist ohne Referenz leider etwas mühsam. Wir verwenden folgende Zeile als Beispiel zur Analyse eines Eintrags in /var/log/xferlog:
Sat Oct 18 11:30:06 2008 10 99.99.99.99 267650 /var/www/web999/html/bild.jpg b _ o r web999 ftp 0 * c
| Bereich | Erklärung | Werte |
|---|---|---|
| Sat Oct 18 11:30:06 2008 | Zeitstempel des Transfervorgangs | - |
| 10 | Transferzeit in Sekunden | - |
| 99.99.99.99 | IP-Adresse des FTP-Clients (Remote Host) | - |
| 267650 | Zahl der übertragenen Bytes | - |
| /var/www/web999/html/index.php | Betroffene Datei | |
| b | Transfertyp | a (ASCII/Text) b (binär) |
| _ | Special Action Flag | _ (keine Aktion) C (komprimiert) U (dekomprimiert) |
| o | Richtung das Transfers aus Serversicht | i (eingehend) o (ausgehend) d (gelöscht [keine Richtung]) |
| r | Zugriffsmodus | a (anonym) r (Benutzername) |
| web999 | Benutzername | - |
| ftp | Name des Serverdienstes | - |
| 0 | Authentifizierungs-Methode | 0 (keine besondere) 1 (RFC931 Authentifizierung) |
| * | User-ID (oder *) | - |
| c | Status | c (vollständig ausgeführt) i (unvollständig ausgeführt) |
Analyse des Logfiles
Um das Logfile bzw. den Datentransfer via FTP zu analysieren, empfehlen sich folgende Befehle:
Alle Aktionen, die abgebrochen wurden, haben an letzter Stelle des Eintrags ein "i" für "incomplete". Wir verwenden ein einfaches egrep, um entsprechende Zeilen anzuzeigen:
egrep "i$" /var/log/xferlog
Alle abgebrochenen Uploads können haben als Richtungsangabe "i" für "incoming" und wie erwähnt ein "i" am Ende der Zeile für "incomplete":
awk ’($12 ~ /^i$/ && $NF ~ /^i$/){print $9}’ /var/log/xferlog
Alle erfolgreichen Uploads können wir ebenso abfragen. Sie haben als Richtungsangabe ebenfalls ein "i" für "incoming", jedoch ein "c" am Ende der Zeile für "complete":
awk ’($12 ~ /^i$/ && $NF ~ /^c$/){print $9}’ /var/log/xferlog
Alle Löschaktionen haben als Richtungsangabe ein "d" für "delete". Mit folgendem Befehl werden diese gefiltert:
awk ’($12 ~ /^d$/){print $9}’ /var/log/xferlog
Alle Löschaktionen eines Benutzers mit Zeitangabe werden wie folgt angezeigt:
awk ’($12 ~ /^d$/){print $3 $2 $5 $4 $9}’ /var/log/xferlog | grep web999

