在这节课中将向你展示如何在FortiGate的防火墙策略上使用身份验证。
在完成这一课程之后,你应该了解防火墙认证的机制,并具备配置防火墙身份验证所需的实际技能。
传统的防火墙通过对源IP地址和设备进行身份验证来授予网络访问权。这是不充分的,并且可能会带来安全风险,因为防火墙不能确定谁在使用准予访问的设备。
FortiGate包括用户和用户组的认证。因此,你可以在多个设备上跟踪个人。
访问由用户或用户组控制,用户必须通过输入有效凭证进行身份验证(如用户名和密码)。一旦加强了对用户的验证,就可以使用防火墙策略和配置文件来允许或拒绝访问特定的网络资源。
【提示】Authentication:验证;
在本节中,我们将研究在FortiGate上可用的防火墙身份验证方法
FortiGate包括三种类型的防火墙认证:
本地密码认证
基于服务器的密码身份验证(也称为远程密码身份验证)
双因子认证。这是一种在现有方法之上启用的身份验证方法,如果不首先配置其他方法之一,就无法启用它。它需要一些你知道的东西,比如密码,以及你拥有的一些东西,比如令牌或证书。
接下来我们将详细介绍防火墙身份验证的每一种方法。
第一个也是最简单的身份验证方法是本地密码身份验证。用户帐户信息(用户名和密码)是在本地存储设备上存储的。这种方法适用单独的FortiGate安装。
本地帐户是通过用户定义页面创建的,在这个页面中向导会带领你完成整个过程。对于本地密码身份验证,选择本地用户作为用户类型,并创建一个用户名和密码。如果需要,还可以向帐户添加电子邮件和SMS信息,启用双因子身份验证,并将用户添加到预配置的用户组中。
创建用户之后,你可以添加用户或任何预先配置的用户组(其中用户是用户组的一个成员)到防火墙策略,以便进行身份验证。我们将在本课的后面讨论用户组和防火墙策略。
基于服务器的密码身份验证,一个远程验证服务器被用于对用户进行身份验证。当多个FortiGate需要对相同的用户或用户组进行身份验证时,或者在已经包含验证服务器的网络中添加FortiGate时,这种方法是可取的。
当你使用远程验证服务器来对用户进行身份验证时,FortiGate会将用户输入的凭证发送到远程验证服务器。远程验证服务器通过指示凭据是否有效来进行响应。如果是有效的,那么FortiGate就会参考它的配置来处理流量。请注意,它是评估用户凭证的远程验证服务器,而不是FortiGate。
使用这种身份验证方法,FortiGate不会在本地存储所有的用户信息。
FortiGate增强了对许多远程验证服务器的支持,包括POP3、RADIUS、LDAP和TACACS+。
POP3是唯一需要电子邮件地址作为登录凭证的服务器。所有其他远程验证服务器都使用用户名。一些POP3服务器需要使用域([email protected])的完整电子邮件,其他的则只需要后缀,还有一些则同时接受这两种格式。这是由服务器本身的配置决定的,而不是在FortiGate上设置的。你只能在CLI中配置POP3身份验证。注意,可以将LDAP配置为使用电子邮件进行验证,而不是使用用户名。
你可以通过两种方式配置FortiGate来使用外部验证服务器:
在FortiGate上创建用户帐号。使用此方法,你必须选择远程身份验证服务器类型(RADIUS、TACACS+、LDAP),指向预配置的远程验证服务器,并将用户添加到适当的组中。记住,POP3只能通过CLI进行配置。
将远程验证服务器添加到用户组。使用此方法,你必须创建一个用户组,并将预配置的远程服务器添加到组中。因此,任何在远程验证服务器上拥有帐户的用户都可以进行身份验证。如果使用LDAP服务器作为远程验证服务器,则可以控制对LDAP服务器上定义的特定LDAP组的访问。
与本地密码身份验证类似,你必须将预配置的用户组(其中用户是成员)添加到防火墙策略中,以便进行身份验证。我们将在本课的后面讨论用户组和防火墙策略。
你可以使用的最后的防火墙身份验证方法是双因子认证。
传统的用户身份验证需要用户名加上一些你知道的东西,比如密码。这种传统的身份验证方法的缺点是,如果某人获得了用户名,他们只需要你的密码来破坏你的帐户。此外,由于人们倾向于在多个帐户中使用相同的密码(有些站点的安全性漏洞比其他站点要多),因此无论密码强度如何,帐户都很容易受到攻击。
另一方面,双因子认证需要一些你知道的东西,比如密码,以及你拥有的一些东西,比如令牌或证书。这增加了攻击者的复杂性,因为它降低了通常易受攻击的密码的重要性。
你可以在用户和管理员帐户上使用双因子认证。然后再将用户(或用户所属的用户组)添加到防火墙策略中以进行身份验证。
需要注意的是你不能使用带有显式代理的双因子认证。
你可以使用一次性密码(OTPs)作为你的第二个因子。OTPs比静态密码更安全,因为密码在一定的时间间隔内不断变化,而且只在很短的时间内有效。一旦你使用了一个OTP密码,这个密码就不能再被使用了,所以即使它被拦截了也是没有用的。
FortiGate可以通过令牌来交付OTPs,比如FortiToken 200(硬件令牌)和FortiToken Mobile(软件令牌),以及通过电子邮件或短信。如果发送电子邮件或SMS,用户帐户必须包含该用户联系信息。
FortiToken和OTPs是基于时间来发送电子邮件和短信。例如,该FortiToken每60秒生成一个新的6位数字密码(默认情况下)。强烈推荐NTP服务器,以确保OTPs保持同步。
令牌使用特定的算法来生成一次性密码。该算法包括:
种子:它是一种独特的随机生成的数字,它不会随着时间的变化而变化。
时间:是从一个内部的、准确的时钟中获得的。
种子和时间都通过一个算法,该算法在令牌上生成一次性密码(或密钥)。密码有一个很短的生命周期,通常以秒为单位(FortiToken 200是60秒,对于其他RSA密钥生成器来说可能更多或更少)。一旦生命周期结束,新的密码就会生成。
使用令牌进行双因子认证时,用户必须首先登录一个静态密码,然后是令牌生成的密码。验证服务器(FortiGate)接收用户的凭证,并首先验证静态密码。然后,验证服务器将继续验证密码。它通过使用种子和系统时间(与令牌上的一个同步)重新生成相同的密码,并将其与从用户接收到的代码进行比较。如果静态密码有效,并且一次性密码匹配,那么用户就成功地进行了身份验证。
你可以在FortiToken页面上添加一个FortiToken 200或FortiToken Mobile到FortiGate。
对于硬令牌,一个序列号用于提供关于初始种子值的详细信息。如果要添加多个硬令牌,可以导入一个文本文件,其中每行列出一个序列号。
对于软令牌,需要激活代码。请注意,每一个FortiGate(和FortiGate VM)提供两个免费的FortiToken Mobile激活。任何额外的令牌都必须从Fortinet购买。
你不能在超过一个的FortiGate上注册FortiToken。如果你想在多个FortiGate上使用相同的FortiToken,那么你必须使用一台中央验证服务器,比如FortiAuthenticator。在这种情况下,在FortiAuthenticator上注册了FortiToken,而FortiGate则使用FortiAuthenticator作为它的验证服务器。
一旦你已经注册了带有FortiToken的FortiGate,你就可以将它们分配给用户作为他们的第二个因子身份验证方法。要分配一个令牌,编辑(或创建)用户帐户,并选择启用双因子认证。从下拉列表中,选择要分配的注册令牌。
你也可以用X.509数字证书作为你的第二个因子,尽管FortiGate也接受证书作为一种独立的身份验证方法。使用数字证书进行身份验证的用户称为PKI(公共密钥基础设施)用户。
要使用证书,你必须首先导入证书颁发机构(CA)证书,该证书将颁发给你的用户证书。用户还必须在他们的计算机上的个人证书存储中安装他们的个人证书(如果使用Firefox浏览器,用户必须在Firefox证书存储库中安装他们的用户证书)。然后你可以将PKI用户帐户添加到FortiGate。
你必须使用〖config user peer〗命令在CLI中添加你的第一个PKI用户(随后的用户可以通过GUI中的PKI页面添加)。然后你可以在防火墙用户组中包含PKI用户,并将该组作为防火墙策略的源。
基于证书的身份验证在后面的课程中会更详细地介绍。
我们讨论了本地密码认证、基于服务器的身份验证和双因子认证等所有身份验证方法。主动身份验证意味着,在被授予访问权限之前,用户会被提示手动输入登录凭证。
但并不是所有用户都使用相同的方式进行身份验证。一些用户可以透明地获得访问权限,因为用户信息是在不要求用户输入他们的登录凭证的情况下确定的。这就是所谓的被动认证。使用基于服务器的密码身份验证的单点登录方法:FSSO、RSSO和NTLM。这些会在后面课程中讨论。
本节讨论如何配置FortiGate,以指向现有的LDAP或RADIUS服务器,用于基于服务器的口令身份验证。
轻量级目录访问协议(LDAP)是用于访问和维护分布式目录信息服务的应用程序协议。
LDAP协议用于维护可能包括部门、人员、人员组、密码、电子邮件地址和打印机的身份验证数据。LDAP由一个数据表示方案、一组已定义的操作和一个请求和响应网络组成。
在LDAP协议中,有许多客户可以请求的操作,例如搜索、比较和添加/删除一个条目。绑定是LDAP服务器对用户进行身份验证的操作。如果用户成功地进行了身份验证,绑定允许用户根据该用户的权限访问LDAP服务器。
LDAP目录树的根表示组织本身,并定义为域组件(DC)。DC通常是一个DNS域,例如example.com(因为这个名称包含一个点,它被写成两个由逗号分隔的部分:DC=example,DC=com)。可以根据需要将附加的条目添加到层次结构中。对象通常有两种类型:容器和叶。
容器是可以包含其他对象的对象,类似于文件系统中的文件夹。内容示例包括:
国家(表示为c)
组织单元(表示为ou)
组织(表示为o)
叶是一个分支末端的对象,没有从属对象。叶示例包括:
用户ID(表示为uid)
公共名称(表示为cn)
这是一个简单的LDAP层次结构的示例。
必须配置用于请求身份验证的FortiGate设备(充当LDAP客户端)以处理其请求,以满足用户记录存在的层次结构的正确部分,这被称为Distinguished Name(专有名称dn)
。在本例中,dn是ou=people,dc=example,dc=com。
身份验证请求还必须指定特定的用户帐户条目。这可以是公共名称(cn),也可以是在计算机网络中,用户ID(uid),因为这是用户用来登录的信息。注意,如果对象名称包含空格,如John Smith,则必须用双引号括起文本。例如:cn="John Smith"。
你可以通过LDAP服务器页面配置FortiGate以指向LDAP服务器,用于基于服务器的口令身份验证。该配置严重依赖于服务器的模式和安全设置。Windows Active Directory非常常见。
公共名称标识符是用于查找用户名的属性名称。一些模式将调用这个uid。Active Directory将其称为sAMAccountName或有时是cn。
专有名称标识树的顶部,这通常是dc值。你必须使用正确的X.500或LDAP格式。
绑定类型取决于LDAP服务器的安全设置。如果跨多个域进行搜索,并且需要授权执行LDAP查询的用户的凭证(例如,LDAP管理员),则需要定期绑定。
如果你想要在FortiGate和远程LDAP服务器之间建立安全连接,可以启用安全连接,包括LDAP服务器协议(LDAPS或STARTTLS)以及验证服务器证书的CA证书。
请注意,测试按钮只测试连接到LDAP服务器的连接是否成功。要测试用户的凭证是否能够成功地进行身份验证,你必须使用CLI。
在CLI中使用〖diagnose test authserver〗命令来测试用户的凭证是否能够成功地进行身份验证。你要确保在你的防火墙策略中实现它之前,身份验证是成功的。
来自服务器的响应报告显示成功、失败和组成员关系细节。
RADIUS与LDAP有很大的不同,因为没有目录树结构可以考虑。RADIUS是一个提供身份验证、授权和会计(AAA)服务的标准协议。
当用户进行身份验证时,客户端(FortiGate)向RADIUS服务器发送一个访问请求包。服务器的回复将是以下内容之一:
访问同意,这意味着用户凭证是可以的
访问拒绝,这意味着凭证是错误的
访问怀疑,这意味着服务器正在请求第二个密码ID、令牌或证书。这通常是服务器在使用双重身份验证时的应答
并不是所有的RADIUS客户都支持RADIUS的挑战方法。
你可以通过RADIUS服务器页面配置FortiGate以指向一个RADIUS服务器,用于基于服务器的口令身份验证。
主服务器的IP/名称是RADIUS服务器的IP地址或FQDN。
主服务器的秘钥是在RADIUS服务器上设置的秘钥,以便允许远程查询。备份服务器(有单独的秘钥)可以在主服务器失败时定义。
身份验证方法是指RADIUS服务器支持的身份验证协议。选项包括:chap、pap(默认)、mschap和mschap2。
与LDAP配置类似,测试连接按钮只测试连接到RADIUS服务器的连接是否成功。要测试用户的凭证是否能够成功地进行身份验证,你必须使用CLI。
请注意,Fortinet有一个特定于供应商的属性(VSA)字典,以确定Fortinet专利的RADIUS属性。这将允许你扩展RADIUS的基本功能。你可以从Fortinet知识库(kb.fortinet.com)获得Fortinet VSA字典。
测试RADIUS与LDAP基本相同。在CLI中使用〖diagnose test authserver〗命令来测试用户的凭证是否能够成功地进行身份验证。同样你也应该这样做,以确保在你的防火墙策略中实现身份验证之前是成功的。
与LDAP一样,它根据服务器的响应报告成功、失败和组成员关系细节。深入的故障排除需要服务器访问。
本节将讨论如何将用户分配给用户组,这样你就可以配置防火墙策略来对用户组执行操作。
FortiGate允许管理员将用户分配给组。一般来说,群体是被用来更有效地管理有某种共同关系的个体。你可能想要在商业领域,比如财务或人力资源部门,或者员工类型,比如承包商或客户,来组织员工。
一旦创建了用户组,就可以将其添加到防火墙策略中。这允许你控制对网络资源的访问,因为在整个组中,策略决策是由策略决定的。你可以在FortiGate设备上定义本地和远程用户组。有四种用户组类型:
防火墙
来宾
Fortinet单点登录
RADIUS单点登录
防火墙用户组不需要匹配任何可能已经存在于服务器上的组。防火墙用户组仅仅是为了使防火墙策略的配置更加容易。
大多数身份验证类型都可以根据个人用户而不是用户组来进行决策。
来宾用户组不同于防火墙用户组,他们只包含临时来宾帐户(完整的帐户,而不只是密码),并且在无线网络中最常用。客户账户在预定的时间后过期。
管理员可以使用随机生成的用户ID和密码手动创建来宾帐户或创建多个来宾帐户。这减少了大型事件的管理员工作量。创建后,你可以将帐户添加到来宾用户组,并将该组关联到防火墙策略。
你可以创建只访问创建和管理来宾帐户的来宾管理管理员。
你可以通过用户组页面配置用户组。你必须指定用户组类型并将用户添加到组中。根据你创建的组,需要不同的配置。例如,对于防火墙用户组,成员可以由本地用户、PKI对等用户和来自一个或多个远程身份验证服务器的用户组成。如果远程身份验证服务器是LDAP服务器,则可以选择特定的LDAP组,将其添加到LDAP服务器上定义的用户组中。注意,你还可以选择RADIUS组,但这需要在你的RADIUS服务器和FortiGate上进行额外的配置。
如果你想以同样的方式对待特定的用户,用户组可以简化你的配置。例如,如果你想为整个培训部门提供访问相同网络资源的机会。如果你希望以不同的方式对待所有用户,则需要将所有用户单独添加到防火墙策略中。
本节将讨论如何使用防火墙策略进行身份验证。
防火墙策略包括访问和检查规则(区分指令集),这些规则告诉FortiGate如何处理他们所过滤的接口流量。在用户进行初始连接尝试之后,FortiGate将检查防火墙策略,以决定是否接受或拒绝通信会话。但是,防火墙策略也包括许多其他的指令,例如那些处理身份验证的指令。出于这个目的,你可以使用防火墙策略的源。防火墙策略的源必须包括源地址(IP地址),但是你也可以包括用户、用户组和设备类型。通过这种方式,在防火墙策略的源定义中包含的任何用户、用户组或设备都可以成功地进行身份验证。
用户和用户组可以由本地防火墙帐户、外部服务器帐户、PKI用户和FSSO用户组成。
防火墙策略也会检查服务,以传输指定的协议或协议组。在用户身份验证成功之前,没有服务可以通过防火墙策略(除了DNS)。DNS通常是由HTTP使用的,这样人们就可以使用域名而不是IP地址。DNS是允许的,因为它是一个基本协议,并且很可能需要首先看到适当的身份验证协议流量。主机名解析几乎总是对任何协议的要求。但是,DNS服务仍然必须定义为允许通过。
在下面的示例中,策略序列1(Full_Access)允许用户使用外部DNS服务器来解析主机名,在成功的身份验证之前。如果身份验证不成功,也可以使用DNS,因为用户需要能够再次验证身份验证。任何包含DNS的服务都将以相同的方式运行,就像默认的所有服务一样。
HTTP服务是TCP端口80,不包括DNS(UDP端口53)。
除了DNS服务器之外,防火墙策略必须指定允许的协议,例如HTTP、HTTPS、FTP和Telnet。如果启用了身份验证的防火墙策略不允许至少有一种支持的协议获得用户凭证,那么用户将无法进行身份验证。
所有使用活动身份验证的身份验证方法(本地密码身份验证、基于服务器的密码身份验证和双因子认证)都需要协议。主动身份验证提示用户基于:
流量协议
防火墙策略
另一方面,被动身份验证决定了幕后的用户身份,不需要在策略中允许任何特定的服务。
在本例中,假设使用了主动身份验证,来自LOCAL_SUBNET的任何初始流量都不匹配策略序列1(fullaccess)。策略序列1查找IP和用户组信息(分别是LOCAL_SUBNET和HR-group),并且由于用户尚未进行身份验证,所以流量的用户组方面不匹配。由于策略匹配还未完成,所以FortiGate并不应用这条防火墙策略。
接下来,FortiGate对策略序列2进行评估,查看流量是否匹配。它匹配所有的标准,所以不需要进行身份验证。
当仅使用主动身份验证时,如果所有可能匹配源IP的策略都启用了身份验证,那么用户将收到一个登录提示(假设他们使用的是可接受的登录协议)。换句话说,如果策略序列2也启用了身份验证,用户将收到登录提示。
如果使用被动身份验证,并且它可以成功地获得用户详细信息,那么与属于HR-group的用户的LOCAL_SUBNET子网的流量将应用于策略序列1,即使策略序列2没有启用身份验证。
如果你正在使用主动和被动身份验证,并且用户的凭证可以通过被动方式来确定,那么无论防火墙策略的顺序如何,用户都不会收到登录提示。这是因为当用户可以被动地确定用户是谁时,就不需要使用FortiGate来提示用户登录凭证。当主动和被动身份验证方法组合在一起时,主动身份验证仅在被动身份验证失败时被用作备份。
在本节中,我们将通过一个捕获的门户检查身份验证。
如果你希望所有连接到网络的用户都被提示输入他们的登录凭证(活动身份验证),那么你可以启用强制门户。捕获门户是一种方便的方式,通过一个HTML表单来对有线或WiFi网络上的Web用户进行身份验证,该表单要求用户名和密码。
你可以在FortiGate或外部身份验证服务器上托管一个强制门户。
对于有线和WiFi网络来说,强制门户是在接口层启用的,无论允许它的防火墙策略或它最终离开的端口(在策略上启用或禁用的身份验证都不是一个因素)。这对于任何网络接口都是适用的,包括WiFi和VLAN接口。在本地网络中,必须在传入的端口上启用强制门户设置。
你可以从接口页面配置强制门户。选择所需的接口,并在允许控制下,选择强制门户作为安全模式。请注意,如果为一个WiFi网络配置了强制门户,那么WiFi SSID必须首先存在。
强制门户不与DHCP模式中的接口兼容。
在许可控制下,你还可以选择限制强制门户用户访问。选择限制组控制对强制门户配置的访问。在防火墙策略配置中选择允许所有人控制访问。
你还可以配置防火墙策略,以抑制特定设备的强制门户。这对于无法进行身份验证的设备很有用,比如打印机和传真机,但是仍然需要防火墙策略的允许。当被抑制时,与源和目的地相匹配的流量不会出现在强制门户登录页面中。
有两种方法可以绕开强制门户:
通过GUI,你可以通过GUI在您所启用的门户(网络-接口)的相同位置启用强制门户的豁免权。
通过CLI。你可以通过security-exempt-list设置启用强制门户的豁免权。对于每个防火墙策略,也必须启用这个captive-portal-exempt设置,并且只适用于与该策略相匹配的流量。
通过CLI命令配置防火墙策略,你可以在需要的情况下启用服务声明的条款与强制门户身份验证相结合。免责声明是用户和主机组织在继续进行之前必须同意的法律责任的声明。使用此配置(免责声明+身份验证),门户在成功认证后立即呈现声明页面。用户必须接受免责声明中列出的条款,以便处理所请求的URL。
安全豁免清单或防火墙的强制门户豁免权都不能绕过免责声明。
FortiGate允许你自定义门户消息,其中包括登录页面和声明页面。你可以自替换消息页面自定义消息。
免责声明页面位于HTML中,因此你必须具备HTML的知识以便自定义消息。默认布局是一个简单的视图,它隐藏了大多数替换消息。使用扩展视图来显示所有可编辑的替换消息。
由于安全原因,身份验证超时非常有用,因为它最小化了使用合法身份验证用户的IP的风险。它还确保用户不进行身份验证,然后无限期地留在内存中。如果用户永远停留在内存中,最终会导致内存耗尽。
超时行为有三种选择:
空闲:查看主机IP上的数据包。如果在配置的时间框架内没有由主机设备生成的包,那么用户就会被注销。
艰难:时间是绝对的价值。不管用户的行为如何,当用户进行身份验证并在配置值之后过期时,计时器就会启动。
新会话:即使在现有的通信通道上产生了流量,如果没有在配置的超时值中通过防火墙创建新的会话,那么身份验证就会失效。
选择最适合你环境中的身份验证需求的超时类型。
在最后一节中,我们将研究如何监视经过身份验证的用户。
你可以通过防火墙用户监视页面监视通过防火墙策略进行身份验证的用户。它显示用户、用户组、持续时间、IP地址、流量和身份验证方法。
它不包括管理员,因为他们不通过允许流量的防火墙策略进行身份验证,他们直接进入了FortiGate。
该页面还允许你同时对一个用户或多个用户进行身份验证。
你可以从失败的身份验证页面监视失败的防火墙验证。双击任何条目,就会出现一个下钻视图。这将显示关于该用户身份验证尝试的更详细信息,包括每次登录尝试的日期和时间、解释每个身份验证失败的原因(例如,一个不匹配的密码)和源IP地址的消息。
这一页在决定你的FortiGate是否受到蛮力攻击时很有用。如果你看到来自同一个IP的多次失败的登录尝试,你可以(例如)添加一个本地策略来阻止该IP。
回顾一下我们学习过的内容:
防火墙认证
防火墙身份验证方法
远程身份验证服务器
本地密码身份验证、基于服务器的密码身份验证和双因子身份验证(令牌、证书)的用户配置
主动和被动认证
远程身份验证服务器配置(LDAP和RADIUS)
用户认证
强制门户和声明的配置
防火墙用户监控
飞塔技术 - 老梅子 QQ:57389522