使用iptables将内网ftp服务映射到其他内网服务器上

使用iptables将内网ftp服务映射到其他内网服务器上
iptables一般的只需要关注两个表,一个是nat表,一个是filter表,其他表暂时用不到,然后nat表里有三个链,filter表里有三个链,总结两个表,五个链

常见封包流程:
使用iptables将内网ftp服务映射到其他内网服务器上
入站数据流向:数据包到达防火墙后首先被PREROUTING链处理(是否修改数据包地址等),然后进行路由选择(判断数据包发往何处),如果数据包的目标地址是防火墙本机(如:Internet用户访问网关的Web服务端口),那么内核将其传递给INPUT链进行处理(决定是否允许通过等)。

转发数据流向:来自外界的数据包到达防火墙后首先被PREROUTTING链处理,然后再进行路由选择;如果数据包的目标地址是其他的外部地址(如局域网用户通过网关访问QQ服务器),则内核将其传递给FORWARD链进行处理(允许转发,拦截,丢弃),最后交给POSTROUTING链(是否修改数据包的地址等)进行处理。

出站数据流向:防火墙本机向外部地址发送的数据包(如在防火墙主机中测试公网DNS服务时),首先被OUTPUT链处理,然后进行路由选择,再交给POSTROUTING链(是否修改数据包的地址等)进行处理。

下面实验下看看:
环境说明:vmware下两台虚拟机,虚拟机中的网关地址为192.168.255.2,宿主机的vm8网卡地址为192.168.255.1
192.168.255.129上搭建了ftp服务,被动模式,21为控制端口,1023至65535随机出现数据端口
192.168.255.131作为NAT服务器
目的将129的ftp服务其映射到192.168.255.131上的指定端口
准备工作,使129的网关地址为131
删除默认网关地址 : route delete default gw 网关ip(我这里是192.168.255.2)
新增默认网关地址: route add default gw 192.168.255.131

1.131要做的工作:去掉firewalld服务,关闭selinux,启用iptables服务,129无所谓,关闭firewalld和selinux就行了
systemctl stop firewald.service && sudo systemctl disable firewald.service
yum install iptables-services iptables-devel -y
systemctl enable iptables.service && sudo systemctl start iptables.service

2.开启131的网卡转发功能
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf && sysctl -p

3.131上设置允许255过来的网段进行地址伪装,也就是129到达之后,可以用131为源地址进行"外网”的访问,(必须要这条配置,没有这条配置将源129改为131,客户端收到包之后,直接将包丢弃)
iptables -t nat -A POSTROUTING -s 192.168.255.0/24 -j MASQUERADE

4.131上设置DNAT,将去往166端口的请求转发到129的21端口,131上可以不用开166端口,他自己会转发,理论上166端口的包到达pre链就直接转给了129的21端口,根本没有到达131自己的INPUT链,所以不需要放行131INPUT链的166端口
iptables -t nat -I PREROUTING -p tcp -d 192.168.255.131 --dport 166 -j DNAT --to 192.168.255.129:21

5.131上开启ftp内核模块追踪相关数据端口
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
lsmod | grep ftp 有东西表示成功

6.接下来访问测试看看?成功了
使用iptables将内网ftp服务映射到其他内网服务器上

7.通信详细流程(我想了好久,只有以下这种说法能说通)
第一个阶段:公网客户端1.3去往255.131:166,查找自身路由,将包发送给255.1,然后再由255.1转发给255.131:166,131发现PREROUTING链具有规则,于是将目的地址131:166转换成129:21端口(DNAT),经过FORWARD链(默认允许通过),经过POSTROUTING链,将源IP修改为192.168.255.131(SNAT)。发往129.
第二个阶段:129处理完封包请求,将包回传给131。此时源IP为192.168.255.129,目的IP为:192.168.255.131.
第三阶段:131上收到此包请求,经由PREROUTING链(没有匹配),发现目的IP是本机的,再交给INPUT链,再交给上层应用,发现有客户端正在访问该地址,于是将目的地址改为客户端IP,再经过NAT的OUTPUT链(允许通过),再经过filter表的OUTPUT链(通过),通过POSTROUTING链,将源IP192.168.255.129修改为192.168.255.131(SNAT),将包回传给255.1.最终到达客户端1.3

8.一些实验数据
A.我在131上配置PREROUTING链,宿主机上访问192.168.255.131:166,129上没有任何数据过来
使用iptables将内网ftp服务映射到其他内网服务器上

B.继续在131上增加配置POSTROUTING链,宿主机上再次访问,129上有数据了,这次我们加上wireshark一起看,131到达129上,但是129将数据返回给了131,认为源IP是255网段,POSTROUTING链生效,将源IP129修改为131,又返回给了255.1(这里宿主机和虚拟机是一个网段,即192.168.255.0/24,将客户端看成了192.168.255.1了,所以才会出现这种情况,而且最后还可以成功访问192.168.255.131:166)。
使用iptables将内网ftp服务映射到其他内网服务器上

使用iptables将内网ftp服务映射到其他内网服务器上
使用iptables将内网ftp服务映射到其他内网服务器上

转载于:https://blog.51cto.com/9237101/2327394

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值