前言

访问控制作为一种重要的安全手段,在维护网络中至关重要。在本章将主要介绍AAA安全管理框架和简单的防火墙基础。


AAA框架

AAA是网络访问控制的一种安全管理框架,它决定哪些的用户能够访问网络,以及用户能够访问哪些资源或者得到哪些服务。AAA分别是:

  • Authentication(认证):认证是确认用户身份的过程。用户提供凭据(如用户名和密码、数字证书等),网络系统使用这些凭据验证用户的身份,以确保只有合法的用户可以访问网络资源。
  • Authorization(授权):授权确定了认证用户可以访问哪些资源的权限。一旦用户通过认证,系统会根据用户的身份和权限规则,决定其能够访问的特定资源或执行的操作。
  • Accounting(计费):计费用来记录用户使用网络服务过程中的相关操作,简单说就是:什么人、什么时间、做了什么事。

其中,Authorization(授权)必须要在Authentication(认证)后才能使用,而Authentication(认证)和Accounting(计费)均可以单独使用。Authentication(认证)和Authorization(授权)用于防止安全问题,而Accounting(计费)用于操作后的记录。

Access Control Server(ACS)/ Security server 是一个用于管理和控制网络访问的关键组件,是运行了AAA框架的网络设备。

ACS可以作为单独的服务器或与其他网络设备集成在一起,如路由器、交换机、防火墙等。

ACS通常使用标准的认证和授权协议,如RADIUS(远程身份验证拨号用户服务)、TACACS+(终端访问控制器访问控制系统)和Kerberos等,与各种网络设备进行通信。

  1. RADIUS(远程身份验证拨号用户服务):RADIUS是一种用于网络AAA的协议。它最初设计用于拨号接入服务器,但现在也广泛用于其他网络访问控制场景。工作原理是,当用户尝试访问网络资源时,客户端(如路由器、交换机)将用户的身份信息发送到RADIUS服务器进行验证。RADIUS服务器接收认证请求,验证用户身份,然后返回授权信息,允许或拒绝用户的访问请求。RADIUS使用UDP传输数据。
  2. TACACS+(终端访问控制器访问控制系统):TACACS+是另一种用于网络AAA的协议,它提供了比RADIUS更强大的功能。与RADIUS不同,TACACS+将认证和授权过程分开,因此提供了更高的灵活性和安全性。在TACACS+中,认证和授权请求发送到不同的服务器,因此可以单独管理和配置认证和授权策略。TACACS+还提供了更强大的日志记录和审计功能,可以记录更多详细的访问信息。TACACS+使用TCP传输数据。
  3. Kerberos:Kerberos是一种网络身份验证协议,旨在提供强大的安全性和单点登录功能。它基于对称密钥加密,通过票证交换的方式实现用户身份验证。在Kerberos中,用户通过身份认证服务器(AS)获取票证授予票(TGT),然后使用TGT向票证授予服务器(TGS)请求服务票证。一旦用户获得了服务票证,就可以使用它向特定的服务请求访问,而无需重新进行身份验证。Kerberos提供了高度的安全性和方便的单点登录功能,因此在企业环境中得到了广泛应用。Kerberos只支持Authentication(认证),而不支持Authorization(授权)和Accounting(计费)。

它们都是应用层协议。我们主要介绍一下RADIUS的操作。

它的操作流程如下:

  1. 认证请求用户尝试访问网络资源。访问设备收到用户的访问请求,将认证请求发送到预先配置的RADIUS服务器。
  2. 认证过程RADIUS服务器接收到认证请求后,会检查请求中的用户身份信息(通常是用户名和密码)。服务器使用存储在其数据库中的用户凭据进行比对,验证用户的身份。如果用户提供的凭据有效,则RADIUS服务器发送认证成功的响应给访问设备,否则发送认证失败的响应。
  3. 授权过程如果认证成功,RADIUS服务器会根据预先配置的授权策略,确定用户可以访问的资源和操作权限。这些授权信息包括访问允许的网络服务、带宽限制、ACL(访问控制列表)等。RADIUS服务器将这些授权信息封装在响应中发送给访问设备。
  4. 会计功能一旦用户成功认证和授权访问资源,RADIUS服务器可能会记录用户的访问活动,以供后续审计或计费目的使用。这些会计信息可能包括用户的登录时间、注销时间、访问的资源、使用的带宽等。
  5. 响应处理访问设备收到RADIUS服务器的响应后,根据响应中包含的信息决定是否允许用户访问资源。如果认证和授权成功,访问设备会允许用户访问所请求的资源;否则,用户将被拒绝访问。

注意:在认证过程中,对于RADIUS服务器而言,网络访问设备才是客户端(client),而不是终端用户。例如下面过程:

我们可以明显看出,只有网络访问设备(AP)才与RADIUS服务器建立RADIUS连接,对于服务器而言它才是客户端。


访问控制

为了保护网络安全,我们通常采取Authorization(授权)的方法来规定用户所能看到的资源。但实际网络中可能存在很多未授权的访问(Unauthorized Access),该如何防止这些未授权访问带来的风险就是需要使用访问控制(Access Control)。

防火墙(Firewall)是一种网络安全设备,用于监控和控制网络流量,以保护内部网络免受未经授权的访问和恶意攻击。防火墙可以基于不同的技术和工作原理进行分类,其中两种常见的类型是应用程序网关防火墙(Application Gateway Firewall)数据包过滤防火墙(Packet Filtering Firewall)

  • 应用程序网关防火墙(Application Gateway Firewall):应用程序网关防火墙是一种工作在应用层的防火墙。它能够对传输层以上的数据进行深度分析(各层信息),包括对应用层协议(如HTTP、FTP、SMTP等)的理解和检查。应用程序网关防火墙能够识别和阻止一些应用层攻击,如SQL注入、跨站脚本攻击(XSS)等。这种防火墙通常具有高度的可定制性和灵活性,可以根据特定应用程序的安全需求进行配置。
  • 数据包过滤防火墙(Packet Filtering Firewall):数据包过滤防火墙是一种工作在网络层的防火墙。它基于预先配置的规则集对网络数据包进行过滤和处理,根据规则来允许或拒绝数据包的传输。数据包过滤防火墙可以根据源IP地址、目标IP地址、端口号等信息(第二第三层信息)对数据包进行过滤。这种防火墙通常比较简单、高效,并且对网络流量的处理速度比较快,适用于对网络层面的攻击进行防范。

对比起来可以发现,应用程序网关防火墙更安全,但是处理速度慢,而数据包过滤防火墙更简单,处理速度快。

我们一般称应用程序网关防火墙是有状态的防火墙(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)

  1. 基本ACL(Standard ACL):基本ACL是最简单的ACL形式,它基于源IP地址来过滤数据包,且只会允许/拒绝整个数据包
  2. 扩展ACL(Extended ACL):扩展ACL比基本ACL更加灵活,可以根据源IP地址、目标IP地址等多种条件来过滤数据包,且可以允许/拒绝某个特定的协议

每种ACL都有一个ACL编号,不同的编号代表不同的含义,如图:

在ACL中,除了基于源IP地址的过滤,还需要知道源IP的掩码。与通常情况不同的是,ACL中不使用子网掩码,而是使用通配符掩码(Wildcard masks)。通配符掩码与子网掩码大部分相反,有这样的规则:

  • 一共32位,
  • 0表示的位表示需要进行IP匹配,
  • 1表示的位表示不需要进行与IP匹配。

我们通过一些例子直接理解通配符掩码:

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表示。

这里的一切都有始有终,却能容纳所有的不期而遇和久别重逢。
最后更新于 2024-04-12