一 实验目的
掌握Linux下防火墙的原理和配置方法。
二 实验内容
配置Linux下的一组防火墙规则,对内网、外网以及DMZ区交互的访问进行有效约束。
三 实验原理
防火墙作为一种访问控制的机制是确保网络安全的重要手段。针对不同的的需求和应用环境,可以量身定制出不同的防火墙系统。在众多网络防火墙产品中,Linux操作系统上的防火墙软件特点显著。首先是Linux操作系统在系统稳定性、健壮性及价格的低廉性方面都独具优势;更为重要的是系统包含了建立Internet所需的所有服务软件包。
Linux提供的防火墙软件包内置于Linux内核中,是一种基于包过滤型的防火墙实现技术。其中心思想是根据网络层IP包头中的源地址、目的地址及包类型等信息来控制包的流向。更彻底地过滤规则是检查包中的源端口、目的端口以及连接状态等信息。在Linux 2.4以上版的内核应用里一个全新的包过滤管理工具Iptables,可以加入、插入或删除包过滤表格中的规则。
iptables的原理主要是对数据包的控制:
- 一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转发出去。
- 如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。
- 如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出。
四 实验条件
计算机一台,用作外终端,带有一个网卡,命名为B,带linux操作系统虚拟机,命名为A,虚拟机用作路由器。(Ubuntu 20.04)
五 实验过程
1、查看IP并ping通
将虚拟机IP地址配置到和宿主机一个网段即可,注意地址不可与其他地址冲突。
关闭宿主机防火墙后,此时A和B是可以互ping的。
- 查看虚拟机的IP
# sudo apt install net-tools
ifconfig -a
如果说 ifconfig not found
,就用第一行代码安装一下 net-tools
发现IP是192.168.85.128
- 查看window的IP
ipconfig
- 互相ping
在Windows:
ping 192.168.85.128
在虚拟机:
ping 192.168.85.1
截图结果是类似的。
发现已经可以互相成功Ping通了,该步骤完成。
问题:如果Ping不通,采取以下步骤:
打开"高级安全Windows Defender"防火墙
入站规则
找到配置文件类型为“公用”的“文件和打印共享(回显请求–ICMPv4-In)”规则,设置为允许
虚拟机可以ping通主机
参考博客 解决——虚拟机无法Ping通主机
2、启动防火墙
# 启动防火墙
modprobe ip_tables
sudo ufw enable
sudo ufw reload
3、设置规则
清除filter表中的规则,设置默认规则为丢弃一切报文 ,并用wireshark检验
# 设置规则
sudo iptables -F
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT DROP
sudo iptables -P FORWARD DROP
# ping命令检验
ping 192.168.85.1
设置完后发现发送的报文已经都被丢弃了
4、限制Ping----A可Ping
设置规则,让主机A可以 ping其它机器,其它机器不可以ping主机A 【此时由虚拟机去ping的话又可以接受到包】
sudo iptables -A INPUT -p icmp -m state --state ESTABLISHED,RELATED -j ACCEPT
# 第一个IP为虚拟机地址,第二个为window地址
sudo iptables -A OUTPUT -s 192.168.85.128 -d 192.168.85.1 -p icmp -j ACCEPT
- 虚拟机去ping windows:
ping 192.168.85.1
- windows去ping虚拟机:
ping 192.168.85.128
5、限制Ping----A不可Ping
设置规则:让其它机器可以ping主机A ,阻止主机A ping其它机器
# 先要把之前的规则去掉
sudo iptables -F OUTPUT
sudo iptables -F INPUT
sudo iptables -A OUTPUT -p icmp -m state --state ESTABLISHED,RELATED -j ACCEPT
# 位置反一反
sudo iptables -A INPUT -s 192.168.85.1 -d 192.168.85.128 -p icmp -j ACCEPT
# 查看INPUT情况
sudo iptables -L
sudo iptables -P INPUT ACCEPT
- 虚拟机去ping windows:
ping 192.168.85.1
- windows去ping虚拟机:
ping 192.168.85.128
6、开放Ping
主机A可以ping其它机器,也允许其它机器ping主机A
sudo iptables -F OUTPUT
sudo iptables -F INPUT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -A OUTPUT -s 192.168.85.128 -d 192.168.85.1 -p icmp -j ACCEPT
sudo iptables -A INPUT -s 192.168.85.1 -d 192.168.85.128 -p icmp -j ACCEPT
- 虚拟机去ping windows:
ping 192.168.85.1
- windows去ping虚拟机:
ping 192.168.85.128
六、思考题
(1)所有链的预设规则应该设置为什么?为什么?(DROP、ACCEPT?)
- FORWARD(相当于路由器):DROP,做到对内网ip的控制,你允许哪一个访问internet就可以增加一个规则,不在规则中的ip将无法访问internet
- INPUT:DROP,当服务器不需要与他人通信时,将INPUT设置为DROP就可以防止其他人对自身进行攻击
- OUTPUT:ACCEPT,由于accept会过滤从本机向外发出的数据包,当没有外界信息流入,仅自己与外界通信时,是具备一定的可靠性的
(2)包过滤防火墙有什么优缺点?
参考链接:包过滤防火墙_百度百科
包过滤防火墙是用一个软件查看所流经的数据包的包头(header),由此决定整个包的命运。它可能会决定丢弃(DROP)这个包,可能会接受(ACCEPT)这个包(让这个包通过),也可能执行其它更复杂的动作
优:
- 对于一个小型的、不太复杂的站点,包过滤比较容易实现
- 过滤路由器工作在IP层和TCP层,所以处理包的速度比代理服务器快
- 过滤路由器为用户提供了一种透明的服务,用户不需要改变客户端的任何应用程序,也不需要用户学习任何新的东西。因为过滤路由器工作在IP层和TCP层,而IP层和TCP层与应用层的问题毫不相关。所以,过滤路由器有时也被称为“包过滤网关”或“透明网关”,之所被称为网关,是因为包过滤路由器和传统路由器不同,它涉及到了传输层。
- 过滤路由器在价格上一般比代理服务器便宜
缺:
- 一些包过滤网关不支持有效的用户认证
- 规则表很快会变得很大而且复杂,规则很难测试。随着表的增大和复杂性的增加,规则结构出现漏洞的可能 性也会增加
- 这种防火墙最大的缺陷是它依赖一个单一的部件来保护系统。如果这个部件出现了问题,会使得网络大门敞开,而用户甚至可能还不知道
- 在一般情况下,如果外部用户被允许访问内部主机,则它就可以访问内部网上的任何主机
- 包过滤防火墙只能阻止一种类型的IP欺骗,即外部主机伪装内部主机的IP,对于外部主机伪装外部主机的IP欺骗却不可能阻止,而且它不能防止DNS欺骗
(3)如果规则链中两条规则是互相矛盾的,如前一条是禁止某个端口,后一条是打开这个端口,会出现什么情况?
iptables的规则匹配是按顺序匹配的,因此如果前一条是禁止某个端口,由于其位置更为靠前,将会被优先匹配,因此在这种情况下会禁止该端口。
sudo iptables -F
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -A INPUT -s 192.168.85.1 -d 192.168.85.128 -p icmp -j ACCEPT
sudo iptables -A OUTPUT -s 192.168.85.128 -d 192.168.85.1 -p icmp -j ACCEPT
sudo iptables -F
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -A INPUT -s 192.168.85.1 -d 192.168.85.128 -p icmp -j DROP
sudo iptables -A INPUT -s 192.168.85.1 -d 192.168.85.128 -p icmp -j ACCEPT
sudo iptables -A OUTPUT -s 192.168.85.128 -d 192.168.85.1 -p icmp -j ACCEPT
七 实验问题
1、解决:ifconfig not found
如果说 ifconfig not found
,就用以下代码安装一下 net-tools
sudo apt install net-tools
2、解决:虚拟机与主机Ping不通
参考博客 解决——虚拟机无法Ping通主机