Am Samstag, 30. April 2005 20:12 schrieb Ruediger Meier:
Hallo,
Um Brutforce Attacken auf einen Game Server zu analysieren moechte ich bestimmte Pakete aufzeichnen und suche nach einer Loesung, die moeglichst CPU schonend ist.
Im Prinzip tut die folgende Zeile schon das was ich brauche:
$ tcpdump -n -p -A 'dst host $MY_IP and port 27960' |grep "rcon" (Gibt alle Zeilen aus die getestete rcon-Passworter enthalten)
Allerdings ist diese Loesung etwas unschoen da: 1. die zugehoerigen Absender IPs weggegreppt werden (welche ich dann allerdings aus anderen logfiles ablesen kann) 2. die CPU last relativ hoch ist wenn viel Betrieb auf dem Server ist.
Besser waere es in dem tcpdump commando schon mehr auszusortieren. Kann man tcpdump irgendwie direkt anweisen nur Pakete die "rcon" enthalten auszugeben?
Leider kenne ich mich auch nicht sonderlich mit UDP Headern aus. In der Info-Spalte bei ethereal sah ich dass alle Pakete, die ich suche "connectionless" sind, im Gegensatz zu dem meisten restlichen Traffic! Kann man das irgendwie im tcpdump commando benutzen?
Ansonsten habe ich keine groesseren Unterschiede zwischen den gesuchten und den restlichen Paketen entdeckt. Irgendwelche Ideen wonach man noch schauen koennte?
In Hinblick auf die CPU Last: Waere es besser die Pakete mit iptables mitzuloggen? Geht das ueberhaupt?
Das ist denke ich, eine der Aufgaben von Netfilter/iptables. Warum auch im Userspace ein Programm laufen lassen, wenn der Kernel der die Pakete so oder so zu Gesicht bekommt sie auch gleich loggen kann. Zitat:
$ tcpdump -n -p -A 'dst host $MY_IP and port 27960' |grep "rcon" (Gibt alle Zeilen aus die getestete rcon-Passworter enthalten)
Meine Erfahrung mit tcpdump sind gering. Ich vermute Du willst alle Pakete an Port 27960 UDP mitloggen und anschließend auswerten ("rcon"?). Korrigiere mich wenn ich falsch liege. iptables -A INPUT -s $EXTIF -p udp --dport 27960 -j LOG \ --log-prefix "Zugriff auf UDP-Port 27960: " (--log-level 01234567) Fügt im Chain INPUT eine Regel ein die oben genanntes mitlogt. Abhängig vom Loglevel (default 4=warning) und deiner syslog.conf tauchen die Einträge wahrscheinlich in /var/log/messages auf. Den Rest machst Du dann noch mit grep. Zum Einlesen ist diese Buch sehr gut geeignet: http://www.oreilly.de/german/freebooks/linuxfireger/index.html
cu, Ruediger
Gruß Dirk