访问控制作为一种重要的安全手段,在维护网络中至关重要。在本章将主要介绍AAA安全管理框架和简单的防火墙基础。
AAA是网络访问控制的一种安全管理框架,它决定哪些的用户能够访问网络,以及用户能够访问哪些资源或者得到哪些服务。AAA分别是:
其中,Authorization(授权)必须要在Authentication(认证)后才能使用,而Authentication(认证)和Accounting(计费)均可以单独使用。Authentication(认证)和Authorization(授权)用于防止安全问题,而Accounting(计费)用于操作后的记录。
Access Control Server(ACS)/ Security server 是一个用于管理和控制网络访问的关键组件,是运行了AAA框架的网络设备。
ACS可以作为单独的服务器或与其他网络设备集成在一起,如路由器、交换机、防火墙等。
ACS通常使用标准的认证和授权协议,如RADIUS(远程身份验证拨号用户服务)、TACACS+(终端访问控制器访问控制系统)和Kerberos等,与各种网络设备进行通信。
它们都是应用层协议。我们主要介绍一下RADIUS的操作。
它的操作流程如下:
注意:在认证过程中,对于RADIUS服务器而言,网络访问设备才是客户端(client),而不是终端用户。例如下面过程:
我们可以明显看出,只有网络访问设备(AP)才与RADIUS服务器建立RADIUS连接,对于服务器而言它才是客户端。
为了保护网络安全,我们通常采取Authorization(授权)的方法来规定用户所能看到的资源。但实际网络中可能存在很多未授权的访问(Unauthorized Access),该如何防止这些未授权访问带来的风险就是需要使用访问控制(Access Control)。
防火墙(Firewall)是一种网络安全设备,用于监控和控制网络流量,以保护内部网络免受未经授权的访问和恶意攻击。防火墙可以基于不同的技术和工作原理进行分类,其中两种常见的类型是应用程序网关防火墙(Application Gateway Firewall)和数据包过滤防火墙(Packet Filtering Firewall)。
对比起来可以发现,应用程序网关防火墙更安全,但是处理速度慢,而数据包过滤防火墙更简单,处理速度快。
我们一般称应用程序网关防火墙是有状态的防火墙(stateful),因为当有一个新的连接建立时,它会记录相关的连接信息,在接下来的数据包传输过程中,它会检查数据包是否与已经建立的连接状态匹配,并根据连接状态表中的信息决定是否允许数据包通过,我们称为两次连接。
而数据包过滤防火墙是无状态的防火墙(stateless),它在处理每个数据包时,并不会考虑其是否属于已经建立的连接,仅关注于数据包本身,我们称为一次连接。
当然,这两种防火墙的部署位置也有所不同,应用程序网关防火墙一般部署在外部路由器(exterior router)和内部路由器(interior router)之间。外部路由器连接到Internet,内部路由器连接到内部网络,且只接受来自应用网关的数据包。数据包过滤防火墙一般可以部署在两端路由器上。
有了防火墙后,我们可以把整个网络分为三个部分:安全区(Secure zone), 非安全区(Insecure zone)和非军事区(Demilitarized Zone, DMZ).
DMZ是用于对外部网络设备部署的网络,例如DNS,Web,电子邮件服务器等,它们只被允许有限的连接到内部网络,从外部网络到DMZ中的通信受到限制,从而使DMZ比外部网络更安全。DMZ位于外部网络和内部网络之间,它们的关系如图:
在这个架构下,当内部网络向外部网络发送信息时,会先经过内部路由器,再经过DMZ区防火墙过滤,最后传输到外部网络。而相反的,外部网络向内部网络发送信息时,也会先经过位于DMZ区的防火墙,根据防火墙判断允许部分流量进入内部网络。不允许直接由内部网络与外部网络通讯,必须经过防火墙。
在本章中,我们将主要关注数据包过滤防火墙,它一般使用访问控制列表ACL(Access Control List)规则控制数据包的传输。
ACL是由一条或多条规则组成的集合。所谓规则,是指描述报文匹配条件的判断语句,这些条件可以是报文的源地址、目的地址、端口号等。
对于一个路由器而言,ACL是应用于端口上的。如果进入(inbound)/离开(outbound)路由器的端口存在ACL,则需要走ACL规则,否则数据包可以直接进入接口。
ACL包括permit和deny两种动作,ACL中至少应该有一个permit语句,在配置列表的末尾有一个隐式的deny any,表示不符合之前ACL规则的全部deny。
ACL是顺序匹配,如果匹配成功了,后续的条目将直接跳过。
举个例子,现在有一种访问情况同时满足这些条件:{A, B, C},它的ACL表应该是怎么样的呢?
我们不能直接permit A, B, C,因为每条ACL只能有一种条件。但又不能分别permit它们,因为如果匹配成功了,后续的条目将直接跳过。所以我们一般会deny它的补集。例如全集条件有{A, B, C, D, E},那我要同时满足permit的{A, B, C}需要deny D和deny E。
ACL又可以简单分为:基本ACL(Standard ACL)和扩展ACL(Extended ACL)。
每种ACL都有一个ACL编号,不同的编号代表不同的含义,如图:
在ACL中,除了基于源IP地址的过滤,还需要知道源IP的掩码。与通常情况不同的是,ACL中不使用子网掩码,而是使用通配符掩码(Wildcard masks)。通配符掩码与子网掩码大部分相反,有这样的规则:
我们通过一些例子直接理解通配符掩码:
0.0.0.0 = 00000000.00000000.00000000.00000000; 全是0,表示所有的位数都要匹配。
255.255.255.255 = 11111111.11111111.11111111; 全是1,表示所有的位数都不需要匹配,即任意IP即可。
255.255.255.0 = 11111111.11111111.11111111.00000000; 后8位全是0,表示只需要检查后8位时候匹配即可。
0.0.0.3 = 00000000.00000000.00000000.00000011; 前30位全是0,表示前面30位都需要匹配,后面的主机位不需要匹配。
匹配172.16.0.0/16子网中的所有单数主机(尾部为1):即前16位固定(同一子网),最后一位固定(单数),其他位忽略。00000000.00000000.11111111.11111110,0.0.255.254.
我们一般把全部位数都不需要匹配的IP,即任意的IP,用any
表示。而全部位数都需要匹配的IP用host ip
表示。