FTPd på udda port (active+passive)

Permalänk
Medlem

FTPd på udda port (active+passive)

Finns det någon möjlighet att få en ftp server att fungera både active och passive om man inte använder port 21?
Det går fint att få den att köra passivt, om man mappar ett port range och ställer in det i ftp servern.

Jag har förstått att det beror på hur NAT är uppbyggt Om den får en inkommande anslutning till port 21 så skickar en dir listing på port 20 automatiskt.

Finns det ngt sätt att få den att förstå att det finns en ftpd på port 2121 (t.ex) samt 21?

Burken som routrar kör redhat 8.

Permalänk
Medlem

Om jag förstått det rätt så ska du köra en ftpd på port 2121 och inte på port 21? Då forwardar du ju bara t.ex. 192.168.0.1:2121 -> 192.168.0.2:2121 och 192.168.0.1:20 -> 192.168.0.2:20 och om du har passive portarna 20000-20010 så blir det ju 192.168.0.1:20000-20010 -> 192.168.0.2:20000-20010

Om du använder iptables skulle det här bli:

/sbin/iptables -t nat -A PREROUTING -p tcp --dport 20 -j DNAT --to 192.168.0.2:20
/sbin/iptables -t nat -A PREROUTING -p tcp --dport 2121 -j DNAT --to 192.168.0.2:2121
/sbin/iptables -t filter -A FORWARD -p tcp -d 192.168.0.2 --dport 20000:20010 -j ACCEPT
/sbin/iptables -t nat -A PREROUTING -p tcp --dport 20000:20010 -j DNAT --to-destination 192.168.0.2

Visa signatur

Äntligen har jag fått svar på om vandrande pinnar kan gäspa. Det kan de inte. Ett av världens stora mysterier är löst.

Permalänk
Medlem

Nja port 20 behöver man aldrig forwarda, efterssom den går åt andra hållet. Dvs från servern > klienten, och utåt är NAT alltid öppet.

Och japp det är två skilda burkar. En burk som står som router & ftp, en till burk som ska stå som ftp.

Det går ju att lösa, frågan är bara vad som ska modifieras. Jag har kommit fram till att problemet består i att om en person bakom NAT (router) skickar PORT (active) kommandot så ger han ut sitt interna IP.
Om däremot nån som inte sitter bakom router connectar så skickar han sitt externa IP, då funkar active mode.

Passive mode funkar som sagt oavsett om personen sitter bakom router.

Permalänk
Medlem

kolla in
mmtcpfwd

(körs på routern)

Permalänk
Medlem

filigran: det där funkar inte om klienten sen sitter bakom NAT. Om man kör port 21 så funkar det dock. Och det är ingen mening att forwarda port 20 efterssom den initieras inifrån och ut.

M31e: ska se om han som kör routern vill lägga in det, inte 100 på att det är vad jag behöver heller. Har du använt det i det här syftet själv?

Permalänk

Passive mode funkade ju tydligen så det skiter vi i.

Om du vill köra ftp:n på två portar så kan du ju mappa både 2121 och 21 på routern till lyssnande port på ftp:n.

Active mode innebär att det är servern som får i uppdrag att ansluta till clienten. Det borde funka för alla som inte sitter bakom en brandvägg. För att den ska funka för nån bakom brandvägg krävs att den brandväggen portmappar rätt.

Visa signatur

Two types of people laugh at the law: those that break it and those that make it.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av RulerOfHeck

Active mode innebär att det är servern som får i uppdrag att ansluta till clienten. Det borde funka för alla som inte sitter bakom en brandvägg. För att den ska funka för nån bakom brandvägg krävs att den brandväggen portmappar rätt.

Nja det stämmer inte riktigt, isåfall skulle man inte kunna köra active ftp överhududtaget. Vilket man kan, så länge man kör ftpn på standard porten.

<teori>
när routern får en inkommande signal på Just port 21 så öppnar den automatiskt en utgående signal mot klienten på port 20. Problemet ligger i att om routern får en inkommande signal på port 2121 så har den ingen aning om att det handlar om FTP, så den öppnar ingen port 20 mot ftp klienten.
Alltså, lösningen är att få iptables / routermjuvaran att förstå att jag kör ftp på port 2121.
</teori>

Permalänk
Medlem

"mmtcpfwd provides transparent TCP/IP connection proxying from a MASQ enabled gateway to other machines, including FTP connections, via a special userspace passive FTP connections proxy supporting PASV, LPSV and EPSV, and masking the actual FTP server LAN address by supplying the gateway's address instead."

alltså det är vad ni letar efter
och för er som inte orkade googla...
http://mmondor.gobot.ca/software.html

Permalänk
Medlem

$EXTDEV = external device
$EXTIP = external ip address
$FTPIP = private address till ftpservern

iptables -t NAT -A PREROUTING -i $EXTDEV -p tcp -d $EXTIP --dport 2121 -j DNAT --to-destination $FTPIP:21

iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

(iptables -A FORWARD -i $INTDEV -p tcp -s $FTPIP --sport 20 -j ACCEPT)

Borde inte det greja det? Du ansluter på port 2121, DNAT riktar om den till den privata ip addressen på port 21, sen borde väll iof "iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT" greja det, eftersom det är en relaterande session till en annan som var initierad utifrån... Annars ligger den där andra raden jag skrev, jag har inte möjlighet att testa det, men jag tycker att det borde funka. ?

(Routern öppnar inte upp port 20 ifall du får en signal på port 21 (även ifall den är öppen, vad du får och inte får är ju vad du vill släppa igenom... åt båda hållen)

Permalänk

ladda modulen ip_conntrack_ftp

modprobe ip_conntrack_ftp ports=2121

Visa signatur
Permalänk
Citat:

Ursprungligen inskrivet av mhe
http://www.mhe.mine.nu/img/activeftp.gif

Bilden innehåller inte din firewall som ligger mellan servern och clienten. Dessutom så är det active mode du ritat, för som du ser så är det servern som kontaktar clienten (den kopplingen inleds med kommandot PORT). Från port 20, inte till om det va det du trodde. Den kopplingen funkar fint genom firewallen, för den kommer att "natta" den kopplingen och byta port på den. Om clienten däremot också kör nat så skiter det sig.

Det va snabbt förklarat, här är mer:
http://war.jgaa.com/ftp/?cmd=show_page&ID=ftp_pasv

Visa signatur

Two types of people laugh at the law: those that break it and those that make it.