网络安全实验三——防火墙实验
一、实验目的
*1. 配置linux系统下iptables防火墙*
(1)Iptables防火墙基本操作
(2)设置Iptables防火墙的包过滤规则,实现以下功能:
禁止所有主机ping本地主机;
允许某特定IP主机远程ping本地主机;
允许每10秒钟通过1个ping包;
阻断来自某个MAC地址的数据包。
(3)实现特定远端主机SSH连接本地主机
*2.实现内网服务的发布*
(1) 配置网络环境,测试网络连通情况
(2) 开启防火墙路由转发,设置iptables规则
(3) 验证公网主机能否通过访问防火墙获得内网服务
二、*实验环境*
实验1:
防火墙部署:Kali-linux 2022.3 192.168.8.129
客户端: windows xp 192.168.8.130
windows xp 192.168.8.131
Kali-linux 2022.3 192.168.8.132
Kali-linux 2022.3 192.168.8.133
实验2:
防火墙部署:Kali-linux 2022.3 192.168.8.129
客户端: windows xp 192.168.8.130(原) 10.21.240.150(新)
windows xp 192.168.8.131
软件:iptables、putty
虚拟机之间采用仅主机模式进行连接
三、*实验过程与结果*
(一)*访问控制实验*
- 先通过ifconfig命令查看防火墙所在主机网络配置信息
通过ping测试防火墙和其他主机的连通性,发现可以连通
- 通过查看iptables文档,选择对应的参数,设置iptables规则实现:(截图提交)
Ø 禁止所有主机ping本地主机
直接拒绝icmp 的请求包
sudo iptables -A INPUT -p icmp –icmp-type echo-request -j REJECT
ping失败 
Ø 仅允许某特定IP主机ping本地主机
iptables -I INPUT -p icmp –icmp-type echo-request -s 192.168.8.130 -j ACCEPT
131访问失败
130访问成功
Ø 允许每10秒钟通过1个ping包
先清除之前的规则iptables -F。
依次输入iptables -I INPUT -p icmp -m limit –limit 6/min –limit-burst 1 -j ACCEPT
和iptables -A INPUT -p icmp -j DROP,以实现允许每10s通过一个ping包
可见7个包用了68583ms,也就是10秒一个包
Ø 阻断来自某个mac地址的数据包
阻止MAC地址为00:0c:29:d5:b7:8f(xp 192.168.8.130)主机的所有通信:
iptables -A INPUT -m mac –mac-source 00:0c:29:d5:b7:8f -j DROP
拦截成功
3. *配置iptables,允许特定的远端客户机器SSH连接本地主机*
1) 在SSH服务器上打开服务,使得客户端可以通过22端口连接
查看服务器状态
客户端2
客户端连接后,SSH服务器上会留下记录
2) 配置iptables,只允许特定远端主机SSH连接本地主机。
iptables -I INPUT -p tcp –dport 22 -s 192.168.8.132 -j ACCEPT
iptables -A INPUT -p tcp –dport 22 -j DROP
3) 验证防火墙效果
在iptables中允许连接的客户端1仍可远程SSH连接
客户端2已经无法操作
(二)*NAT实验*
- 配置网络环境
首先,给作为firewall的ubuntu(或kali)增设网卡,并设置两张网卡处在不同的网络中,ifconfig查看ip
由上图可知,网关的配置如下:
内网ip:10.21.240.149 子网掩码:255.255.128.0
公网ip:192.168.8.129 子网掩码:255.255.255.0
- 设置PC1的网络适配器,与firewall网络适配器ens33处于一个网段(Vmnet0);PC2使用物理主机(或使用另一台虚拟机,网络设置同firewall的网络适配器ens38(Vmnet1))。
PC1:
PC2:
设置PC1的网关为firewall,并测试网络连通性。应实现:PC1可以与firewall互相ping通;PC2可以与firewall互相ping通;PC1与PC2无法互ping。(PC2如果是物理主机,请使用指定网卡进行ping操作,参考命令ping -S
PC1 ping kali:
PC21 ping kali:
- 开启firewall的路由转发
echo 1 > /proc/sys/net/ipv4/ip_forward
- 设置NAT规则
对公网来的访问数据设置DNAT规则,将其访问目标地址通过NAT修改为提供服务的ip,以便将请求转发到内网对应IP上。
iptables -t nat -A PREROUTING -i ens38 -p tcp -d 192.168.8.130 –dport 80 -j DNAT –to-destination 10.21.240.150
设置一条SNAT的规则,以便内网对公网数据访问的回应信息能够到达请求的客户。
iptables -t nat -A POSTROUTING -o ens38 -p tcp -j SNAT –to-source 192.168.8.130
在FORWARD链上设置允许访问内网的规则。
iptables -A FORWARD -i ens38 -p tcp -d 10.21.240.150 –dport 80 -j ACCEPT
iptables -A FORWARD -p tcp -m state –state established,related -j ACCEPT
- 启动PC1的nginx开启http服务
- 在PC2上验证能否通过firewall的ip访问内网主机服务。
- 解释上述使用的iptables规则,并分析NAT的实现原理
这一实验中的iptables规则主要有以下几条
iptables -t nat -A PREROUTING -i ens38 -p tcp -d 192.168.8.130 –dport 80 -j DNAT –to-destination 10.21.240.150
这个iptables规则的作用是将进入ens38接口,目标地址为192.168.8.130,目标端口为80的TCP数据包的目标地址修改为10.21.240.150,用于实现端口转发。
iptables -t nat -A POSTROUTING -o ens38 -p tcp -j SNAT –to-source 192.168.8.130
这个iptables规则的作用是将离开ens38接口的所有TCP数据包的源地址修改为192.168.8.130。在NAT环境中,将内部主机的私有IP地址替换为网关的公共IP地址,以便在Internet上进行通信。
iptables -A FORWARD -i ens38 -p tcp -d 10.21.240.150 –dport 80 -j ACCEPT
iptables -A FORWARD -p tcp -m state –state established,related -j ACCEPT
这两个iptables规则用于配置包转发策略。第一个规则允许进入接口ens38的目标地址为10.21.240.150,目标端口为80的TCP数据包通过系统。第二个规则允许已建立的连接或与已建立连接相关的TCP数据包通过系统的转发。这通常用于处理与先前已建立的连接相关的数据包,以确保它们被正确转发。
因此可知,NAT的实现就是通过防火墙阻隔内网和外网之间的通讯,并为内网的所有IP地址分配相对应的外网网段地址。防火墙起到了地址转换的作用,当其对外网进行收发信息的时候会将内网地址转化为外网分配IP,或将外网IP根据对应表转化为内网地址。从而实现信息中专功能。
四、实验总结
在本次实验中,学习到了iptables的相关用法和NAT的原理知识。iptables是Linux操作系统中用于配置IPv4包过滤规则、进行网络地址转换(NAT)和包队列处理的强大工具。通过iptables命令,用户可以定义防火墙规则,控制数据包的流动,并实现网络安全策略,包括端口转发、地址转换等功能,以保护系统免受网络攻击。iptables的灵活性和可定制性使其成为Linux系统中网络管理和安全配置的关键组件。
NAT将内部私有网络中的局域网IP地址映射为外部公共网络上的一个或多个公共IP地址。这通过在数据包经过设备时修改其源或目标IP地址来实现。NAT允许多个内部设备共享同一个公共IP地址,有效地解决了IPv4地址短缺的问题。它的基本原理是在数据包经过设备时,根据预定义的转换规则,更新数据包的IP地址信息,使其在内外网络之间传递时能够正确路由。这种技术广泛用于家庭网络和企业环境,为多个设备提供对互联网的访问,同时提供一定程度的网络安全和隐私保护。
通过本次的实验我认识到NAT的实现原理相对简单,但需要对每一次内外网连接操作进行IP转换,相对来说较为繁琐,当内网中主机数目不断增加,网关的负载程度也会大规模增加。