虚拟防火墙

虚拟防火墙

前言

image-20230611135254312

所谓虚拟防火墙就是在物理防火墙上创建虚拟防火墙,这与在LINUX系统上创建KVM虚拟机或docker虚拟机的感觉差不多,当我们在LINUX系统上安装完DOCKER或KVM等应用,用户空间会发现多出一个虚拟网卡用于虚拟机的通信,在虚拟防火墙的实验当中我们也会发现当打开虚拟防火墙功能之后也会产生一个虚拟网卡:Virtual-if0.

不仅如此,虚拟防火墙之间的通信与LINUX虚拟机之间的通信也非常类似,我们可以将虚拟机A的流量通过tcp socket的方式交给虚拟机B来访问,也可以直接通过unix docket的方式交给虚拟机B来访问。简单解释一下,所以的通过tcp socket的方式就是A虚拟机将流量先调度到物理机,然后由物理机转发给B虚拟机;而unix socket指的是两个进程之间直接通过中间的L2_SW直接通信,不通过物理机转发。

虚拟防火墙的应用

虚拟防火墙的应用相当广泛,最基础的一个应用,可以通过购买一台物理防火墙,然后将其虚拟机多个防火墙,每个防火墙完成不同的工作。比如我们公司只有一台物理防火墙,但虚拟出了两台,一台当外网防火墙,一台当内网防火墙;当然虚拟防火墙的应用还不仅如此,我们还可以将虚拟出来的防火墙对应不同的部门,实现部门的精细化管理,比如让虚拟机A对应A部门,虚拟机B对应B部门,在虚拟机内部进行安全策略的精细化控制。

虚拟防火墙与物理防火墙的区别

当我们创建完一个虚拟防火墙并进入这个虚拟防火墙之后,会发现操作与物理防火墙并没有太大区别,操作逻辑都是是类似的,比如你要先把接口划入到安全域 ,在接口下配置IP地址,配置路由,配置安全策略,这些配置方法都是一致的。

虚拟防火墙与物理防火墙之间是如何通信的?

# LINXU-CENTOS在安装完之后会有产生一个叫virbr0的虚拟网卡,如下所示
[13:42root@nfs_server ~]# ip addr show 
virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 

其实当我们在华为的物理防火墙上启动防火墙虚拟化功能之后也会产生个一个叫Virtual-if0的虚拟网卡,如下所示

<USG6000V1>dis ip int bri                   
……
Virtual-if0                       unassigned           up         up(s)   

其它这个网卡就是用于与虚拟机进行通信的,这与你在windows上安装vmware workstation软件之后也会产生虚拟网卡的原理是类似的,就是物理机需要借且这个网卡与虚拟机者通信,如下所示:

image-20230611134835002

虚拟防火墙之间又是如何通信的呢

这个问题也非常的简单呀,在vmware workstation当中我们只要把两个虚拟机接入到同一个虚拟交换机两个虚拟主机就可以通信了,华为的虚拟防火墙比这个还要简单,创建出来虚拟防火墙默认就接入在二层交换机上,如下所示:

image-20230611135254312

  1. 你可以直接在虚拟防火墙的虚拟接口上配置IP地址,直接直接通过二层交换机扔到另一个虚拟交换机的网口上,比如直接从V1接口通过二层交换机直接扔到V3接口上;

    ip route-static vpn-instance vfw1 10.1.3.0 24 vpn-instance vfw3
    ip route-static vpn-instance ufw3 10.1.1.0 24 vpn-instance vfw1
    
  2. 还有第三种通信方式,A虚拟机将数据扔给物理防火墙,然后物理防火墙再转发给另一个虚拟防火墙,这样也行。

实验

拓扑和需求

image-20230611160128730

实验说明:

  • 一台物理防火墙连接三个部门,我们打算划分三个虚拟防火墙分别对应三个部门
  • 需求一:部门A的所有人都可以正常上网,对外网server服务器权限没有任何的限制
  • 需求二:对于部门B,我们只需要部门B部门下所有人只能访问外网服务器的80端口;
  • 需求三:对于部门C,我们只需要特定的人员ping通server服务器;
  • 需求四:部门A能自由访问部门C

需求一

思路:

  1. 开启虚拟防火墙功能并创建虚拟防火墙firewall_a,并检测网卡是否都创建成功
  2. 给虚拟防火墙分配资源:会话和添加1/0/1接口给A部门对应的虚拟防火墙;
  3. 进入虚拟防火墙:配置接口IP、将接口加入到区域、配路由、配安全策略
  4. 退出到物理防火墙:配置外网接口IP、配置NAT策略、配置安全区域、制定安全策略、配置路由
# 创建虚拟防火墙firewall_a
vsys enable
vsys name firewall_a
[USG6000V1]dis ip vpn-instance 
2023-06-11 06:09:13.530 
 Total VPN-Instances configured      : 2
 Total IPv4 VPN-Instances configured : 2
 Total IPv6 VPN-Instances configured : 1

  VPN-Instance Name               RD                    Address-family
  default                                               IPv4       
  firewall_a                                            IPv4       
  firewall_a                                            IPv6       

# 给虚拟防火墙分配会话资源和接口资源
# 创建虚拟系统并添加接口
vsys enable
vsys name firewall_a
assign interface g1/0/1


# 创建资源类
resource-class r1
# 保证50个会话,最多不超过100个,没设置就是最大
resource-item-limit session reserved-number 50 maximum 100

# 给虚拟系统添加资源类
vsys name firewall_a
	assign resource-class r1
	
[USG6000V1-vsys-firewall_a]dis th
2023-06-11 06:12:37.470 
#
vsys name firewall_a 1
 assign interface GigabitEthernet1/0/1
 assign resource-class r1
#
# 进入到虚拟防火墙开始基础配置
[USG6000V1-firewall_a]int g1/0/1
[USG6000V1-firewall_a-GigabitEthernet1/0/1]service-man ping permit
[USG6000V1-firewall_a-GigabitEthernet1/0/1]ip add 192.168.11.1 24
[USG6000V1-firewall_a-GigabitEthernet1/0/1]firewall zone trust
[USG6000V1-firewall_a-zone-trust]add interface g1/0/1
[USG6000V1-firewall_a-zone-untrust]add interface virtual-if1
[USG6000V1-firewall_a-zone-untrust]security-policy 
[USG6000V1-firewall_a-policy-security]rule name firewall_a_to_public
[USG6000V1-firewall_a-policy-security-rule-firewall_a_to_public]source-zone trust
[USG6000V1-firewall_a-policy-security-rule-firewall_a_to_public]destination-zone untrust
[USG6000V1-firewall_a-policy-security-rule-firewall_a_to_public]action permit
[USG6000V1-firewall_a-policy-security-rule-firewall_a_to_public]service any
[USG6000V1-firewall_a-policy-security-rule-firewall_a_to_public]ip route-static 0.0.0.0 0.0.0.0 public
# 接下来我们去到物理防火墙进行流量的接应,注意会从virtual-if0接口流进来
[USG6000V1]firewall zone trust
[USG6000V1-zone-trust]add interface virtual-if0
[USG6000V1-zone-trust]firewall zone untrust
[USG6000V1-zone-untrust]add interface g1/0/6
[USG6000V1-zone-untrust]int g1/0/6
 ip address 10.0.0.1 255.255.255.0
 service-manage ping permit
[USG6000V1]ip route-static 0.0.0.0 0.0.0.0 10.0.0.4 
[USG6000V1]ip route-static 192.168.11.0 24 vpn-instance firewall_a
 rule name trust_to_untrust
  source-zone trust
  destination-zone untrust
  source-address 192.168.11.0 mask 255.255.255.0
  service icmp
  action permit
[USG6000V1]nat-policy 
[USG6000V1-policy-nat]rule name pat
[USG6000V1-policy-nat-rule-pat]source-zone trust
[USG6000V1-policy-nat-rule-pat]destination-zone untrust
[USG6000V1-policy-nat-rule-pat]action source-nat easy-ip
# 排错命令
[USG6000V1]dis firewall session table 
2023-06-11 06:45:45.030 
 Current Total Sessions : 1
 netbios-datagram  VPN: public --> public  192.168.10.1:138 --> 192.168.10.255:138

需求二

对于部门B,我们只需要部门B部门下所有人只能访问外网服务器的80端口;

vsys name firewall_b 
 assign interface GigabitEthernet1/0/2
 assign resource-class r1
[USG6000V1]switch vsys firewall_b
<USG6000V1-firewall_b>sys
Enter system view, return user view with Ctrl+Z.
[USG6000V1-firewall_b]int g1/0/2
[USG6000V1-firewall_b-GigabitEthernet1/0/2]ip add 192.168.2.1 24
[USG6000V1-firewall_b-GigabitEthernet1/0/2]service-man ping permit
[USG6000V1-firewall_b-GigabitEthernet1/0/2]firewall zone trust
[USG6000V1-firewall_b-zone-trust]add interface g1/0/2
[USG6000V1-firewall_b-zone-trust]firewall zone untrust
[USG6000V1-firewall_b-zone-untrust]add interface virtual-if2
[USG6000V1-firewall_b-zone-untrust]security-policy
[USG6000V1-firewall_b-policy-security]rule name firewall_b_to_public
[USG6000V1-firewall_b-policy-security-rule-firewall_b_to—blic]source-zone trust
[USG6000V1-firewall_b-policy-security-rule-firewall_b_to—blic]destination-zone untrust
[USG6000V1-firewall_b-policy-security-rule-firewall_b_to—blic]action permit
[USG6000V1-firewall_b-policy-security-rule-firewall_b_to—blic]service http  
[USG6000V1-firewall_b-policy-security-rule-firewall_b_to—blic]quit
[USG6000V1-firewall_b-policy-security]ip route-static 0.0.0.0 0.0.0.0 public
[USG6000V1]security-policy 
[USG6000V1-policy-security]rule name firewall_b_to_public
[USG6000V1-policy-security-rule-firewall_b_to_public]source-zone trust
[USG6000V1-policy-security-rule-firewall_b_to_public]destination-zone untrust
[USG6000V1-policy-security-rule-firewall_b_to_public]service http
[USG6000V1-policy-security-rule-firewall_b_to_public]action permit
[USG6000V1-policy-security-rule-firewall_b_to_public]quit
[USG6000V1-policy-security]ip route-static 192.168.2.0 24 vpn-instance firewall_b

需求三

需求三:对于部门C,我们只需要特定的人员(192.168.3.3)ping通server服务器;

vsys name firewall_c 
 assign interface GigabitEthernet1/0/3
 assign resource-class r1
[USG6000V1-vsys-firewall_c]sw vsys firewall_c
<USG6000V1-firewall_c>sys
[USG6000V1-firewall_c]int g1/0/3
[USG6000V1-firewall_c-GigabitEthernet1/0/3]ip add 192.168.3.1 24
[USG6000V1-firewall_c-GigabitEthernet1/0/3]service ping permit
[USG6000V1-firewall_c-GigabitEthernet1/0/3]firewall zone trust
[USG6000V1-firewall_c-zone-trust]add interface g1/0/3
[USG6000V1-firewall_c-zone-trust]firewall zone untrust
[USG6000V1-firewall_c-zone-untrust]add interface virtual-if3
[USG6000V1-firewall_c-zone-untrust]security-policy
[USG6000V1-firewall_c-policy-security]rule name trust_to_untrust
 rule name trust_to_untrust
  source-zone trust
  destination-zone untrust
  source-address 192.168.3.3 mask 255.255.255.255
  service icmp
  action permit
  [USG6000V1-firewall_c]ip route-static 0.0.0.0 0.0.0.0 public
[USG6000V1]security-policy 
[USG6000V1-policy-security]rule name firewall_3_to_untrust
[USG6000V1-policy-security-rule-firewall_3_to_untrust]source-zone trust
[USG6000V1-policy-security-rule-firewall_3_to_untrust]destination untrust
[USG6000V1-policy-security-rule-firewall_3_to_untrust]source-address 192.168.3.3 32
[USG6000V1-policy-security-rule-firewall_3_to_untrust]action permit
[USG6000V1-policy-security-rule-firewall_3_to_untrust]service icmp
[USG6000V1-policy-security-rule-firewall_3_to_untrust]dis th
2023-06-11 07:10:47.210 
#
 rule name firewall_3_to_untrust
  source-zone trust
  destination-zone untrust
  source-address 192.168.3.3 mask 255.255.255.255
  service icmp
  action permit
#
[USG6000V1]ip route-static 192.168.3.0 24 vpn-instance firewall_c

需求四

需求四:部门A能自由访问部门C

这个需求很有意思,有多种方法都可以实现.我们可以直接让A把去往C的流量直接扔给根示例,本来就是这么走的,然后根示例根据路由会自动转发到C,这时候对于C来说,这是从untrust到trust的流量,所以这个地方需要C允许一下即可,其它的我们在前面的过程当中都已经做完了,如下所示:

# 去到防火墙firewall_c当中
 rule name a_to_c
  source-zone untrust
  destination-zone trust
  action permit
  
  # 去AR上测试焉,成功!

其实还有另一种办法 ,不走根示例,直接通过中间的二层交换机扔过来,也是可以的,这是三层通信,所以要在虚拟接口上配置IP地址,并且这个操作需要很高的权限,所以需要在物理机上去做,如下所示:

# firewall_a
int virtual-if 1
	ip add 192.168.1.1 24
# firewall_c
int virtual-if 3
	ip add 192.168.1.3 24

# 上面firewall_c上的 rule name a_to_c 要保留哟
[USG6000V1]ip route-static vpn-instance firewall_a 192.168.3.0 24 vpn-instance firewall_c
[USG6000V1]ip route-static vpn-instance firewall_c 192.168.11.0 24 vpn-instance firewall_a

现在可以把物理防火墙上到192.168.3.0的路由删除掉,部门A仍然能访问部门C,说明流量根本就没走根实例!

posted @ 2021-05-05 22:54  张贺贺呀  阅读(524)  评论(1)    收藏  举报