用iptables做端口转发是个很实用的功能,可以让我们忽略协议细节而实现透明转发,对于加密的数据传输更是好用。
ftp协议不同于http协议,因为ftp的控制端口和数据端口是分离的,在被动模式下,数据端口是通过控制信息来商定的,所以我们不能简单地对21端口做转发。
注:假定我们是通过在 本机IP 上做NAT设置使 源IP 可以通过 本机IP 访问到 目标IP
1、首先书写并运行nat命令
modprobe iptable_nat
/sbin/iptables -t nat -A POSTROUTING -d 目标ip -p tcp --dport 21 -j MASQUERADE
/sbin/iptables -t nat -A PREROUTING -d 本机ip -p tcp --dport 21 -j DNAT --to-dest 目标IP:21
2、这个时候可以通过iptables -t nat -L命令进行查看目前nat,现在已经可以进行ftp的连接和登录了,www.linuxidc.com 同时一些控制命令也是正常的,但是使用LIST命令就会失败,抓包有如下结果。
本机IP.00021-源IP.01289: 227 Entering Passive Mode (目标IP,8,215)
源IP.01289-本机IP.00021: LIST -al
本机IP.00021-源IP.01289: 425 Security: Bad IP connecting.
3、出现上述问题的原因是,源IP通过本机IP转发到目标IP,在进入被动模式的时候,目标IP发送了目标的IP给源IP,所以源IP就直接尝试和目标IP建立数据连接,因为建立数据连接和控制连接的ip不同,所以目