Probleme ftp => DMZ

ports

Active Member
Ok, jetzt habe ich _keine_ Idee mehr.
Mein Ziel ist es, dass ein User aus dem Internet einen FTP-Server in
meiner DMZ nutzen kann. Allerdings funktioniert das weder ueber diesen
klasse ftp-proxy, noch "roh".

# define variables [on]
loop = "lo0" # loopback
IntIf = "ne3" # int. interface
ExtIf = "tun0" # ext. interface (dsl)
DmzIf = "xl0" # dmz interface
IntIp = "192.168.0.3/32" # int . IP (ne3)
DmzIp = "192.168.100.1/32" # dms IP
IntNet = "192.168.0.0/24" # int. network
DmzNet = "192.168.100.0/24" # dmz network
include = "192.168.0.10/32" # my machine
bugfiles= "192.168.100.10/32" # bugf.homeip.net
admins = "{192.168.0.10/32}" # admins
ftpd = "20" # ftp data
ftpc = "21" # ftp command
ssh = "22" # secure telnet
services= "{80, 443, 25, 110, 8766}"# allowed
# define variables [off]

set loginterface $ExtIf
set block-policy return

# clean fragmented and abnormal pakets [on]
scrub in all
# clean fragmented and abnormal pakets [off]

# NAT $ RDR $IntNet -> $ExtIf [on]
nat on $ExtIf from $IntNet to any -> $ExtIf
rdr on $IntIf proto tcp from $include to !$DmzNet port $ftpc -> 127.0.0.1 port 8021
# NAT $IntIf -> $ExtIf [off]

# NAT & RDR $IntNet -> DmzNet [on]
nat on $DmzIf from $IntNet to $DmzNet -> $DmzIf
rdr on $IntIf proto tcp from $include to $bugfiles port $ftpc -> 127.0.0.1 port 8021
rdr on $IntIf proto tcp from $include to $bugfiles port $ssh -> $bugfiles port $ssh
rdr on $IntIf proto tcp from $include to $bugfiles port $http -> $bugfiles port $http
# NAT & RDR $IntNet -> DmzNet [off]

# RDR $ExtNet -> DmzNet [on]
rdr on $ExtIf proto tcp from any to any port $ftpc -> $bugfiles port $ftpc
rdr on $ExtIf proto tcp from any to $ExtIf port $ssh -> $bugfiles port $ssh
rdr on $ExtIf proto tcp from any to $ExtIf port $http -> $bugfiles port $http
# RDR $ExtNet -> DmzNet [off]

# block all on $IntIf & $DmzIf and block in on $ExtIf [on]
block on $IntIf all
block on $DmzIf all
block in on $ExtIf all
# block all on $InfIf & $DmzIf and block in on $ExtIf [off]

# allow access from $IntNet & $ExtNet to ftp-proxy [on}
pass in quick on $IntIf proto tcp from $admins to $loop port 8021 keep state
pass out quick on $DmzIf proto tcp from $DmzIp to $bugfiles port 21 keep state
pass in quick on $DmzIf proto tcp from $bugfiles to $DmzIp port 55000 >< 57000 keep state
pass out quick on $IntIf proto tcp from $IntIp port 55000 >< 57000 to $admins keep state

pass in quick on $ExtIf proto tcp from any to any port $ftpc keep state
pass out quick on $DmzIf proto tcp from any to any port $ftpc keep state
# allow access from $IntNet & ExtNet to ftp-proxy [off]
Natuerlich haengen hinten noch ein paar weiter Rules, aber die wirklich
Wichtigen sind ja hier zu sehen.
Wie man sieht, mache ich fuer FTP _aus_ dem LAN ein Redirect auf den
ftp-proxy. Gerne haette ich den ftp-proxy auch von aussen benutzt. Aber
das scheint nicht zu funktionieren. Es erscheinen einige Eintraege in
/var/log/daemon, als wuerde der User sich verbinden. Zum Schluss sieht
man 'cannot connect to MY_EXT_IP:21 (Address already in use)' und das
war es. Fuer ausgehende Verbindungen klappt alles, nur nicht fuer
eingehende. Naja, also _ohne_ ftp-proxy. Allerdings klappt auch das
nicht wie es soll.
Ich habe auf dem Server in der DMZ porthifirst=50000 & porthilast=57000
eingetragen. Mit tcpdump sehe ich auch, dass der Client sich auf den
ftp-server verbindet und der ftp-server eine Verbindung aufbauen will.
Aber eben diese Verbindung (Datenkanal) kommt nicht durch.
Ich hatte eine Regel
pass in quick on $DmzIf proto tcp from any to any port 50000 >< 5700 keep state
aber die kommt nicht raus. Er "adressiert" zwar den externen Client mit
der korrekten IP-Adresse, aber das war es auch.

Irgendjemand eine Idee, einen Hint, einen Tip oder etwas anderes was
mir den Tag rettet?

ports
 
moin,

Hum, ganz genau versteh ich das Problem nicht.
Du sprichst von einem Proxy obwohl doch der FTP Server bei dir steht (warum brauchst du denn dann einen Proxy).
Links zum Thema FTP gibt es im Web bestimmt tausende ueber google findest du bestimmt einige.
Grundsaetzlich sollte man beim bauen von Firewalls immer im Auge behalten das FTP zwei Connections benoetigt.

Active FTP :
command : client >1024 -> server 21
data : client >1024 <- server 20

Passive FTP :
command : client >1024 -> server 21
data : client >1024 -> server >1024

Active werden wohl die meissten dummen* Firewalls deiner FTP User dropen, ausser sie akzeptieren eingehende connections ports >1024.
Bedeutet also fuer dich dein FTP-Server muss passive koennen und connections
>1024 akzeptieren (Der Portrange laesst sich bei den meisten FTP Servern einstellen/Die Ports gibt der Server vor)

(*) Manche Firewalls koennen auch die Controll Connection auf port 21 ueberwachen und die Datenports dynamisch erlauben.
 
Hehe, ja active und passive. Wie ich das liebe, besonders die Kunden die damit nicht klarkommen mit dem passiven FTP und mir erzählen das unser FTP auf Port 135 antworten würde....
 
Hmm, von aussen nach innen sagst du? Da müsste es doch eigentlich reichen, zumindest für aktives FTP, alles was von aussen kommt auf Port 21 zum FTP-Server zu redirecten und alles was vom FTP-Server Port 20 kommt nach aussen mit NAT durch zu lassen. Hast du das schon so versucht (meinst du das mit "roh"?) und es liegt sicher kein anderer Grund vor? Passiv wirds schon schwieriger, da fällt mir auch nichts im Moment ein...
 
Zuletzt bearbeitet:
Original geschrieben von olf
Hum, ganz genau versteh ich das Problem nicht.
Das Lan, eine DMZ (inkl. FTP-Server) und das Internet. Es soll FTP in
folgenden Variationen moeglich sein.
1.: Lan => DMZ
2.: Lan => Internet
3.: Internet => DMZ

Punkt 1 funktioniert ebenso wie Punkt 2 ueber den ftp-proxy (ACTIVE).
Wenn jetzt aber jemand aus dem Internet auf den Server in der DMZ
zugreifen moechte, funktioniert das weder _mit_ ftp-proxy, noch ohne.
Mit ftp-proxy bekomme ich beim Verbindungsaufbau von extern nur ein
'cannot connect to MY_EXT_IP:21 (Address already in use)' in
/usr/log/daemon.
Ohne ftp-proxy scheitert der Aufbau immer am Datenkanal. Mittlerweile
habe ich fast schon die Befuerchtung, dass es am User auf der anderen
Seite liegt. Denn ich befasse mich nun schon etwas laenger als 3 Tage
mit pf und habe bisher sonst alles gaengig bekommen.

Wie auch immer, ob sinnvoll oder nicht. Es sollte doch moeglich sein,
dass ein externer User ueber den ftp-proxy in die DMZ kommt. Ich bin
fast sicher, lasse mich aber gerne eines Besseren belehren(!), dass das
Problem mit der Meldung in /var/log/daemon zu tun hat.

Original geschrieben von olf
Du sprichst von einem Proxy obwohl doch der FTP Server bei dir steht (warum brauchst du denn dann einen Proxy).
Der Server steht in der DMZ. Ja, ich koennte natuerlich alles ohne den
ftp-proxy machen. Aber es geht mir ja auch drum etwas zu lernen ;) Und
jetzt war ich eben am Punkt "Wie nutze ich den ftp-proxy?" angelangt ;)

Original geschrieben von olf
Links zum Thema FTP gibt es im Web bestimmt tausende ueber google findest du bestimmt einige.
Grundsaetzlich sollte man beim bauen von Firewalls immer im Auge behalten das FTP zwei Connections benoetigt.

Active FTP :
command : client >1024 -> server 21
data : client >1024 <- server 20

Passive FTP :
command : client >1024 -> server 21
data : client >1024 -> server >1024
Danke, aber ich habe (leider) kein generelle Verstaendisproblem mit
FTP ;) Es ist eben viel eher so, dass trotz passender Rules einfach
kein Verkehr ueber den ftp-proxy geht (Internet => DMZ).

ports
 
Original geschrieben von sticky bit
Hmm, von aussen nach innen sagst du? Da müsste es doch eigentlich reichen, zumindest für aktives FTP, alles was von aussen kommt auf Port 21 zum FTP-Server zu redirecten und alles was vom FTP-Server Port 20 kommt nach aussen mit NAT durch zu lassen. Hast du das schon so versucht (meinst du das mit "roh"?) und es liegt sicher kein anderer Grund vor? Passiv wirds schon schwieriger, da fällt mir auch nichts im Moment ein...
Ja, mit "roh" meinte ich FTP ohne den proxy.
Das habe ich natuerlich auch mal versucht, aber wenn der Server dann
die Datenverbindung aufbauen will, bleibt er quasi am DmzIf haengen.
Allerdings bin ich mir mittlerweile, wie oben schon gesagt, nicht mehr
ganz sicher, ob die Gegenstelle, sprich der User, auch soweit i.O. ist :)

Mein Hauptaugenmerk liegt im Moment darauf den ftp-proxy ans laufen zu
bringen.

ports
 
Original geschrieben von kith
URL des FTP per pm?
Sorry fuer die spaete Meldung und danke fuer das Angebot. Habe am
Freitag Zugriff auf eine ext. Shell bekommen und konnte einiges testen.
Hier und da hat sich auch etwas geklaert. Werde, wenn ich zu Hause bin,
auch mal Details posten.

por"Moooohooooohoooooo"ts :)

p.s.: Endlich der richtige Thread
 
Zurück
Oben