使用IPTable转发FTP


9

我正在尝试使用IPTables转发FTP服务器。FTP服务器在Windows 2008机器(Cerberus)上运行。

图片

详细信息赢箱:

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

FTP服务器在LAN中工作良好。

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

我试过了,但是没有用:

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

当前的IPTables配置:

[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         

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

赏金编辑:我还无法弄清楚,任何帮助将不胜感激。

编辑2

运行那里的命令后,我现在可以远程登录到我的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-Ports现在工作即可...

EDIT3:额外信息

[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服务器正在bot 21和2121上侦听,并且PASV范围设置为11000至13000


ftp conntrack&nat内核模块是否已加载?输出是lsmod | grep -i ftp什么?
史蒂文星期一,

空,我没有加载任何额外的内核模块。我需要一些吗?
Bart De Vos

1
@TiZon:是的。iptables需要conntrack模块来跟踪FTP在PASV和PORT命令中使用的端口号和地址。另外,当您执行NAT时,需要NAT模块来重写端口号和地址,以便FTP协议可以正常工作。
史蒂文星期一,

2
+1可提供完整的解释。
Gopoi 2011年

3
@TiZon:如史蒂芬Monai已经提到的,为了让FTP到NAT网关后正常工作,你需要ip_conntrack_ftpip_nat_ftp加载的内核模块。FTP是必须在防火墙/ NAT网关后面处理的有趣协议。您可能会发现仅使用sftp(SSH FTP)会更容易,它仅使用端口22并进行了加密(非常安全)。FileZilla是一个很棒的免费FTP客户端,支持SFTP。
肖恩·C,

Answers:


7

要获得被动支持,您将需要使用相同的端口号被动端口转发到内部f​​tp服务器。

简单的解决方案:始终转发所有这些

互联网IP:11000-13000-> 192.168.220.51:11000-13000

更难的解决方案:

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


我是这样做的。我永久转发了所有端口。它可能不是最佳解决方案,但它可以工作。第一篇文章使用howto编辑。
Bart De Vos


0
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

应该足够了


端口号不2121应该替换为21吗?ftp模块如何将连接识别为ftp控件?它将在NAT之前或之后应用于使用端口21的每个连接吗?
卡巴斯德(Kasperd)

一些解释会很好,所以我们知道您不仅仅是在寻求答案
Tom O'Connor

您选择将哪个源端口转发到哪个目标端口。它可能适合您。在nat“ PREROUTING”表中,它将应用于您指定的端口的每个连接(在本例中为2121)。您可以在此处阅读netfilter ftp模块的工作原理:en.wikipedia.org/wiki/Netfilter#Connection_tracking_helpers
Yalok 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.