HowTo: Filter

Dieses HowTo basiert auf der Anleitung von Castaglia: www.castaglia.org/proftpd/doc/contrib/ProFTPD-mini-HOWTO-Filters.html

 

Anregung und Kritik bitte ins Forum.




Filter benutzen

ProFTPD hat u.a. die Fähigkeit die FTP Befehle des Clients zu filtern. Diese Filter werden als reguläre Ausdrücke geschrieben, können also sehr mächtig, jedoch aber auch komplex und schwierig sein. Eine Einführung findet sich u.a. hier, mehr Informationen hier.

 

Zunächst sind die beiden Anweisungen "AllowFilter" und "DenyFilter" zu beachten. Diese Anweisungen werden benutzt um die Parameter jeden FTP Befehl zu filtern. Sofern die "AllowFilter" Anweisung benutzt wird, muss jeder Befehl diesem Ausdruck entsprechen, andernfalls wird der Befehl verweigert. Wird hingegen die "DenyFilter" Anweisung verwendet, darf der FTP Befehl nicht dem Ausdruck entsprechen, sonst wird er verweigert. Werden sowohl "AllowFilter" als auch "DenyFilter" benutzt, dann wird die "AllowFilter" Anweisung zuerst geprüft.

 

Zweitens gibt es weitere Anweisungen die speziell Anweisungen betreffen, die Files oder Verzeichnisse bearbeiten: "PathAllowFilter" und "PathDenyFilter". Genau wir bei "AllowFilter" und "DenyFilter" wird hier (sofern vorhanden) erst die "PathAllowFilter" Anweisung geprüft, dann die (sofern vorhanden) ´"PathDenyFilter" Anweisung. Die "Path" Filter zudem erst nach der "AllowFilter" und "DenyFilter" Anweisung geprüft und nur bei folgenden FTP Befehlen: DELE, MKD/XMKD, RMD/XRMD, RNFR, RNTO, STOR, STOU, und ausserdem bei den SITE Befehlen: CHGRP und CHMOD

 

Eine Besonderheit die einem oft zum Verhängnis wird ist die Tatsache, das ProFTPD nur den ersten Ausdruck auswertet, mehrere Zeilen also nicht abgearbeitet werden, da reguläre Ausdrücke zusammen gefasst werden können.

Das "oder" Trennzeichen ist hilfreich um solche kombinierten regulären Ausdrücke zu erstellen. Falls man z.B. in der proftpd.conf folgende Anweisungen hat:

 

PathAllowFilter \.jpg$

PathAllowFilter \.jpeg$

PathAllowFilter \.mpeg$

PathAllowFilter \.mpg$

PathAllowFilter \.mp3$

 

würde nur die erste "PathAllowFilter" ausgewertet werden. Um alle Ausdrücke auszuwerten, müsste die Syntax so aussehen:

 

PathAllowFilter \.(jpg|jpgeg|mpeg|mpg|mp3)$

 

Die Angaben sind case-sensitive! Beachte ausserdem, das bei Verwendung von Anführungszeichen der BackSlash ebenfalls escaped werden muss. ProFTPD interpretiert BashSlash innerhalb von Anführungszeichen ein wenig anderes, das obige Beispiel würde wie folgt aussehen:

 

PathAllowFilter "\\.(jpg|jpgeg|mpeg|mpg|mp3)$"

 

Ausserdem bedenke bitte, das die Filter nur auf die Parameter der FTP Befehle angewendet werden, nicht auf den FTP Befehl selber. Wenn man Filter Ausdrücke entwickelt, bietet sich auch die Debug Ausgabe des Servers an, damit man sehen kann, wie der Ausdruck ausgewertet wird.