Ich versuche einen FTP-Server mit IPTables weiterzuleiten. Der FTP-Server läuft auf einer Windows 2008 Box (Cerberus).
Details Win Box:
- IP: 192.168.220.51
- FTP-Port: 21
- PASV-Ports: 11000-13000
Der FTP-Server funktioniert hervorragend im LAN.
Der Router funktioniert einwandfrei für andere Clients (NAT, DHCP, Firewall, ...). Ich muss den FTP-Dienst an die Außenwelt weiterleiten, kann aber die Ports 20-21 (bereits belegt) nicht verwenden.
Ich habe es versucht, aber es hat nicht funktioniert:
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 2121 -j DNAT --to 192.168.220.51:21
Aktuelle IPTables-Konfiguration:
[root@router ~]# service iptables status
Table: nat
Chain PREROUTING (policy ACCEPT)
num target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
num target prot opt source destination
1 MASQUERADE all -- 0.0.0.0/0 0.0.0.0/0
2 MASQUERADE all -- 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
Table: filter
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- 127.0.0.1 0.0.0.0/0
2 DROP all -- 0.0.0.0/0 0.0.0.0/0
3 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:2222
4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:67
5 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:68
6 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:1194
7 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080
8 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
9 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:3128
10 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
11 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53
12 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:1194
13 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
14 DROP udp -- 0.0.0.0/0 0.0.0.0/0
15 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp flags:0x17/0x02
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
Jede Hilfe wäre toll :-).
Bounty-Edit : Ich konnte das nicht herausfinden, jede Hilfe wäre sehr dankbar.
EDIT2
Ich kann jetzt Telnet auf meinem FTP-Server ausführen, nachdem ich dort Befehle ausgeführt habe:
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 2121 -j DNAT --to 192.168.220.51:21
Ich fange an, dorthin zu gelangen ... Ich denke, ich muss nur meine PASV-Ports jetzt zum Laufen bringen ...
EDIT3: Extra Info
[root@router ~]# iptables -L -n -v
Chain INPUT (policy ACCEPT 3251 packets, 154K bytes)
pkts bytes target prot opt in out source destination
540 48534 ACCEPT all -- * * 127.0.0.1 0.0.0.0/0
4270K 5625M ACCEPT all -- * * 192.168.220.0/24 0.0.0.0/0
0 0 DROP all -- eth1 * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:2222
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:68
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:1194
65 8487 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
8 404 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:3128
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:1194
63870 81M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
974 224K DROP udp -- * * 0.0.0.0/0 0.0.0.0/0
638 34956 DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp flags:0x17/0x02
Chain FORWARD (policy ACCEPT 3578K packets, 3355M bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 2275K packets, 703M bytes)
pkts bytes target prot opt in out source destination
[root@router ~]# iptables -L -n -v -t nat
Chain PREROUTING (policy ACCEPT 33954 packets, 2595K bytes)
pkts bytes target prot opt in out source destination
0 0 DNAT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:2121 to:192.168.220.51:21
Chain POSTROUTING (policy ACCEPT 5925 packets, 699K bytes)
pkts bytes target prot opt in out source destination
0 0 MASQUERADE all -- * eth1 0.0.0.0/0 0.0.0.0/0
27170 1785K MASQUERADE all -- * eth0 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 5777 packets, 457K bytes)
pkts bytes target prot opt in out source destination
Lösung
So habe ich es gemacht, vielleicht nicht sehr hübsch, aber es funktioniert.
[root@router ~]# iptables -t nat -I PREROUTING -p tcp --dport 2121 -j DNAT --to 192.168.220.51:2121
[root@router ~]# iptables -I FORWARD -p tcp -d 192.168.220.51 --dport 2121 -j ACCEPT
[root@router ~]# iptables -t nat -I PREROUTING -p tcp --dport 11000:13000 -j DNAT --to 192.168.220.51:11000-13000
[root@router ~]# iptables -I FORWARD -p tcp -d 192.168.220.51 --dport 11000:13000 -j ACCEPT
Einige zusätzliche Hinweise: Der FTP-Server lauscht auf Bot 21 und 2121 und der PASV-Bereich ist auf 11000 bis 13000 eingestellt
quelle
lsmod | grep -i ftp
?ip_conntrack_ftp
undip_nat_ftp
Kernel - Module geladen. FTP ist ein interessantes Protokoll, das hinter einem Firewall / NAT-Gateway behandelt werden muss. Möglicherweise ist es einfacher, sftp (SSH FTP) zu verwenden, das nur Port 22 verwendet und verschlüsselt ist (weitaus sicherer). FileZilla ist ein großartiger kostenloser FTP-Client, der SFTP unterstützt.Antworten:
Damit der passive Support funktioniert, müssen Sie die passiven Ports mit denselben Portnummern an den internen FTP-Server weiterleiten .
Einfache Lösung: Alle ständig weiterleiten
InternetIP: 11000-13000 -> 192.168.220.51:11000-13000
Schwierigere Lösung:
Sie benötigen einen speziellen Verbindungsverfolgungsagenten, der das FTP-Protokoll liest und rechtzeitig die richtigen NAT-Zuordnungen vornimmt. Es sieht so aus, als ob ip_conntrack_ftp dies tun könnte.
quelle
Ich glaube, Sie müssen FTP-Verbindungsverfolgungsmodul geladen haben.
http://www.sns.ias.edu/~jns/wp/2006/01/12/iptables-connection-tracking-ftp/
quelle
sollte genug sein
quelle
2121
nicht durch ersetzt werden21
? Woran erkennen die FTP-Module eine Verbindung als FTP-Steuerung? Wird es auf jede Verbindung über Port 21 vor oder nach NAT angewendet?