pfSense book之用户管理和认证

  • 用户管理
  • 认证服务器
  • 外部认证示例
  • 故障排查

pfSense中的用户管理器提供了创建和管理多个用户帐户的功能。这些帐户可用于访问GUI,使用VPN服务(如OpenVPN和IPsec),并使用Captive门户。

用户管理器也可以用来定义外部认证来源,例如RADIUS和LDAP。

支持整个pfSense

在撰写本文时,并非pfSense的所有领域都会回到用户管理器中。

  • pfSense GUI:  支持用户管理器中的用户,通过RADIUS或LDAP。来自RADIUS或LDAP的组或用户需要本地用户管理器中的定义来管理其访问权限。
  • OpenVPN:  通过用户管理器支持用户管理器、RADIUS或LDAP中的用户。
  • IPsec:  通过用户管理器为Xauth支持用户管理器、RADIUS或LDAP中的用户,以及通过EAP-RADIUS为IKEv2提供RADIUS。
  • Captive Portal:  支持用户管理器中的本地用户,以及通过Captive Portal页面中的设置支持RADIUS用户。
  • L2TP:  在L2TP设置中支持用户,并在L2TP设置中通过RADIUS支持。
  • PPPoE 服务:  在PPPoE设置中支持用户,并在PPPoE设置中通过RADIUS支持。

用户管理

在系统>用户管理这里可以管理用户,组,服务器,并且可以进行用户管理的设置。

权限

管理用户和组权限类似,无论是管理用户还是组,都必须首先创建和保存条目,然后才能将权限添加到帐户或组中。 要添加权限,在编辑现有用户或组时,单击  添加分配的权限或有效权限部分。

列出所有可用权限。 通过选择单个条目或通过使用Ctrl单击进行多选,可一次添加一个特权。 如果其他权限已经存在于用户或组中,则它们从该列表中隐藏,因此它们不能被添加两次。 要按名称搜索特定的权限,在“过滤器”框中输入搜索词并单击“过滤器”。

选择的权限将在权限列表和操作按钮下的信息区域中显示其用途的简短说明。大多数权限通过他们的名称就可以看的出来,一些明显的权限包括:

  • WebCfg – All Pages: 让用户访问GUI中的所有页面
  • WebCfg – Dashboard (all): 让用户访问仪表板页面及其所有相关函数(小部件,图形等)
  • WebCfg – System: 用户密码管理器页面,如果用户只能访问此页面,他们可以登录到GUI来设置自己的密码。
  • User – VPN – IPsec xauth Dialin: 允许用户连接并验证IPsec xauth
  • User – Config – Deny Config Write: 不允许用户更改防火墙config(config.xml)配置。但这并不妨碍用户采取其他不涉及写入配置的操作。
  • User – System – Shell account access: 使用户能够通过ssh登录,但用户不具有root级别访问权限,因此功能受到限制。 sudo插件可用于增强此功能。

登录后,防火墙将尝试显示仪表面板。 如果用户无权访问仪表面板,则会将其转发到他们有权访问的权限列表中的第一页。

防火墙上的菜单只包含用户帐户上存在特权的条目。 例如,如果用户有权访问的唯一页面是系统诊断> Ping,则“系统诊断”菜单中不会显示其他的任何项目。

添加/编辑用户

系统>用户管理下的用户选项卡是管理个人用户的地方。要添加新用户, 单击 添加一个,要编辑已有用户,单击

在将权限添加到用户之前,必须首先创建权限,因此第一步总是添加用户并保存。如果多个用户需要相同的权限,则添加一个组然后将用户添加到该组中会更容易。

添加用户,单击  添加并出现新的用户页面:

  • 禁用: 该复选框控制此用户是否处于活动状态。如果此帐户应被停用,请选中此框。
  • 用户名: 设置用户的登录名。该字段是必填字段,必须不超过16个字符,并且可能只包含字母,数字和句点,连字符或下划线。
  • 密码: 确认也是必需的。密码以散列形式存储在pfSense配置中。确保两个字段匹配以确认密码。
  • 全名: 可选字段,可用于输入用户帐户的更长名称或说明。
  • 截止日期: 如果需要,还可以定义当到达该日期时自动停用用户。日期必须以MM / DD / YYYY格式输入。
  • 组成员: 如果组已被定义,则可以使用此控件将用户添加为成员。要将此用户添加到一个组,请在“”非成员“”列中找到它,选择它,单击  将其移动到”成员“列。要从组中删除用户,单击 将其从“”成员“移动到“非成员”列。
  • 有效特权: 编辑现有用户时出现,而不是在添加用户时出现。 有关管理权限的信息,请参阅权限。 如果用户是组的一部分,则组的权限将显示在该列表中,但这些权限不能编辑,但可以添加其他权限。
  • 证书: 此部分的行为根据是否添加或编辑用户而改变。 添加用户时,创建证书检查单击以创建用户证书以显示表单以创建证书。 填写描述性名称,选择证书颁发机构,选择密钥长度,然后输入生命周期。 有关这些参数的更多信息,请参阅创建内部证书。 如果编辑用户,则页面的这一部分会变成用户证书列表。 从这里,单击 fa-plus 向用户添加证书。 该页面上的设置与创建内部证书相同,除了更多的数据预先填入了用户名。 如果证书已经存在,请选择选择一个现有证书,然后从列表中选择一个现有证书。
  • 授权密钥: 可以为shell或其他SSH访问输入SSH公用密钥。要添加密钥,请粘贴或输入密钥数据。
  • IPsec预共享密钥: 用于非xauth预共享密钥移动IPsec设置。 如果在此输入IPsec预共享密钥,则使用用户名作为标识符。 PSK也显示在***> IPsec的预共享密钥选项卡上。 如果移动IPsec只能与xauth一起使用,则该字段可能会留空。

保存用户后, 在用户的行上单击  可以编辑条目。

添加/编辑组

组是管理许多权限的好方法,方便用户不必在每个用户帐户上单独进行设置。 例如,一个组可以用于IPsec xauth用户,也可以用于可以访问防火墙的仪表面板,组可以划分用户不同场景的应用权限。

要使用组功能,必须首先创建一个组,然后才能添加权限。 保存该组后,编辑该组来添加权限。

系统>用户管理选项卡上对组进行管理。要添加新组,单击进行添加。要编辑一个已有的组,请在列表的右侧单击  。

注意:在使用LDAP和RADIUS时,本地组必须与服务器上的组相匹配。 例如,如果存在名为“firewall_admins”的LDAP组,则pfSense也必须包含一个名称相同的组,“firewall_admins”,并具有所需的权限。 必须为远程作用域配置具有长名称或名称包含空格或其他特殊字符的远程组。

单击添加一个组,此页面包含以下内容:

  • 组名:此设置与用户名具有相同的限制:它必须不超过16个字符,并且可能只包含字母,数字和句点,连字符或下划线。 例如,在使用来自LDAP的组时,这可能会受到一定的限制,但通常在认证服务器上创建或重命名相应命名的组更容易,而不是试图使防火墙组匹配。
  • 范围:可以在防火墙设置本地组(例如在shell中使用的组),也可以为远程组设置组名限制,并防止组名暴露给基本操作系统。 例如,远程作用域组名称可以更长,并且可以包含空格。
  • 描述:可选的自由格式文本,以便在组名不充分时更好地确定组的用途。
  • 组成员:防火墙用户默认情况下在“非成员”列中,要将此用户添加到一个组,请在“非成员”列中找到它,选择它,单击 将其移动到“成员”列。要从组中删除用户,单击将其从“成员“移动到“非成员”列。
  • 分配权限:仅在编辑现有组时出现。本部分允许为该组添加权限。

设置

用户管理中的“设置”选项卡控制两件事情:登录会话有效多久,以及认真服务器的选项。

会话超时:该字段指定GUI登录会话在空闲时将持续多久。 以分钟为单位,默认为四小时(240分钟)。 可以输入值0以禁用会话过期,从而使登录会话永久有效。 缩短超时时间会更好,但要使其长度足够长,以便在进行更改时不会无意中注销。

注意:允许会话在长时间空闲时保持有效是不安全的。如果管理员离开浏览器窗口而无人看管,则某人或其他人可以利用该打开的会话进行操作。

认证服务器:该选择器为登录GUI的用户选择主要认证源。 这可以是RADIUS或LDAP服务器,也可以是默认的本地数据库。 如果由于某种原因无法访问RADIUS或LDAP服务器,则即使选择了其他方法,身份验证也会回退到本地数据库。

在使用RADIUS或LDAP服务器时,仍然必须在防火墙中定义用户和/或组成员资格才能正确分配权限,因为还没有从认证服务器动态获取权限的方法。

要使群组成员正常工作,pfSense必须能够识别认证服务器提供的群组。 这需要两件事情:

  • 本地组必须以相同的名称存在。
  • pfSense必须能够定位或接收来自认证服务器的组列表。

认证服务器

使用系统>用户管理下的认证服务器选项卡,可以将RADIUS和LDAP服务器定义为认证源。要从此页面添加服务器,单击 添加。要编辑一个已有的服务器,请单击  。

RADIUS

要添加一个 RADIUS服务器:

  • 在继续之前,请确保RADIUS服务器将防火墙定义为客户端。
  • 导航到系统>用户管理,认证服务器选项卡。
  • 单击 添加。
  • 类型设置为RADIUS。会显示RADIUS服务器设置。
  • 填写如下所示的字段:
  • 描述名称:此RADIUS服务器的名称。该名称将用于在整个pfSense GUI中标识服务器。
  • 主机名或IP地址:RADIUS服务器的地址。这可以是完全限定的域名或IPv4 IP地址。
  • 共享密钥: 在RADIUS服务器软件上为此防火墙建立的密码。
  • 提供的服务:这个选择器设置这个RADIUS服务器提供的服务。 认证和计费,仅认证或仅计费。 认证将使用此RADIUS服务器来认证用户。 如果在使用该区域的地区支持,会计将为登录会话发送RADIUS启动/停止计费分组数据。
  • 认证端口:只有在选择了认证模式时才会出现。设置将进行RADIUS身份验证的UDP端口。默认的RADIUS身份验证端口是1812。
  • 计费端口:只有在选择计费模式时才会出现。设置发生RADIUS计费的UDP端口。默认的RADIUS计费端口是1813。
  • 认证超时:控制RADIUS服务器响应验证请求可能花费多长时间(以秒为单位)。 如果留空,则默认值为5秒。 如果正在使用交互式双因素身份验证系统,请增加此超时时间以说明用户接收和输入令牌的时间,如果必须等待外部操作(例如,等待60-120秒或更长时间)     作为电话,短信等
  • 点击保存创建服务器。
  • 访问系统诊断>认证测试,使用有效帐户测试RADIUS服务器。

对于RADIUS组,RADIUS服务器必须以类字符串的形式返回 Class RADIUS应答属性中的组列表。 多个组必须用分号分隔。

例如,在FreeRADIUS中,要返回“admins”和“VPNUsers”组,将使用以下应答RADIUS属性:

Class := "admins;VPNUsers"

如果RADIUS服务器能正确地为用户返回组列表,并且这些组存储在本地,则在通过系统诊断>认证测试页面测试帐户时,这些组将显示在结果中。 如果组未显示,请确保它们存在于名称匹配的pfSense上,并且服务器将Class属性作为字符串返回,而不是二进制。

LDAP

要添加新的LDAP服务器:

确保防火墙可以访问LDAP服务器。

如果使用SSL,请在继续之前将LDAP服务器使用的证书颁发机构导入pfSense。

  • 导航到系统>用户管理,认证服务器选项卡。
  • 单击添加。
  • 将类型选择器设置为LDAP。 会显示LDAP服务器设置。
  • 填写如下所示的字段:
  • 主机名或IP地址:LDAP服务器的地址。 这可以是完全合格域名,IPv4 IP地址或IPv6 IP地址。注意:如果使用SSL,则必须在此处指定主机名,并且主机名必须与由LDAP服务器呈现的服务器证书的通用名相匹配,并且该主机名必须解析为LDAP服务器的IP地址,例如, CN = ldap.example.com,ldap.example.com是192.168.1.5。 唯一的例外是如果服务器的IP地址恰好 是其服务器证书的CN。在某些情况下,可以通过创建DNS转发器主机覆盖来解决此问题,以使服务器证书CN能够解析为正确的IP地址(如果它们在此网络基础架构中不匹配并且无法轻松修复)。
  • 端口值: 此设置指定LDAP服务器正在侦听LDAP查询的端口。默认TCP端口为389,SSL为636。该字段将根据所选传输自动更新为正确的默认值。注意:使用端口636进行SSL时,pfSense使用ldaps:// URL,但不支持STARTTLS。确保LDAP服务器正在使用正确的模式侦听正确的端口。
  • 传输: 此设置控制将使用哪种传输方法与LDAP服务器进行通信。 第一个和默认的选择是TCP – 标准,它使用端口389上的普通TCP连接。如果LDAP服务器支持它,则选择SSL – 在端口636上进行加密。SSL选项将加密对LDAP进行的查询 该服务器在LDAP服务器不在本地网段上时尤为重要。注意:建议尽可能使用SSL,尽管简单的TCP更易于设置和诊断,因为数据包捕获将显示查询和响应的内容
  • 对等认证机构:如果为传输选择了SSL加密,则此选择器的值用于验证LDAP服务器的证书。 选定的CA必须与LDAP服务器上配置的CA匹配,否则会出现问题。
  • 协议版本: 选择LDAP服务器采用哪种LDAP协议版本(2或3),通常为3。
  • 搜索范围: 确定搜索的位置和深度。
  • 层级: 选择“一个级别”还是“整个子树”以控制搜索的深度。当决策不确定时,整个子树是最佳选择,并且Active Directory配置几乎总是必需的。
  • Base DN: 控制搜索的开始位置。通常设置为LDAP结构的“Root”,例如:DC=example,DC=com
  • 认证容器: 潜在帐户位置或容器的分号分隔列表。 这些容器将预先添加到上面的搜索基本DN中,或者在此处指定完整的容器路径并将基本DN留空。 如果LDAP服务器支持,并且绑定设置正确,请单击选择按钮,浏览LDAP服务器容器并进行选择。 这些容器如:1、CN=Users;DC=example;DC=com  这将在域组件example.com中搜索用户,这是查看Active Directory的常用语法。2、CN=Users,DC=example,DC=com;OU=OtherUsers,DC=example,DC=com  这将在两个不同的地点进行搜索,其中第二个仅限于OtherUsers组织单位。
  • 扩展查询: 在用户名后面指定一个额外的限制条件,允许将组成员资格用作过滤器。要设置扩展查询,请选中该框并使用过滤器填写该值,例如:memberOf=CN=***Users,CN=Users,DC=example,DC=com
  • 绑定凭证: 控制此LDAP客户端将如何尝试绑定到服务器。 默认情况下,使用匿名绑定来解析专有名称框将被选中以执行匿名绑定。 如果服务器需要身份验证来绑定和执行查询,请取消选中这个复选框,然后指定用于绑定的用户DN和密码。注意:Active Directory通常需要使用绑定凭据,并且可能需要一个服务帐户或与管理员等效的服务器配置。 请参阅Windows文档以确定在特定环境中哪些是必需的。
  • 初始模板:使用给定类型的LDAP服务器的公共默认值预先填充页面上的其余选项。选择包括OpenLDAP,Microsoft AD和Novell eDirectory。
  • 用户命名属性: 用于标识用户名称的属性,通常是cn或samAccountName。
  • 组命名属性: 用于标识组的属性,如cn。
  • 组成员属性: 表示它的用户属性是组的成员,如member,memberUid,memberOf或uniqueMember。
  • RFC2307组: 指定组织成员资格在LDAP服务器上的组织方式。 未选中时,将使用Active Directory样式组成员资格将组作为用户对象的属性列出。 选中时,将使用RFC 2307样式组成员关系作为组对象成员列出的用户。注意:当使用这种方法时,组成员属性也可能需要修改,通常在此情况下它将被设置为memberUid,但也可能因LDAP模式而异。
  • 组对象类: 与RFC 2307风格的组一起使用,它指定组的对象类,通常是posixGroup,但它也可能因LDAP模式而异。 Active Directory样式组不需要它。
  • UTF8 编码: 选中时,对LDAP服务器的查询将采用UTF8编码,并且响应将进行UTF8解码。 支持因LDAP服务器而异。 通常只有在用户名,组,密码和其他属性包含非传统字符时才是必需的。
  • 用户名变更: 如果未选中,以user @ hostname形式提供的用户名将会删除@hostname部分,以便仅在LDAP绑定请求中发送用户名。选中时,用户名将全部发送。
  • 点击保存创建服务器。
  • 访问系统诊断>认证测试,使用有效帐户测试LDAP服务器。

如果LDAP查询正确地为用户返回组列表,并且这些组存储在本地,则在使用系统诊断>认证测试进行帐户测试时,这些组将显示在结果中。 如果组未显示,请确保它们存在于名称匹配的pfSense上,并且选择了正确的组结构(例如,可能需要选择RFC 2703组。

外部认证示例

有多种方法可以将用户管理配置成连接到外部RADIUS或LDAP服务器,下面是常用的两种方法 。

RADIUS服务器示例

这个例子是针对FreeRADIUS制作的,但对Windows Server的做法相同。 有关Windows服务器设置用于RADIUS的信息,请参阅Windows Server的RADIUS身份验证。

这假设RADIUS服务器已经被配置为接受来自这个防火墙的查询作为具有共享密钥的客户端。

  • Descriptive Name: ExCoRADIUS
  • Type:  Radius
  • Hostname or IP Address: 192.2.0.5
  • Shared Secret:  secretsecret
  • Services Offered: Authentication and Accounting
  • Authentication Port: 1812
  • Accounting Port: 1813
  • Authentication Timeout: 10

 OpenLDAP 示例

在这个例子中,pfSense被设置为连接到公司的OpenLDAP服务器。

  • Descriptive Name: ExCoLDAP
  • Type: LDAP
  • Hostname or IP Address: ldap.example.com
  • Port: 636
  • Transport: SSL – Encrypted
  • Peer Certificate Authority: ExCo CA
  • Protocol Version: 3
  • Search Scope: Entire Subtree , dc=pfsense,dc=org
  • Authentication Containers: CN=pfsgroup;ou=people,dc=pfsense,dc=org
  • Bind Credentials: Anonymous binds Checked
  • Initial Template:  OpenLDAP
  • User Naming Attribute:  cn
  • Group Naming Attribute:  cn
  • Group Member Attribute: memberUid
  • RFC2307 Groups: Checked
  • Group Object Class:posixGroup
  • UTF8 Encode: Checked
  • Username Alterations:Unchecked

Active Directory LDAP 示例

在此示例中,pfSense设置为连接到Active Directory LDAP,以便为VPN验证用户身份。 结果仅限于VPNUsers组。 忽略扩展查询以接受任何用户。本示例使用普通TCP,但如果AD结构的证书颁发机构在pfSense中的证书管理器下导入,则也可以使用SSL,方法是选择该选项并从对等证书颁发机构下拉列表中选择适当的CA,然后设置主机名称为服务器证书的通用名称。

  • Descriptive Name:ExCoADVPN
  • Type: LDAP
  • Hostname or IP Address:192.0.2.230
  • Port: 389
  • Transport: TCP – Standard
  • Protocol Version:3
  • Search Scope: Entire Subtree , DC=domain,DC=local
  • Authentication Containers:CN=Users,DC=domain,DC=local
  • Extended Query: memberOf=CN=***Users,CN=Users,DC=example,DC=com
  • Bind Credentials:Anonymous binds Unchecked
  • User DN: CN=binduser,CN=Users,DC=domain,DC=local
  • Password: secretsecret
  • Initial Template:Microsoft AD
  • User Naming Attribute:samAccountName
  • Group Naming Attribute:cn
  • Group Member Attribute:memberOf

故障排查

使用系统诊断>认证测试工具可以测试认证服务器。测试很简单:

  • 导航到系统诊断>认证测试
  • 选择一个认证服务器
  • 输入用户名
  • 输入密码
  • 点击测试按钮

防火墙将尝试根据指定的服务器对给定用户进行身份验证,并返回结果。 在尝试使用服务器之前,通常最好尝试一次。

如果服务器为用户返回了用户组,并且这些组存在本地名称相同的组中,则这些组将显示在测试结果中。

如果在测试身份验证时收到错误,请仔细检查凭据和服务器设置,然后进行必要的调整并重试。

Active Directory LDAP错误

LDAP访问Active Directory最常见的错误是没有以正确的格式指定适当的绑定用户。如果仅用户名不起作用,请输入绑定用户的完整专有名称(DN),例如 :

CN=binduser,CN=Users,DC=domain,DC=local。

如果用户的完整DN未知,则可以通过在Windows Server上的管理工具下找到的ADSI Edit中的用户导航来找到它。

组成员身份的另一个常见错误是没有为搜索范围级别指定整个子树。

Active Directory 组成员

根据Active Directory组的制作方式,它们的指定方式可能与Authentication Containers和/或Extended Query等不同。 例如,AD中的传统用户组与LDAP不同,而不是单独的组织单位。 在Windows Server上的“管理工具”下找到的ADSI Edit可用于确定给定组的DN是什么。

扩展查询

扩展查询最常见的错误是给定的指令无法包含要搜索的项目以及如何搜索,例如:

memberOf=CN=VPNUsers,CN=Users,DC=example,DC=com

请注意,在上面的例子中,组的DN与限制一起给出 (memberOf=)

通过服务器日志排队故障

目标服务器(FreeRADIUS,Windows事件查看器等)通常会记录身份验证失败信息,并假定请求已完成到身份验证主机。 检查服务器日志以获取请求失败的详细解释。 pfSense上的系统日志(系统状态>系统日志)也可能包含一些提示的细节。

通过抓包数据分析故障

数据包捕获对于诊断错误也是非常有用的。 如果正在使用未加密的方法(RADIUS,没有SSL的LDAP),虽然实际使用的密码可能看不见,但可以看到足够的协议交换来确定请求未完成的原因。 在Wireshark中加载捕获时尤其如此,Wireshark可以解释响应,如下图所示。

此条目发表在pfSense分类目录。将固定链接加入收藏夹。