用IPTables转发FTP

我试图用IPTables转发一个FTP服务器。 FTP服务器运行在Windows 2008盒子(Cerberus)上。

图片

详细信息Win Box:

  • IP:192.168.220.51
  • FTP端口:21
  • PASV端口:11000-13000

FTP服务器在局域网中工作良好。

路由器正在为其他客户端(服务NAT,DHCP,防火墙等)正常工作。 我需要将FTP服务转发到外部世界,但是我不能使用端口20-21(已经占用)。

我试过这个,但没有奏效:

iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 2121 -j DNAT --to 192.168.220.51:21 

当前IPTablesconfiguration:

 [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 

任何帮助将是伟大的:-)。

赏金 – 编辑 :我一直没能弄明白,任何帮助将不胜感激。

EDIT2

在运行命令后,我可以远程login到我的FTP服务器:

 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 

我开始到达那里…我想我只需要让我的PASV端口现在工作…

编辑3:额外的信息

 [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 

这是我做的,可能不是很漂亮,但它的作品。

 [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 

一些额外的笔记:FTP服务器正在监听21和2121,PASV范围从11000到13000

要获得被动支持工作,您需要将被动端口转发到具有相同端口号的内部ftp服务器。

简单的解决scheme:所有的时间都转发给他们

InternetIP:11000-13000 – > 192.168.220.51:11000-13000

更难的解决scheme:

您将需要一些特殊用途的连接跟踪代理来读取FTP协议,并及时进行正确的NAT映射。 它看起来像ip_conntrack_ftp可能会这样做。

我相信你需要加载FTP连接跟踪模块。

http://www.sns.ias.edu/~jns/wp/2006/01/12/iptables-connection-tracking-ftp/

 iptables -t nat -I PREROUTING -p tcp --dport 2121 -j DNAT --to 192.168.220.51:2121 iptables -I FORWARD -p tcp -d 192.168.220.51 --dport 2121 -j ACCEPT modprobe nf_conntrack_ftp modprobe nf_nat_ftp 

应该够了