使用iptables做端口转发访问ftp

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介:
原创作品,允许转载,转载时请务必以超链接形式标明文章  原始出处 、作者信息和本声明。否则将追究法律责任。 http://navyaijm.blog.51cto.com/4647068/816598

用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的连接和登录了,同时一些控制命令也是正常的,但是使用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不同,所以目标IP拒绝访问。
        4、对于这个问题vsftp有一个设置可以放弃这种安全检查,手册是如下说明的:
       pasv_promiscuous
              Set  to  YES if you want to disable the PASV security check that ensures the data connection originates from the same IP address as the control connection.  Only enable if you know what you are doing! The only legitimate use for this is in some form of secure tunnelling  scheme, or perhaps to facilitate FXP support.
              Default: NO
        5、如果按照第4步的说明,配置为pasv_promiscuous,那么这个时候访问ftp是正常的,但是就像上面说的那样,控制连接由本机ip和目标Ip建立,数据连接由源IP和目标IP建立,估计这种情况对于99%的情况来说不是我们想要的。
        6、在进入被动模式的时候,是否可以修改PASV里面的目标IP为本机IP呢,这个就是ip_nat_ftp做得事情,如下安装模块:
                modprobe ip_conntrack_ftp
                modprobe ip_nat_ftp
                可以通过lsmod查看是否生效,我的如下:
ip_conntrack_ftp       76273  0
ipt_MASQUERADE          7873  11
iptable_nat            27237  2 ipt_MASQUERADE
ip_conntrack           45957  3 ip_conntrack_ftp,ipt_MASQUERADE,iptable_nat
iptable_filter          6721  1
ip_tables              21441  3 ipt_MASQUERADE,iptable_nat,iptable_filter
        7、现在在访问一下ftp,则一切正常了。

本文出自 “屌丝运维男” 博客,请务必保留此出处http://navyaijm.blog.51cto.com/4647068/816598

目录
相关文章
|
16天前
|
网络协议
iptables配置tcp端口转发
iptables配置tcp端口转发
24 1
|
7月前
|
弹性计算 关系型数据库 MySQL
通过会话管理端口转发功能访问ECS内部服务
本场景带您体验如何通过ali-instance-cli使用会话管理连接ECS实例,和通过ali-instance-cli对ECS内部服务进行端口转发。
153 0
|
6月前
|
Linux
centos使用iptables实现nat端口转发
centos使用iptables实现nat端口转发
243 4
|
28天前
|
前端开发 应用服务中间件 nginx
nginx中配置不输入端口(指定地址)访问项目的方法
nginx中配置不输入端口(指定地址)访问项目的方法
23 0
|
1月前
|
存储 网络协议 安全
如何搭建外网可访问的Serv-U FTP服务器,轻松远程共享文件!
如何搭建外网可访问的Serv-U FTP服务器,轻松远程共享文件!
|
5月前
|
网络协议 应用服务中间件 Linux
LInux之在同一Tomcat下使用不同的端口号访问不同的项目
LInux之在同一Tomcat下使用不同的端口号访问不同的项目
59 0
|
4月前
原生表格纵向滚动条
原生表格纵向滚动条
|
4月前
|
网络安全 Windows
Telnet - 访问8080端口并发送数据
Telnet - 访问8080端口并发送数据
69 0
|
4月前
|
Java 应用服务中间件 Linux
linux安装jdk1.8 +nginx +springboot 实现通过nginx80转发8888端口访问springboot程序
linux安装jdk1.8 +nginx +springboot 实现通过nginx80转发8888端口访问springboot程序
91 0
|
6月前
|
网络协议
iptables 开放所有端口, 对特殊端口只开放给指定IP
iptables 开放所有端口, 对特殊端口只开放给指定IP
108 1