Kein vsftpd mit ipfw/pf

SLE

New Member
Hallo,

ich probiere mich gerade in einer VM an einem FreeBSD-Server.

Nun wollte ich mir eine Firewall einrichtet. Die funktioniert auch super (egal ob IPFW oder PF) bis auf die Tatsache: Wenn ich die Firewall einschalte kann ich mich nicht mehr über FTP verbinden.

In Filezilla sieht das ganze so aus:

Status: Verbindung hergestellt, warte auf Willkommensnachricht...
Status: Unsicherer Server; er unterstützt kein FTP über TLS.
Status: Angemeldet
Status: Empfange Verzeichnisinhalt...
Befehl: PWD
Antwort: 257 "/" is the current directory
Befehl: TYPE I
Antwort: 200 Switching to Binary mode.
Befehl: PASV
Antwort: 227 Entering Passive Mode.
Befehl: LIST
Fehler: Zeitüberschreitung der Verbindung nach 20 Sekunden Inaktivität
Fehler: Verzeichnisinhalt konnte nicht empfangen werden

Und hier mal der log von ipfw:

Code:
Oct 29 05:44:15 localhost kernel: ipfw: 65500 Deny TCP ***:57762 ***:22697 in via re0
Oct 29 05:44:18 localhost kernel: ipfw: 65500 Deny TCP ***:57762 ***:22697 in via re0
Oct 29 05:44:24 localhost kernel: ipfw: 65500 Deny TCP ***:57762 ***:22697 in via re0
Oct 29 05:44:36 localhost kernel: ipfw: 65500 Deny TCP ***:57765 ***:22697 in via re0
Oct 29 05:44:39 localhost kernel: ipfw: 65500 Deny TCP ***:57765 ***:14487 in via re0
Oct 29 05:44:45 localhost kernel: ipfw: 65500 Deny TCP ***:57765 ***:14487 in via re0
(Ich hab meine IP entfernt)

Was ich auch nicht verstehe: warum stehen dort die Ports 22697 und 14487? Sollte das nicht Port 21 sein für FTP?

Meine IPFW-Config sieht so aus:

Code:
firewall_enable="YES"
firewall_quiet="YES"
firewall_type="workstation"
#firewall_myservices="21 22 53 80 443"
firewall_myservices="ftp 22 53 80 443"
firewall_allowservices="any"
firewall_logdeny="YES"

Danach habe ich versucht ipfw zu deaktivieren und und stattdessen pf zu verwenden. Leider ist dort genau dasselbe Problem (mit dem Unterschied, dass ich zu PF keine Logs finde)

Meine PF-Config sieht so aus:

Code:
pf_enable="YES"
pf_rules="/etc/pf.conf"
pflog_enable="YES"
pflog_logfile="/var/log/pflog"

Code:
if = "re0"
set loginterface $if
set skip on lo
tcp_pass = "{ 20 21 22 53 80 443}"
udp_pass = "{ 53 }"
block all
pass log on $if proto tcp to any port $tcp_pass keep state
pass out on $if proto udp to any port $udp_pass keep state

Schalte ich die Firewall aus komme ich aber ohne Probleme drauf.

Alles andere funktioniert hingegen, ich kann eine Webseite aufrufen und ich kann per SSH verbinden.

Kann mir da jemand behilflich sein?
 
Vielen Dank für den Tipp

Ich hab in vsftpd.conf nun den min und max passiv port eingestellt und diese range in der firewall freigegeben nun funktioniert auch FTP-Verbindung ohne Probleme.
 
FTP ist ein widerliches, ungenau spezifiziertes Protokoll aus der Frühgeschichte. Die Autoren, die damals FTP Verbrochen haben, wussten noch nicht wie man es richtig macht. FTP Verwendet eine Kontrollverbindung auf dem Wohlbekannten Port 21. Um allerdings die eigentlichen Daten zu übertragen wird pro Transfer noch eine weitere Verbindung verwendet. Damals sah niemand darin ein Problem dafür die Rolle von Client und Server umzudrehen. Der Client hat also einen TCP Server gestartet und dem Server angewiesen sich dorthin zu Verbinden. Natürlich kommt dieses Activemode FTP weder durch NATs noch durch Firewalls. Allerdings kam FTP zu erst und so wurden FTP Proxies in Firewalls und NATs eingebaut, die die FTP Kontrollverbindung abhören und die nötigen Ports freigeben. Ein kleines Übel ist der FTP Passivemode bei dem der FTP Server auch der TCP Server für die Datenverbindungen ist. Hier muss "nur" die selbe Portrange in FTP Server und Firewall verwendet werden. Dennoch hat FTP deswegen sehr viel Overhead bevor der Transfer losgehen kann. HTTP 1.1 (erst recht mit Pipelining) ist hier deutlich effizienter. SFTP, was nur 3 Buchstaben mit FTP gemeinsam hat, hat das Multiplexing allerdings zu weit getrieben und leidet deswegen massiv unter Head-of-Line Blocking.
 
hi

bei openbsd gibt es den ftp-proxy dafuer.

ich denke es gib auch einen vergleichbaren dienst fuer freebsd.

holger
 
Ja in FreeBSD gibt es für PF auch ftp-proxy obwohl der FreeBSD ftp-proxy afaik noch nicht auf divert Sockets umgestellt wurde. Für IPFW gibt es den Code in libalias. Die kann man entweder über das in-kernel NAT nutzen oder über nen Divertsocket die Packets an natd in den Userspace hin und zurück kopieren.
 
Zurück
Oben