Security Context Overview
        我们可以将一个单一的物理防火墙逻辑上分为多个虚拟防火墙,每个虚拟防火墙都是独立的设备,它们有自己独立的安全策略、接口和管理接口;ASA会为每个虚拟防火墙保存一个配置文件,以保存每个虚拟防火墙的这些策略和配置;这些配置文件可以保存在本地,可以保存在外部服务器上;许多特性在多虚拟防火墙模式下都被支持,包括routing table、防火墙特性、IPS以及管理,但是也有一些特性不被支持,包括×××、组播以及动态路由协议;

系统配置
        在系统配置下,我们可以创建、删除、修改以及管理虚拟防火墙。比如我们在系统配置下面创建虚拟防火墙,并且指定将哪些接口分配给哪些虚拟防火墙等,只有在系统配置下创建了虚拟防火墙后,我们才可以使用changeto命令到单个虚拟防火墙下对其进行配置,虚拟防火墙的配置和物理防火墙的配置方法一样,只不过不支持动态路由协议、组播以及×××;
系统配置中除了包含有指定的Failover接口外,不包含任何接口;

Admin Context
Admin context 和其他虚拟防火墙一样,只是用户登录到该虚拟防火墙上以后,就拥有了系统管理员的权限,并能够访问系统以及其他虚拟防火墙;虚拟防火墙必须存储在Flash中,不能够存储在外部服务器上;
Admin context必须先于其他的虚拟防火墙进行创建和配置,如果系统已经在多模式或从single模式切换到多模式下的时候,admin context会在Flash中自动创建一个admin.cfg文件。如果不想使用admin.cfg作为admin context,你可以使用admin-context命令改变;
2. 流量分类
将一个物理防火墙划分为多个虚拟的防火墙,那么就要涉及到一个对流量分类的问题,物理防火墙收到一个流量/连接后,要能够区分出该连接是属于哪个虚拟防火墙的;ASA对流量的分类有三中方法:
 将一个接口唯一的划分到一个虚拟防火墙中(基于接口)
如果一个接口唯一的只属于一个虚拟防火墙,那么所有从这个接口进入的流量都应该只属于这一个防火墙。在透明模式下,一个接口唯一属于一个虚拟防火墙是必须的;
 基于MAC地址
多虚拟防火墙中,如果一个接口同时属于多个虚拟防火墙(即共享接口),那么可以使用基于MAC地址来对流量进行分类。这时候就要求在每个虚拟防火墙上,为该共享接口指定一个不同的MAC地址,该MAC地址可以自动产生,也可以手工指定;
 基于NAT
除了基于MAC地址分类以外,还可以基于NAT来对流量进行分类;分类器会截取流量,并执行一个目的地址查找,所有其他域都被忽略,只有目的地址被使用。为了使用目的地址对流量进行分类,那么分类器就必须知道每个虚拟防火墙后面的子网。分类器根据NAT的配置,来决定每个虚拟防火墙后面的子网;分类器将目的地址和static命令或global做匹配;
以下的方法不被用于包的分类:
 NAT免除
 路由表——如果一个虚拟防火墙包含一个到达一个子网(A)的指向外部路由器的静态路由,并且同时包含一个关于子网A的static路由,那么分类器使用static命令来对包进行分类;
以下是包分类的例子:
基于MAC地址进行分类:
 

                                       
 

如图,GE0/0.1为共享接口,被同时分配给多个虚拟防火墙,Context B后面的主机209.165.201.1要访问Internet。数据包在传输过程中,如果不做NAT转换,IP地址是不会改变的,只有MAC地址改变;因此,连接Internet的路由器收到后,显示的IP地址是主机B的209.165.201.1,源MAC地址为Context B的GE0/0.1的接口的MAC地址,并把该对应条目写到ARP表中,当流量返回的时候,目的地址是主机B的地址,然后就会被封装成Context B的GE0/0.1接口的MAC地址;
下图展示了多个虚拟防火墙共享outside接口,并且不使用MAC地址分类,而使用配置的NAT表进行分类,图中分类器会将包转发给Context B,因为Context B包含有目的地址的地址转换连接;
 


 

3 .配置多虚拟防火墙
我们可以按照以下步骤配置多虚拟防火墙:
 全局下改变防火墙的运行模式为多模式;
使用命令:show mode查看当前路由器运行的模式,如果是single模式,那么使用mode multiple命令启用多虚拟防火墙;
 在系统配置下创建虚拟防火墙,并为每个虚拟防火墙指定一个配置URL;
首先配置指定admin context: hostname(config)#admin-context name
然后可以增加创建context:
hosname(config)#context name //eg :hostname(config)#context c1
注意:虚拟防火墙的名字大小写字母敏感;
为虚拟防火墙分配接口:
hostname(config-ctx)#allocate-interface physical_interface [map_name] [visible | invisible]
map_name:为接口关联一个别名,然后在该虚拟防火墙上调用的时候就可以直接调用该名字;注意,别名必须以字母开头,以字母或数字结束;
visible/invisible:该关键字指明在show interface的时候,可以看到物理接口ID,即使你设置了mapped name;缺省的是invisible,即只能够看到mapped name;
eg :hostname(config-ctx)#allocate-interface e0 int0
 为虚拟防火墙指定下载配置的URL连接:
hostname(config-ctx)#config-url url //eg:hostname(config-ctx)#config-url c1.cfg
 验证配置信息:show context
自动为Context共享接口产生MAC地址:
在系统配置下,使用命令:mac-address auto
MAC地址自动产生的规则和格式:
 Active 设备MAC地址:12_slot .port_subid.contextid
 Standby设备MAC地址:02_slot.port_subid.contextid
在系统和虚拟防火墙、虚拟防火墙和虚拟防火墙之间切换:changeto context_name | sys