[linux-l] ftp lahmt

Peter Ross Peter.Ross at alumni.tu-berlin.de
So Nov 25 06:55:25 CET 2007


Hi Boris,

On Sat, 24 Nov 2007, Boris Kirkorowicz wrote:

> <http://www.kirk.de/files/snafoo-2007-11-24_1911-filtered.pcap> hochgeladen.
> 
> >> Kann das vielleicht etwas mit dem passive mode zu tun haben?
> > Mich wundert, daß direkt passive mode benutzt wird; schließlich hast
> > Du den nicht angefordert.

Das koennte der Defaultclient sein.

Wie auch immer.. die Kommandos, die bei Dir haengen, sind die, bei denen 
Daten uebertragen werden.

Zum Verstaendnis: Fuer Datenuebertragung wird bei FTP neben der immer 
offenen Kontrollverbindung eine zweite aufgemacht (Port 20, "ftp-Data")

Bei aktiv ist es der Client, der sagt ueber die Kontrollverbindung via 
PORT-Kommando: "Ich habe einen TCP-Port xxx offen fuer Dich". Der Server 
verbindet sich mit diesem und die Datewn werden uebertragen.

Bei passiv hingegen sagt der Server ueber das Port-Kommando: "Ich habe 
einen Port fuer Dich" (der Portbereich ist implementationsabhaengig und 
kann bei vielen FTP-Servern konfiguriert werden )und der Client verbindet 
sich mit diesem.

Das ist fuer ein Firewall doof, weil zustandsbehaftetes Filtern schwierig 
ist (der Firewall muss in den Kontrollkanal hineinhorchen, um zu wissen, 
dass die temporaere Verbindung zur FTP-Verbindung dazugehoert und so die 
Pakete hindurchlaesst). Deshalb hat Linux/netfilter conntrack-Helferlein, 
die das tun.

Anyway, jedes Kommando wie DIR oder GET oder PUT nutzt den Datenkanal 
Kanal und das lahmt bei Dir.

Ich habe versucht, aus Deinem Dump war rauszulesen, aber ohne 
Verstaendnis, wann gemacht hast und wo das Warten war, verstehe ich das 
nicht.
 
Spiele mal bei Deinem Client mit Ein-Ausschalten des passive modes  
(PASV-Kommando).

Ich sehe das folgende Problem nicht, aber weil es bei FTP haeufiger 
vorkommt, erwaehne ich es mal:

Gelegentlich war der ident-Service das Problem (auth, Port 113). Manche 
Server wollen auf diesem port eine Antwort haben. Das tut identd.

Aber oft reicht es, wenn der Client bei Verbindungsaufbau via ICMP ein 
Reject meldet ("ich habe keinen identd") und der Server ists zufrieden.

Dooferweise sind viele Firewalls so konfiguriert, dass sie auf Ports, auf 
denen nicht geantwortet wird, kein Reject zurueckmelden, sondern das Paket 
einfach schlucken (Hintergedanke: Wenn ein Portscanner auf jeden nicht 
benutzten Port aufs Timeout warten musst, macht es das Scannen langsamer.. 
Was uebrigens stimmt, aber nicht unbedingt was nuetzt. Es macht einem 
automatischen Skript nichts auf, eine Weile zu warten, Warten kostet nix, 
erst recht nicht, wenn man tausend Rechner gleichzeitig testen kann.. 
aber es sieht so aus, als wenn es zumindest fuer viele Skript-Kiddies 
ausreichende Hemmschwelle ist)

Wie auch immer, es hilft dann, wenigstens fuer Port 113 in der Firewall 
ein Reject statt Drop zu konfigurieren.

Gruss
Peter


Mehr Informationen über die Mailingliste linux-l