Probleme mit FTP am Router - kann keine Programme installieren

DonTermi

Well-Known Member
Moin,

habe nun mal die aktuelle Version 4.5 von OpenBSD auf meinen Router gespult. Bisher lief 4.2.

Habe den Paketfilter laufen und meine /etc/pf.conf 1:1 in's neue System übernommen, so wie viele andere bereits fertige Config Dateien.

Anbei mal ein Auszug meiner /etc/pf.conf

Code:
#       $OpenBSD: pf.conf,v 1.34 2007/02/24 19:30:59 millert Exp $
#
# See pf.conf(5) and /usr/share/pf for syntax and examples.
# Remember to set net.inet.ip.forwarding=1 and/or net.inet6.ip6.forwarding=1
# in /etc/sysctl.conf if packets are to be forwarded between interfaces.

ext="pppoe0"
int="re0"
net="192.168.1.0/24"

# routing - DSL
set loginterface $ext
set optimization aggressive

# fragmentierte pakete saeubern
scrub on $ext all fragment reassemble random-id

# queueing - priority - out
altq on $ext priq bandwidth 850Kb queue { std_out, ts_out, vpn_out, dns_out, tcpack_out }
queue tcpack_out        priority 6
queue dns_out           priority 5
queue vpn_out           priority 4 priq(red)
queue ts_out            priority 3 priq(red)
queue std_out           priq(default)

# queueing - class based queueing - in
altq on $int cbq bandwidth 16Mb queue { std_in, ts_in, vpn_in, dns_in }
queue dns_in    bandwidth 128Kb priority 6
queue vpn_in    bandwidth 128Kb priority 5 cbq(borrow)
queue ts_in     bandwidth 80Kb priority 4 cbq(borrow)
queue std_in    bandwidth 15.6Mb cbq(default borrow)


# network address translation
nat on $ext from $net to any -> ($ext) static-port
nat-anchor "ftp-proxy/*"

# forwarding / redirect
rdr on $ext proto { udp tcp } from !$net to any port { 23567 } -> 192.168.1.10 port 5222 # ejabberd
rdr-anchor "ftp-proxy/*"
rdr on $int proto { tcp udp } from $net to any port { ftp sftp } -> 127.0.0.1 port 8021

# alles dicht machen
block on $ext

# sich still verhalten ;)
block return log on $ext

# IP spoofing verhindern
set skip on lo0
antispoof log for re0 inet

# icmp echo erlauben - nö! :)
#pass out quick on $ext inet proto icmp all icmp-type 8 code 0 keep state
pass out quick on $ext inet proto icmp from any to any keep state

# forwarding / redirect pass in
pass in quick on $ext inet proto { tcp udp } from any to any port { 5222 } keep state label ejabberd

# raus darf alles - noe!
#pass out quick on $ext keep state

# ftp proxy
anchor "ftp-proxy/*"

# raus darf nur
pass out on $ext inet proto { tcp udp } from any to any port { time domain ntp } keep state
pass out on $ext inet proto { tcp } from any to any port { ftp ftp-data sftp ssh www https imap pop3 pop3s smtp 587 } keep state
pass out on $ext inet proto { tcp udp } from any to any port 5222:5223 keep state # jabber
pass out on $ext inet proto { tcp udp } from any to any port 5060:5061 keep state # SIP
pass out on $ext inet proto { tcp udp } from any to any port 10000 keep state # STUN

#
# pass in queue in $int
#
pass out on $int inet proto { tcp udp } from any port domain to $net queue dns_in
pass out on $int inet proto { tcp udp } from any to 192.168.1.1 port { 29575 41555 } queue vpn_in
pass out on $int inet proto { tcp udp } from any to 192.168.1.10 port 8767 queue ts_in
pass out on $int inet proto { tcp udp } from any to $net queue std_in

Der FTP von allen anderen Rechner klappt problemlos, nur am Router selbst tut sich da gar nix. Bei der Installation von midnight commander z.b. passiert nur folgendes:

Code:
foobar@router:/usr/ports/misc/mc$ make install
===>  Checking files for mc-4.6.1p1
`/usr/ports/distfiles/mc-4.6.1.tar.gz' is up to date.
>> (SHA256) mc-4.6.1.tar.gz: OK
===>  mc-4.6.1p1 depends on: gettext->=0.17 - not found
===>  Verifying install for gettext->=0.17 in devel/gettext
===>  Checking files for gettext-0.17p0
>> gettext-0.17.tar.gz doesn't seem to exist on this system.
>> Fetch ftp://ftp.gnu.org/gnu/gettext/gettext-0.17.tar.gz.

Mehr tut sich da nix bei FTP Verbindungen. Sieht jemand den Fehlerteufel?

Danke schon mal :)
 
Langsam komme ich dem Problem auf die schliche ... Eben wget installiert und hab die nötigen Files, die er vom FTP nicht ziehen konnte, mit einem anderen Rechner heruntergeladen und per scp in /usr/ports/distfiles abgelegt. Wenn ich jetzt ein solches Distfile vom FTP ziehe z.b.

Code:
===>  mc-4.6.1p1 depends on: gmake-* - not found
===>  Verifying install for gmake-* in devel/gmake
===>  Checking files for gmake-3.81p0
>> make-3.81.tar.gz doesn't seem to exist on this system.
>> Fetch ftp://ftp.gnu.org/gnu/make/make-3.81.tar.gz.

mit wget erhalte ich

Code:
foobar@router:/usr/ports/misc/mc$ wget ftp://ftp.gnu.org/gnu/make/make-3.81.tar.gz
--2009-05-26 13:42:02--  ftp://ftp.gnu.org/gnu/make/make-3.81.tar.gz
           => `make-3.81.tar.gz'
Resolving ftp.gnu.org... 140.186.70.20
Connecting to ftp.gnu.org|140.186.70.20|:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD /gnu/make ... done.
==> SIZE make-3.81.tar.gz ... 1564560
==> PASV ... couldn't connect to 140.186.70.20 port 47031: No route to host

Anscheinend ist der Router selbst nicht in Lage, weil NAT und ftp-proxy inkl. ftp-proxy RDR auf dem selben Rechner läuft von wo er nun die Daten per FTP ziehen will, das die Daten durch den FTP Proxy geschickt werden.
 
Würde es evtl. etwas nutzen das FTP-Proxy-Interface beim FTP per umgebungsvariable als Proxy (ftp_proxy) einzutragen?
 
...Anscheinend ist der Router selbst nicht in Lage, weil NAT und ftp-proxy inkl. ftp-proxy RDR auf dem selben Rechner läuft von wo er nun die Daten per FTP ziehen will, das die Daten durch den FTP Proxy geschickt werden.

ich sitze hier mit dem gleichen Problem und habe leider auch noch keine Lösung.
 
Tut der Proxy wirklich? Hinter dem Router sollte jeder Rechner in der Lage sein, passive wie aktive Verbindungen aufzubauen. Hierzu reicht nicht der Control-Channel auf Port 21. Auch die variable Verbindung auf einem ausgehandelten Data-Channel muss funzen. Dazu einfach mal ne Datei laden. Statt wget und Co. einfach nur ftp benutzen.

Bei aktivem FTP baut der FTP-Server eine Verbindung zum Client auf. Der Router sollte also Verbindungen von Port 20 eingehend an >1023 erlauben.

Graphisch:
1. Client dynamisch -> 21 Server
2. Server 20 -> Client dynamisch

Bei passivem FTP baut der Client zum Server eine Verbindung auf, dynamisch ausgehandelt und >1023. Dabei wird die IP mitgegeben, welche der Proxy im Falle von NAT umschreiben muss. Auf dem Router selbst sollte das nicht interessieren.

Graphisch:
1. Client dynamisch -> 21 Server
2. Client dynamisch -> Server dynamisch

Und zur Regel:
rdr on $int proto { tcp udp } from $net to any port { ftp sftp } -> 127.0.0.1 port 8021

- FTP verwendet nur tcp
- sftp ist auf Basis von SSH und kommt somit verschlüsselt am Proxy an. Der kann dann nix damit anfangen.

reichen dürfte doch:
rdr on $int_if proto tcp from any to any port 21 -> 127.0.0.1 port 8021

FTP sollte man per Firewall nicht zu weit einschränken, wenn dann nur mit viel Beobachtung. Der Router selbst braucht den Proxy in keinem Fall.

Mir haben zwei Sachen geholfen:
1. PF: Issues with FTP
2. Active FTP vs. Passive FTP, a Definitive Explanation
 
Zurück
Oben