使用iptables做端口转发访问ftp
2012-03-25 15:57
369 查看
用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
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
相关文章推荐
- iptables端口转发访问ftp nat设置详解
- centos6 下使用 iptables 只允许某ip对本机某端口的访问
- 使用Navicat的SSH Tunnel和SecureCRT的端口转发功能连接本机IP被禁止访问的远程数据库服务器
- iptables学习笔记:端口转发之“内网访问外网”
- Linux系统如何使用iptables进行本地端口转发?
- 使用iptables做端口转发
- iptables学习笔记:端口转发之“外网访问内网”
- centos7 && centos6.5部KVM使用NAT联网并为虚拟机配置firewalld && iptables防火墙端口转发
- KVM使用NAT联网并为VM配置iptables端口转发
- 【linux】ftp使用端口转发问题
- mac 上使用跳板机的端口转发 访问外网服务器
- 在Linux上使用iptables命令开启对外访问的网络端口
- iptables学习笔记:端口转发之“内网访问外网”
- iptables配置使用非标准ftp端口的vsftp服务器
- 20151208linux系统日常管理第三部分(linux下使用iptables实现内网的ftp端口映射 )扩展3
- CentOS系统中使用iptables设置端口转发
- iptables端口转发使用介绍
- iptables 端口转发 实现访问内网的httpd服务
- 用IPTABLES的端口转发功能实现访问位于内网的MYSQL服务器
- iptables,haproxy转发ftp(21端口)