网安实验3—防火墙
实验3:防火墙
1. 实验内容
学习 Linux 系统下 Iptables 防火墙基本操作,配置 iptables 防火墙。
- 配置 Iptables 防火墙的包过滤规则,实现以下功能: 禁止所有 IP 主机 ping 某主机; 允许某 IP 主机远程 ping 另一主机; 允许每 10 秒钟通过 1 个 ping 包。
- 配置 NAT 转换,包括 SNAT 和 DNAT。
- 配置 SSH 登录规则,允许某远端客户机器 SSH 登录另一主机。
2. 实验要求
- 依据《防火墙实验报告》模板撰写实验报告,内容包括:实验内容、 实验原理、实验环境、实验步骤与实验结果、实验中出现的问题、原因和解决、 实验总结等。
- 介绍实验拓扑在内的实验环境;
- 编写防火墙规则,完成实验内容,对实验结果进行截图。 实验报告命名格式为:《防火墙》实验报告-学号-姓名。
3. 实验过程
步骤1:搭建网络拓扑图
本次实验在网络安全虚拟仿真系统中完成,首先,登录后创建实例拓扑。
连接方式如上图,具体配置如下。
- 外网服务器Win10:采用Win10_DoS_WebAttacker模板。
- 防火墙网络配置如图。
- 内网用户Centos:采用practice/Centos_7_x64_7.6
进行保存和部署。
在初期搭建时,我将近端交换机替换为了路由器,因为在真正的网络环境中,是通过近端的路由器连入网络。但发现内网的用户没有本身的IP地址了,所以也ping不通外网服务器,最后重新按照老师的图进行的连接。在出现问题后,尝试过将防火前删除,路由器直接连到内网交换机,发现没有出现上述情况,所以可能是因为实验平台要求两台主机之间需要交换机相连,而在其中路由器和防火墙其实本质上还是两台主机。
远程连接外网服务器和内网用户,密码均为Planet9Secret
,互相发送ping请求,测试网络是否正常连接。
外网服务器->内网用户
内网用户->外网服务器
步骤2:禁止所有IP主机ping某主机
远程连接到防火墙,并以root身份登录。可以看到其防火墙实质是一个Ubuntu系统的主机。
查看iptables防火墙默认表中的所有列,可以看到没有任何的规则。
1 | iptables -L |
配置iptables
1 | iptables -A FORWARD -d 11.0.24.157 -j DROP |
-A FORWARD
:在FORWARD链(转发数据过滤)中添加防火墙规则。-d 11.0.24.157
:匹配目标地址(内网用户),到改地址的icmp包都拦截。-j DROP
:匹配到的目标动作为丢弃数据包。
此时,通过外网服务器或者外网路由器尝试ping内网用户,发现请求超时。
此处发现,如果通过内网用户ping外网服务器照样ping不通,其实是因为上面只添加了DROP规则,另外还需要添加FORWARD表的ACCEPT规则在DROP下面才能达到实验目的。
步骤3:允许某 IP 主机远程 ping 另一主机
iptables -F
清除之前指定的规则。
1 | iptables -A FORWARD -s 11.0.23.92 -d 11.0.24.157 -j ACCEPT |
-s 11.0.23.93
:匹配源地址(由外网服务器发出)。-j ACCEPT
: 允许数据包通过。
外网服务器和外网路由器再对内网用户尝试ping连通。可以看出,运行外网服务器ping通内网用户,而路由器则不能ping通内网用户。
外网服务器->内网用户
外网路由器->内网用户
步骤4:允许每 10 秒钟通过 1 个 ping 包
1 | iptables -R FORWARD 1 -p icmp -s 11.0.23.92 -d 11.0.24.157 -j ACCEPT -m limit --limit 6/minute --limit-burst 1 |
-R FORWARD 1
:替换防火墙FORWARD链上的第一个规则。-m limit
:采用limit的match模块(未查到)。--limit 6/minute
:每分钟限制通过6个包。--limit-burst
:规则限制在第一个包就发生。
外网服务器->内网用户
可以看到防火墙设置的规则已经生效,其中-t
参数是为了让其持续发icmp请求。
步骤5:配置 NAT 转换
首先,打开路由转发功能。
1 | echo "1" > /proc/sys/net/ipv4/ip_forward |
分别配置SNAT和DNAT。
1 | iptables -t nat -A POSTROUTING -s 11.0.24.1/24 -o eth0 -j SNAT --to-source 11.0.23.92 |
查看nat表,可见配置成功。
1 | iptables -t nat -L |
步骤6:配置 SSH 登录规则
首先清除之前所有的规则iptables -F
。在内网主机中开启并查看ssh-server服务,需要在root用户下开启。
1 | service sshd start |
在外网服务器中查看是否安装了ssh程序。
首先,尝试用外网服务器ssh连接内网用户,可以看到能够正常连接。
1 | ssh root@11.0.24.157 -p 22 |
设置防火墙,先拒绝所有的连接,可以看到无法连接。
1 | iptables -A FORWARD -p tcp --dport 22 -j DROP |
再设置插入允许特定主机的规则。
1 | iptables -I FORWARD -p tcp -s 11.0.23.92 -j ACCEPT |
4. 实验中出现的问题、原因和解决
- 实验拓扑防火墙外网以路由器连入出现内网无IP:原因可能是因为实验平台不允许两台主机相连,而路由器和防火墙本质上都是主机,所以出现问题。根据老师的连接方法,将路由器换为交换机即可。
- 步骤2中加入规则后出现双向ping不通,应该是单向:原因为在添加DROP规则后,应该还要添加单项的ACCEPT规则才能实现单向连通。
- 配置SSH登录规则问题:首先,Win10和Linux系统下SSH语句是存在差异的,另外在实验中只能外网服务器Win10远程连接内网用户,因为Win10模板中没有安装OpenSSH服务端应用,且不能联网安装。