网络安全实验4:防火墙
防火墙课堂实验
实验目的
1.学习iptables防火墙基本操作。
2.设置iptables防火墙的包过滤规则,分别实现以下功能:
(1)禁止所有主机ping本地主机;
(2)仅允许某特定IP主机ping本地主机;
(3)允许每10秒钟通过1个ping包;
(4)阻断来自某个mac地址的数据包。
3.设置iptables规则,实现特定远端主机SSH连接本地主机
实验环境
1.配置防火墙的虚拟机:kali
2.验证防火墙功能的虚拟机:ubuntu
3.软件:iptables
4.Windows平台SSH工具:putty
(网络连接均设置为仅主机模式)
实验过程与结果
步骤一:查看主机信息并实现ping通
1.kali终端输入“ifconfig”,可知IP地址为192.168.32.129
2.ubuntu终端输入“ifconfig”,可知IP地址为192.168.32.130
3.kali ping通ubuntu。
4.ubuntu ping通kali。
步骤二:设置iptables防火墙的包过滤规则
1.在kali终端输入以下命令,禁止所有主机ping本地主机。
1 | sudo iptables -A INPUT -p icmp --icmp-type echo-request -j REJECT |
2.此时再次在ubuntu中尝试ping kali发现无法ping通。
3.在kali终端输入以下命令,仅允许指定ip地址的ubuntu主机ping主机kali。
1 | sudo iptables -I INPUT -p icmp -s 192.168.32.130 -j ACCEPT |
4.此时ubuntu就又能ping通kali了。
5.为了保证两条规则的先后顺序,首先输入sudo iptables -F清空全部规则,再输入sudo iptables -I INPUT -p icmp -m limit –limjit 6/min –limit-burst 1 -j ACCEPT命令加入允许每十秒通过一个ping包的规则,最后再加入禁止任何主机ping本地主机的规则,保证每十秒一个ping包的规则优先于后者。
1 | sudo iptables -F |
6.此时利用sudo iptables -L查看规则列表如下图所示,ACCEPT优先于REJECT。
1 | sudo iptables -L |
7.设置完成后,此时ubuntu ping kali,每十秒成功发送一个ping包,其余时间无法ping通。
8.再次清空iptables规则后,在kali终端输入sudo iptables -I INPUT -p icmp -m mac –mac-source 00:0c:29:71:1d:82 -j DROP,阻断来自ubuntu的Mac地址00:0c:29:71:1d:82的数据包。
1 | sudo iptables -F |
9.查看此时的规则列表如下,只有一条DROP规则。
10.此时ubuntu 无法ping通kali了。
步骤三:实现特定远端主机SSH连接本地主机
1.在kali终端分别执行sudo /etc/init.d/ssh start和sudo /etc/init.d/ssh status命令,启动kali的SSH服务并查看ssh服务器状态,使得客户端可以通过22端口连接。
1 | sudo /etc/init.d/ssh start |
2.在ubuntu终端输入ssh kali@192.168.32.129,ubuntu客户端SSH连接服务器kali。
3.在windows 11主机命令行中也输入ssh kali@192.168.32.129,主机客户端SSH连接服务器kali。
4.在kali终端再次查看ssh服务器状态,发现SSH服务器上留下记录,两个客户端成功连接服务器。
1 | sudo journalctl -u ssh -f |
5.再次清空iptables规则后,在kali终端输入sudo iptables -I INPUT -p tcp –dport 22 -s 192.168.32.130 -j ACCEPT允许远端主机ubuntu进行SSH连接,再输入sudo iptables -A INPUT -p tcp –dport 22 -j DROP禁止其他远端主机SSH连接。
1 | sudo iptables -F |
6.在iptables中允许连接的客户端1ubuntu仍可远程SSH连接。
7.客户端2本机windows 11已经无法连接,显示“client_loop: send disconnect: Connection reset”。
实验总结
在本次关于iptables防火墙配置的实验中,我深入学习了iptables这一Linux核心安全工具的基本操作与原理知识。iptables作为Linux系统中用于配置IPv4数据包过滤规则、实现网络地址转换(NAT)以及管理数据包队列的强大工具,其价值在于允许用户通过定义精细的规则集,主动控制网络数据包的流向与处理方式,从而构建起灵活而有效的网络安全策略,实现包括端口控制、访问限制及防御网络攻击在内的多种功能。
实验过程中,我首先熟悉了iptables的基本命令结构,包括对INPUT、FORWARD、OUTPUT等链的操作。随后,我着手设置具体的包过滤规则以完成一系列预定目标。首要任务是掌握如何限制ICMP协议,我们通过添加规则,将所有传入的ICMP回显请求包(即ping请求)丢弃,从而实现了禁止所有主机ping通本地主机的效果,这让我直观地理解了防火墙如何基于协议类型进行访问控制。
在此基础上,实验进一步提升了规则的精确性。我学习了如何使用-s参数指定源IP地址,通过设置一条允许特定IP主机ping的规则,并确保其位于默认的禁止规则之前,成功实现了仅允许该授权主机进行ping操作,而其他任何主机的请求均被阻断。这一正一反的规则设置,深刻体现了iptables规则顺序的重要性以及“白名单”策略的实现方法。
为了应对更复杂的流量整形需求,我们尝试使用了limit模块。通过配置-m limit –limit 6/minute(即每分钟6个,约合每10秒1个)这样的参数,我们实现了对ICMP请求的频率限制。当 ping 包的到来速率超过此阈值时,超出的请求会被自动丢弃。这个实验环节让我认识到,iptables不仅能够进行简单的“允许”或“拒绝”判断,还能对流量速率进行智能管理,这对于缓解网络洪泛攻击等场景具有实用意义。
此外,我们还探索了基于数据链路层信息的过滤方式,即根据源MAC地址来阻断数据包。这通过-m mac –mac-source参数实现,尽管MAC地址过滤在跨路由器的场景下作用有限,但它让我了解到防火墙规则可以作用于网络模型的不同层次,为局域网内的安全控制提供了另一种手段。
最后,实验的重点转向了应用层的访问控制,即管理SSH远程连接。我们通过添加规则,允许来自特定远端IP地址的TCP 22端口连接,同时可以配置默认策略拒绝其他所有SSH连接尝试。这个过程巩固了我对基于端口和状态(如新建连接)进行过滤的理解,这是保障服务器远程管理安全的基础。
总而言之,本次实验不仅让我熟悉了iptables的各种命令参数和规则链概念,更重要的是通过亲手实践,使我清晰地认识到如何将理论上的安全策略转化为具体、可执行的防火墙规则。iptables的高度可定制性确实使其成为Linux系统网络管理与安全防御中不可或缺的利器。通过这次实践,我初步具备了利用iptables构建基础主机防火墙的能力,并对网络数据包的流动与控制有了更为具象化的认识。
防火墙课后实验
实验目的
设置iptables规则,实现内网服务的发布:
1.配置网络环境,测试网络连通情况。
2.开启防火墙路由转发,设置iptables规则。
3.验证公网主机能否通过访问防火墙获得内网服务。
实验环境
1.两台虚拟机:一台配置防火墙、一台作为内网服务器
2.需一台虚拟机或物理主机作为公网主机
3.了解实验场景:假设PC2不能直接访问局域网内的电脑PC1上的服务,但PC2可以与firewall上的公网IP:192.168.2.254相互通讯,由此可以进行NAT的设置,让PC2访问firewall的公网地址上的服务,再由firewall对数据进行处理,将访问请求发送到内网PC1上。
实验过程与结果
步骤一:配置网络环境
1.首先给作为配置防火墙的主机ubuntu增设网卡,并设置两张网卡在不同的网络中。
(1)ifconfig查看ubuntu的IP地址。
(2)查看PC1(windows XP)的IP地址
(3)查看PC2(windows 10)的IP地址
2.由上图可知,网关的配置入下:
(1)内网IP:10.21.227.244,子网掩码:255.255.128.0
(2)公网IP:192.168.32.132,子网掩码:255.255.255.0
3.然后设置PC1(windows XP)的网络适配器,与firewall网络适配器ens33处于一个网段(Vmnet0)。
4.设置PC2(windows 10)的网络适配器,与firewall网络适配器ens37处于一个网段(Vmnet1)。
5.点击“开始”按钮找到控制面板,点击进入“网络和Internet-网络连接”,设置PC1的网关为firewall。
步骤二:测试网络连通性
1.PC1 windows xp和firewall kali可以互相ping通。
(1)PC1 ping通firewall。
(2)firewall ping通PC1。
2.PC2 windows 10和firewall kali可以互相ping通。
(1)PC2 ping通firewall。
(2)firewall ping通PC2。
3.PC1 windows XP和PC2 windows 10无法互ping。
(1)PC1 ping不通PC2。
(2)PC2 ping不通PC1。
步骤三:开启防火墙的路由转发,设置NAT规则
1.在ubuntu终端输入以下命令,开启firewall的路由转发。
1 | echo 1 > /proc/sys/net/ipv4/ip_forward |
2.在ubuntu终端输入以下命令,对公网来的访问数据设置DNAT规则,将其访问目标地址通过NAT修改由原ip(firewall)为提供服务的ip(PC1),以便将请求转发到内网对应IP上。
1 | iptables -t nat -A PREROUTING -i ens37 -p tcp -d 192.168.32.132 --dport 80 -j DNAT --to-destination 10.21.156.73 |
3.在ubuntu终端输入以下命令,设置一条SNAT的规则,以便内网对公网数据访问的回应信息能够到达请求的客户。
1 | iptables -t nat -A POSTROUTING -o ens37 -p tcp -j SNAT --to-source 192.168.32.132 |
4.在ubuntu终端输入以下两条命令,在FORWARD链上设置允许PC1 windows xp访问内网的规则。
1 | iptables -A FORWARD -i ens37 -p tcp -d 10.21.156.73 --dport 80 -j ACCEPT |
步骤四:PC1启动nginx开启http服务,PC2验证通过firewall访问内网服务
1.解压nginx-1.1.0文件夹后放在C盘下。
2.在命令行中进入nginx-1.1.0文件夹后,输入“start nginx”命令,启动PC1的nginx开启http服务。
3.在PC1中打开任务管理器查看进程,可以找到nginx.exe进程,说明nginx服务启动成功。
4.在PC2中打开浏览器访问firewall的外网ip地址192.168.32.132,看到如图所示的nginx欢迎页面即为通过firewall的ip访问内网主机服务成功。
步骤五:解释上述iptables规则并分析NAT的实现原理
1.开启firewall的路由转发
1 | echo 1 > /proc/sys/net/ipv4/ip_forward |
所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将包发往本机另一网卡,该网卡根据路由表继续发送数据包。这通常就是路由器所要实现的功能。
出于安全考虑,Linux系统默认是禁止数据包转发的。默认/proc/sys/net/ipv4/ip_forward该文件内容为0,即表示禁止数据包转发。1表示允许数据包转发,故使用echo 1 > /proc/sys/net/ipv4/ip_forward修改文件内容,将其内容修改为1,即开启firewall的路由转发。
2.首先了解局域网内封包的传送过程:
(1)先经过NAT table的PREROUTING链;
(2)经由路由判断确定这个封包是要进入本机与否,若不进入本机,则下一步;
(3)再经过Filter table的FORWARD链;
(4)通过NAT table的POSTROUTING链,最后传送出去。
3.对公网来的访问数据设置DNAT规则:
1 | iptables -t nat -A PREROUTING -i ens37 -p tcp -d 192.168.32.132 --dport 80 -j DNAT --to-destination 10.21.156.73 |
(1)PREROUTING:在进行路由判断之前所要进行的规则。
(2)-A:在规则链的末尾加入新的规则。
(3)DNAT:目标地址转换,能够让外网用户访问局域网内不同的服务器。
本条规则即表示将ens37网段(外网)上发送给firewall(ubuntu)的包的目标地址在路由前就由firewall(ubuntu)的IP地址转换为HTTP服务器PC1(windows XP)的IP地址。
4.设置一条SNAT的规则:
1 | iptables -t nat -A POSTROUTING -o ens37 -p tcp -j SNAT --to-source 192.168.32.132 |
(1)POSTROUTING:在进行路由判断之后所要进行的规则。
(2)-A:在规则链的末尾加入新的规则。
(3)-p:匹配协议,如TCP、UDP、ICMP。
(4)SNAT:源地址转换,能够让多个内网用户通过一个外网地址上网。
本条规则即表示将ens37网段(外网)上发出的包的源地址在路由前就由firewall(ubuntu)在ens33(内网)的IP地址转换为ens37(外网)的ip地址。
5.在FORWARD链上设置允许访问内网的规则:
1 | iptables -A FORWARD -i ens37 -p tcp -d 10.21.156.73 --dport 80 -j ACCEPT |
网络防火墙的主要职责是“过滤并转发”,在五链中只有INPUT、OUTPUT和FORWARD有filter(过滤)功能,要想实现转发,报文必须经过FORWARD链。因此,iptables的角色变为”网络防火墙”时,规则只能定义在FORWARD链。
第一条是网段ens37(外网)上发送给firewall的包都由HTTP服务器PC1(windows XP)的80端口接收,第二条是允许基础转发。
6.NAT的实现原理:
(1)NAT英文全称是“Network Address Translation”,中文意思是“网络地址转换”。它是一个IETF标准,允许一个整体机构以一个公用IP(Internet Protocol)地址出现在Internet上。顾名思义,它是一种把内部私有网络地址(IP地址)翻译成合法网络IP地址的技术。
(2)NAT的基本工作原理是,当私有网主机和公共网主机通信的IP包经过NAT网关时,将IP包中的源IP或目的IP在私有IP和NAT的公共IP之间进行转换。
(3)参考本次实验中的场景:
如上图所示,NAT网关(firewall-ubuntu)有两个网络端口,其中外网(ens37)端口的IP地址为192.168.32.132,内网(ens33)端口的IP地址为10.21.227.244。
当外网的IP包目的IP为192.168.32.132时这个IP包就会经过NAT网关,NAY Gateway会将该IP包的目的地址转换为HTTP服务器的IP地址并转发至内网。此时的IP包(Dst=10.21.156.73,Src=10.21.227.244)中已经不含任何外网IP的信息,HTTP Server发出的响应IP包(Dst=10.21.227.244,Src=10.21.156.73)将被发送到NAT Gateway。
这时,NAT Gateway会将IP包的目的IP转换为外网中的主机IP并转发至外网。此时的IP包(Dst=192.168.32.131,Src=192.168.32.132)中则已经不含任何内网IP的信息。
至此,对于通信双方PC1和PC2而言,这种地址的转换过程是完全透明的。
实验中出现的问题、原因和解决
问题一
问题:firewall ping不通PC2 win10
原因:windows 10的Windows Defender防火墙没有关闭。
解决办法:
(1)在windows 10虚拟机中找到我的电脑,右键选择“属性”。
(2)在属性中选择“控制面板主页”进入控制面板。
(3)选择“系统和安全-Windows防火墙”。
(4)在左侧“启用或关闭Windows防火墙”中关闭专用网络和公用网络下的Windows防火墙。
(5)关闭windows10防火墙后即可ping通。
问题二
问题:firewall ubuntu和PC1 windows XP不能互相ping通。
原因:在设置PC1网关为ubuntu时,“使用下面的IP地址”中填写的IP地址是原XP的IP地址,并非加入网段vmnet0后的IP地址。
解决办法:
(1)首先将windows XP虚拟机网络连接模式修改回NAT连接模式,然后重新将其加入网段vmnet0,本地连接属性也修改回“自动获得IP地址”。
(2)此时再使用ipconfig命令查看PC1的IP地址,可知加入网段vmnet0后PC2的IP地址为10.21.156.73。
(3)然后再修改本地连接中Internet协议的属性为“使用下面的IP地址”,其中IP地址为PC1加入网段vmnet0后的IP地址10.21.156.73,子网掩码和默认网关为ubuntu内网的子网掩码和IP地址。
(4)修改完成后即成功设置好PC1,PC1和firewall可以实现ping通。
PC1(windows xp)ping通firewall(ubuntu)
firewall(ubuntu)ping通PC1(windows xp)
实验总结
本次实验让我对iptables防火墙的工作原理有了更深入的理解。我成功设置了iptables规则,实现了内网服务的发布。通过实践,我认识到iptables作为工作在网络层的防火墙,通过内核层面的netfilter来处理TCP/IP数据包,这种机制确实具有很高的效率和稳定性。
在实验过程中,我首先配置了网络环境,确保各个节点之间的连通性。我特别注意到了防火墙路由转发的设置,这是实现服务发布的关键步骤。通过精心设计iptables规则,我实现了数据包的正确转发和地址转换。
最让我有成就感的是,当我在公网主机上访问防火墙的公网IP时,成功获得了内网服务器提供的服务。这个结果验证了我的配置是正确的,也让我切实感受到了防火墙在网络中的重要作用。通过DNAT和SNAT的配合使用,我实现了在保护内网安全的同时,又能让外部用户访问内网服务。
通过这次实验,我不仅掌握了iptables的具体配置方法,更重要的是理解了防火墙策略的设计思路。我认识到,一个合理的防火墙配置既要保证服务的可用性,又要确保网络的安全性,这需要在实践中不断摸索和优化。这次实验为我后续学习更复杂的网络安全管理打下了坚实的基础。






























































