一、实验目的
(1)课上实验:
1.学习iptables防火墙基本操作。
2.设置iptables防火墙的包过滤规则,分别实现以下功能:禁止所有主机ping本地主机;仅允许某特定IP主机ping本地主机;允许每10秒钟通过1个ping包;阻断来自某个mac地址的数据包。
3.设置iptables规则,实现特定远端主机SSH连接本地主机。
(2)课后实验:
实现内网服务的发布:
1.配置网络环境,测试网络连通情况。
2.开启防火墙路由转发,设置iptables规则。
3.验证公网主机能否通过访问防火墙获得内网服务。
通过进行上述的课上实验和课后实验,能够进一步掌握防火墙功能实现的原理。
二、实验环境
(1)课上实验
1.防火墙:Kali-linux。
2.其他主机:Ubuntu。
3.软件:iptables、Xshell。
(2)课后实验
1.防火墙:Ubuntu。
2.内网主机PC1:Windows 7虚拟机。
3.公网主机PC2:Windows 7虚拟机。
4.软件:iptables、nginx。
三、实验过程与结果
一、课上实验
(1)使用ifconfig查看两虚拟机的地址信息:
(2)可以看到此时两虚拟机之间能够相互ping通:
(3)在kali的命令行输入sudo iptables -A INPUT -p icmp -j DROP,以实现禁止所有主机ping本地主机的目的:
此时在ubuntu输入ping 192.168.161.130,可以看到已经不能ping通:
(4)在kali的命令行输入sudo iptables -I INPUT -p icmp -s 192.168.161.129 -j ACCEPT,以实现仅允许ip地址为192.168.161.129的主机ping通本地主机:
输入 sudo iptables -L确认上述功能的实现:
此时在ubuntu输入ping 192.168.161.130,可以看到能够重新ping通:
(5)在kali的命令行依次输入sudo iptables -I INPUT -p icmp -m limit --limit 6/min --limit-burst 1 -j ACCEPT 和sudo iptables -A INPUT -p icmp -j DROP,以实现允许每10s通过一个ping包:
输入 sudo iptables -L确认上述功能的实现:
此时在ubuntu输入ping 192.168.161.130,通过观察和结束ping后的提示语句:“61 packets transmitted, 7 received, 88.5246% packet loss, time 61324ms rtt min/avg/max/mdev = 0.443/1.343/2.215/0.624 ms”可以确认是每10s通过一个ping包:
(6)由于ubuntu主机的MAC地址为00:0c:29:98:55:54,因此在kali的命令行输入sudo iptables -A INPUT -m mac --mac-source 00:0c:29:98:55:54 -j DROP,以实现阻断来自该MAC地址的数据包的目的:
输入 sudo iptables -L确认上述功能的实现:
此时在ubuntu输入ping 192.168.161.130,可以看到已经不能ping通:
(7)配置iptables,允许特定的远端客户机器SSH连接本地主机:
首先在kali启动ssh服务,使得客户端可以通过22端口远程连接:
查看ssh服务器的状态:
使用ubuntu和Xshell分别作为客户端1和客户端2,进行ssh远程连接服务器,可以看到均成功连接:
在kali的命令行依次输入sudo iptables -I INPUT -p tcp --dport 22 -s 192.168.161.129 -j ACCEPT和sudo iptables -A INPUT -p tcp --dport 22 -j DROP,以实现只允许客户端1进行ssh连接的目的:
验证防火墙效果,可以看到此时客户端1仍然可以远程ssh连接:
而客户端2已经无法连接到kali:
二、课后实验
(1)首先了解一下实验场景:
如上图所示,假设PC2不能直接访问局域网内的电脑PC1上的服务,但PC2可以与firewall上的公网IP:192.168.2.254相互通讯,由此可以进行NAT的设置,让PC2访问firewall的公网地址上的服务,再由firewall对数据进行处理,将访问请求发送到内网PC1上。
(2)配置网络环境
首先,给作为firewall的ubuntu增设网卡,并设置两张网卡处在不同的网络中(网卡1使用自定义的VMnet0,网卡2使用自定义的VMnet1),ifconfig查看ip:
由上图可知,网关的配置如下:
内网ip:192.168.43.57 子网掩码:255.255.255.0
公网ip:192.168.241.128 子网掩码:255.255.255.0
设置PC1的网络适配器,与firewall网络适配器ens33处于一个网段(VMnet0);PC2使用另一台虚拟机,网络设置同firewall的网络适配器ens38(VMnet1)。
设置PC1的网关为firewall,并测试网络连通性。应实现:PC1可以与firewall互相ping通;PC2可以与firewall互相ping通;PC1与PC2无法互ping。
下图是设置PC1的网关:
测试网络连通性:
1.PC1可以与firewall互相ping通:
2.PC2可以与firewall互相ping通:
3.PC1与PC2无法互ping:
(3)开启防火墙的路由转发
在firewall的命令行以管理员的身份输入echo 1 > /proc/sys/net/ipv4/ip_forward:
(4)设置NAT规则
对公网来的访问数据设置DNAT规则,将其访问目标地址通过NAT修改为提供服务的ip,以便将请求转发到内网对应IP上:
iptables -t nat -A PREROUTING -i ens38 -p tcp -d 192.168.241.128 --dport 80 -j DNAT --to-destination 192.168.43.23
设置一条SNAT的规则,以便内网对公网数据访问的回应信息能够到达请求的客户:
iptables -t nat -A POSTROUTING -o ens38 -p tcp -j SNAT --to-source 192.168.241.128
在FORWARD链上设置允许访问内网的规则:
iptables -A FORWARD -i ens38 -p tcp -d 192.168.43.23 --dport 80 -j ACCEPT
iptables -A FORWARD -p tcp -m state --state established,related -j ACCEPT
(5)启动PC1的nginx开启http服务:
在PC2上输入192.168.241.128,即firewall的ip:
可以看到启动PC1的http服务后,PC2可以通过使用防火墙公网IP访问内网服务。
(6)上面涉及到的SNAT、DNAT和iptables的原理分析
SNAT:开通内网机器的外网访问权限,是指在数据包从网卡发送出去的时候,把数据包中的源地址部分替换为指定的IP,这样,接收方就认为数据包的来源是被替换的那个IP的主机,MASQUERADE是用发送数据的网卡上的IP来替换源IP,因此,对于那些IP不固定的场合,比如拨号网络或者通过dhcp分配IP的情况下,就得用MASQUERADE。
DNAT:发布内网服务,让外网能访问到,就是指数据包从网卡发送出去的时候,修改数据包中的目的IP,表现为如果你想访问A,可是因为网关做了DNAT,把所有访问A的数据包的目的IP全部修改为B,那么,你实际上访问的是B,因为路由是按照目的地址来选择的。因此,DNAT是在PREROUTING链上来进行的,而SNAT是在数据包发送出去的时候才进行,因此是在POSTROUTING链上进行的。
iptables:基于内核netfilter实现的,可以制定一些规则(rules)来对主机收到的数据包进行处理,规则其实就是网络管理员预定义的条件,规则一般的定义为“如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加、修改和删除这些规则。
四、实验总结
通过本次实验,我学习了iptables防火墙的基本操作,熟悉了iptables防火墙的包过滤规则,并实现了一些实用的功能。另外,我动手配置了网络环境,开启防火墙路由转发并设置相应的iptables规则,以此实现内网服务的发布。这些体验都是在书本知识上感受不到的,正所谓“纸上得来终觉浅,绝知此事要躬行”。
同时,在进行实验的过程中,我也遇到了许多问题,在解决这些问题的过程中,我也收获了许多,学习到了很多。
有两个让我印象深刻的问题:
1.Win7虚拟机能够ping通ubuntu,但是ubuntu却ping不通Win7。通过查阅相关资料,我找到了解决方法:在Win7虚拟机的控制面板中点击“网络与Internet”,并进入“网络和共享中心”:
进入“更改高级共享设置”,启用网络发现、启用公用文件夹共享即可:
2.在给作为firewall的ubuntu增设网卡后,输入ifconfig查看ip时,ens33处不出现ip,如下所示:
解决方法:此时我的主机连接的是wifi,我把wifi关掉,然后主机连接手机的移动热点,再重启ubuntu,输入ifconfig,ens33处便能正常显示ip了。
最后,通过这次实验,我对网络安全这门技术有了更进一步的了解,也意识到维护网络安全任重而道远,需要我们持之以恒地学习和实践。