iptables的SNAT与DNAT配置

实验环境:

主机:Windows 10 20H2

虚拟机:Windows XP SP3,Ubuntu 16.04

网络连接:Ubuntu采用双网卡(NAT网络+内部网络),提供服务的WinXP采用内部网络,充当外网访问的WinXP采用NAT网络。

详细过程:

建立网络实验虚拟环境

        准备一个Ubuntu虚拟机以及两个WinXP虚拟机。将Ubuntu虚拟机的网卡1设置为NAT模式,网卡2设置为内部网络模式;将WinXP虚拟机的网卡设置为内部网络模式、NAT网络模式(图1)。

图 1

        在Ubuntu虚拟机中配置内网网卡(enp0s8),设置静态IP地址为192.168.0.1。然后编辑/etc/sysctrl.conf,将net.ipv4.ip_forward=1的注释去掉。操作结果如图2。使用命令/etc/init.d/networking restart重启服务。

图 2

        由于内部网络中需要Ubuntu虚拟机为两台WinXP虚拟机分配IP,因此需要通过apt安装dnsmasq。安装完成后,运行/etc/init.d/dnsmasq停止服务,修改/etc/dsnmasq.conf如图3。(由于命令较为分散因此使用grep逐个列出)。重启Ubuntu虚拟机使所有配置生效。

图 3

        两台WinXP虚拟机与Ubuntu虚拟机所处的内部网络名称应一致(intnet)。启动WinXP虚拟机并将IP改为自动获取,使用ipconfig查看能否从Ubuntu虚拟机获取IP。查询结果如图4,证明WinXP能够从Ubuntu虚拟机获取IP地址,IP地址分别为192.168.0.121和192.168.0.135。

 

图 4

        Ubuntu虚拟机的网络属性如图5。综上所述,Ubuntu虚拟机外网IP为10.0.2.15,内网IP为192.168.0.1;WinXP虚拟机IP分别为192.168.0.121和192.168.0.135。

图 5

在两台WinXP虚拟机上开启http服务和ftp服务。在控制面板->添加或删除程序->添加/删除Windows组件中勾选IIS进行安装。安装完成后,需要配置http服务的默认网页。新建文本文件,写入简单的html代码如图6,另存为index.html,并拷贝一份至C:\Inetpub\wwwroot目录下。

图 6

        在控制面板中找到Internet信息服务,右击“默认网站”设置属性。在“网站”页面中,将端口更改为8080;在“文档”页面中,添加index,html并上移至顶部。

图 7

        在WinXP浏览器中访问http://127.0.0.1:8080,可以看到出现自己编写的页面;访问ftp://127.0.0.1 可以出现默认文件。http和ftp服务验证结果如图8。

 

图 8

SNAT应用

1. SNAT配置

        为了使两台WinXP能够通过SNAT上网,需要在Ubuntu虚拟机iptables的nat表添加SNAT转发规则。向iptables的nat表添加的规则如图9所示,在POSTROUTING链上将源地址为192.168.0.0/24网段的IP转换为Ubuntu虚拟机的外网IP(10.0.2.15)。添加规则后,通过-L参数查看rules,如图10。

图 9

图 10

        在两台WinXP虚拟机上分别使用IE浏览器打开baidu.com、在cmd中ping baidu.com,测试结果如图11。结果显示,两台WinXP均能够通过http和ICMP访问外网。

图 11

2. 协议过滤

        在配置SNAT完成的基础上,可以在filter表中的FORWARD链对协议进行过滤,从而阻止或放行指定协议的数据包。本次实验中允许ICMP数据包通过,阻止http数据包通过。为了防止访问网站时出现https协议的干扰,因此将https协议一同阻止。配置命令如图12。

图 12

        配置完成后,通过-L参数查看规则,如图13所示。由于nat表没有变化,因此此处只展示filter表的规则。图中蓝框线内为配置的规则。

图 13 

        在两台WinXP虚拟机上分别使用浏览器访问baidu.com、在cmd中ping baidu.com,测试结果如图14。结果显示,两台WinXP均能够通过ICMP访问外网,但是不能通过http访问外网。

图 14

3. IP过滤

        执行iptables -t filter -F清除filter表的规则。如果要使一台WinXP能够上网,另一台不能上网,则可以通过IP过滤实现。配置命令如图15。配置的规则为:阻止源地址为192.168.0.110~192.168.0.130的数据包的转发,允许源地址为192.168.0.131~192.168.0.150的数据包的转发。这里IP过滤的是一段范围内的IP地址,当然也可以禁止单个IP地址。

图 15

        通过-L参数查看filter表的规则,如图16所示。蓝色框线内为配置的规则。

图 16

        在两台WinXP虚拟机上分别使用浏览器访问baidu.com、在cmd中ping baidu.com,测试结果如图17。结果显示,一台WinXP不能通过http和ICMP访问外网,另一台WinXP能够通过http和ICMP访问外网。

图 17

DNAT应用

        由于在NAT/NAT网络模式下主机访问虚拟机需要进行端口转发,而ftp在被动模式下往往需要随机端口建立数据链路,因此需要在NAT网络中设置WinXP虚拟机充当外网主机。网络结构大致如下图18所示。

图 18

1. DNAT配置

        为了使外网计算机能够访问到内网计算机(服务器)提供的服务,需要使用DNAT技术对IP地址进行转换。由于内网有两台WinXP提供服务,每台WinXP提供两种服务,因此不能简单地将发往Ubuntu的IP地址转换为其中一台WinXP的地址,而需要加上端口的对应关系。在本次实验中,(IP:Port)的转换关系如下表:

DNAT转换前

DNAT转换后

10.0.2.15:121

192.168.0.121:21

10.0.2.15:221

192.168.0.135:21

10.0.2.15:180

192.168.0.121:8080

10.0.2.15:280

192.168.0.121:8080

        使用iptables实现如上规则。四条规则均通过nat表的PREROUTING链实现,需要指定转换前的端口和转换后的端口。配置命令如图19。

图 19

        如此配置完成后,发现“外网”的WinXP能够成功访问内网服务器提供的http服务,但是ftp服务无法正常访问。考虑到目前ftp推荐使用被动模式,因此需要对被动模式下的ftp进一步配置。

        经查阅资料,资料[1]提出需要使用modprobe命令加载ip_conntrack_ftp和ip_nat_ftp模块;资料[2]显示加载的模块所提供的功能是Connection Tracking,能够记录连接的状态信息,从而动态地调整过滤或转发行为;资料[3]提出当Linux内核版本为4.7及以上时需要通过配置文件或iptables -A PREROUTING -t raw -p tcp --dport xxx -j CT --helper ftp命令启用某端口的ftp服务的Connection Tracking功能。对于ftp来说,connection tracking能够将ftp在随机端口发起的数据传输连接标记为RELATED,从而允许该连接的转发。有关模块加载和激活的命令如图20。

图 20

        通过-L参数查看已配置的规则,如图21。

图 21

        在NAT网络的WinXP上使用ftp客户端FileZilla以被动模式访问内网两台WinXP的ftp服务,使用IE浏览器访问http服务。验证结果如图22,证明经过DNAT的相关配置后处于“外网”的计算机确实能够访问内网提供的ftp和http服务。

图 22

参考资料:

[1] https://blog.csdn.net/weixin_33918357/article/details/90631341

[2] https://www.rigacci.org/wiki/lib/exe/fetch.php/doc/appunti/linux/sa/iptables/conntrack.html

[3] https://wiki.archlinux.org/title/Very_Secure_FTP_Daemon

2. IP限制

如果想要使外网计算机只能访问一台WinXP的http和ftp服务,则需要对IP地址和端口进行过滤。对于DNAT的IP和端口过滤,需要知道nat表的PREROUTING和filter表的FORWARD的执行顺序。根据资料[1],nat表的PREROUTING先于filter表的FORWARD执行,因此filter表中拒绝的IP地址应为192.168.0.121(内网的一台WinXP),端口为8080和21。Iptables的filter表配置如图23。

图 23

使用-L参数查看filter表配置的规则如图24。此处虽然开启了ftp的Connection Tracking,但只需要拦截其建立控制链路的数据包使其无法建立控制连接即可。

图 24

配置完成后使用外网的WinXP访问内网两个WinXP的ftp服务和http服务,结果如图25。结果显示,经过在filter表中对IP地址和端口的过滤后,其中一台WinXP的http服务和ftp服务已经无法访问,而另一台WinXP提供的服务可正常访问。

图 25

参考资料:

[1] https://www.programmersought.com/article/91143643550/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值