技术论文:Citrix ADC 部署的最佳实践

概述

本技术白皮书旨在传达熟练掌握ADC的人员将配置为通用实现的内容。

注意: 不太可能有适合所有人的单一配置。对您的需求有更深入了解的顾问或管理员可能会偏离这些默认设置,并记录此类更改的原因。

电源和熄灯管理设置

如果您购买了 Citrix ADC 设备,则应确保:

  1. Citrix ADC 部署在足够独立的位置,足以满足您的高可用性要求。

  2. 每个 ADC 上的冗余电源单元(如果已购买)都连接到单独的电源。

  3. 已配置熄灯管理卡(如果您购买了带有此类卡的设备)。

您可以在此处找到有关配置熄灯管理卡的更多信息。

物理网络布线、VLAN 和连接

1. 将 Citrix ADC 连接到网络的所有物理接口都是冗余的

为确保电缆、交换机或接口故障期间的数据流动,请使用冗余电缆将 ADC 连接到每个网络。

要将连接每个网络的接口组合成一条链路(称为通道),您必须在 ADC 上配置链路聚合。如果可能,最好使用链路聚合控制协议 (LACP)。但是,如果您的网络交换机不支持 LACP,也可以使用手动聚合链接。

有关在 Citrix ADC 上配置链路聚合的说明可在此处找到

在虚拟化或云环境中,您的提供商负责处理接口冗余,而此步骤不是必需的。

2. 未使用的物理接口被禁用

禁用您未使用的所有物理接口。禁用未使用的接口可防止它们意外或恶意地连接到其他网络或设备。

您可以通过选择 “ 系统”、“网络”、“接口” 来禁用物理接口。然后,通过勾选界面旁边的框,单击 “选择操作”,然后单击 “禁用”。

3. 将系统、网络、接口中的所有冗余物理接口设置为不受高可用性监控

由于每个网络都有冗余连接,因此 ADC 不希望在单个链路出现故障时启动 HA 故障转移。相反,ADC 应该依赖剩余的链路,并且只有在所有链路都出现故障时才会触发故障转移。

要在冗余通道中的单个接口出现故障时防止高可用性故障转移,请将组件接口标记为未受监视。

要将接口标记为不受监视,请选择 系统、网络、接口。然后,选择构成每个冗余通道一部分的每个接口,并将 “HA 监控” 单选按钮设置为 “关闭”。

在虚拟化或云环境中,您拥有虚拟接口,无需执行此步骤,因为您的提供商会处理接口冗余。

4. 所有包含冗余物理接口的通道都应在系统、网络、通道内进行高可用性监控

如果将 ADC 连接到特定网络的所有聚合链路出现故障,则表示这些链路的信道进入故障/关闭状态。

检查是否已启用通道监控,如果所有冗余链路都出现故障,ADC 将进行故障转移。

要将频道标记为受监视,请选择 “ 系统”、“网络”、“频道”。然后,选择每个信道并将 “HA 监控” 单选按钮设置为 “”。

5. 所有信道都绑定到单独的 VLAN,并且您已注意没有未标记的信道意外地仍在 VLAN 1 中

每个冗余通道通常代表将 ADC 连接到特定逻辑网络的聚合物理链路。

在虚拟化或云环境中,每个接口都可能代表与已为您完成聚合工作的提供商的聚合物理链接。

默认情况下,ADC 会将所有接口、通道和 IP 地址视为同一逻辑网络的 VLAN 1。因此,忽略 VLAN 配置将导致分配给 ADC 的所有 IP 地址在每个直连网络中都可用。

要防止出现这种情况,请在 ADC 上配置 VLAN 以代表您的逻辑网络并适当地隔离流量。

您可以在此处找到创建 VLAN 的说明。

6. 在系统内的 ADC 之间创建 HA 对,实现高可用性

Citrix 认为以冗余方式部署 ADC 是一种最佳做法。您可以通过实施 HA 对、创建集群或使用 GSLB 等技术在实例之间拆分请求来实现冗余。HA 对包含两个 ADC 节点,群集最多可包含 32 个节点。对于通用实现,Citrix 建议创建一个双节点 HA 对。

您可以在此处找到配置 HA 对的说明

7. 创建一个 SNIP 并将其绑定到每个 VLAN,确保每个 SNIP 都在所连接网络的子网中

Citrix ADC 从子网 IP(称为 SNIP)启动通信,例外情况有限。

为每个直接连接的逻辑网络创建一个子网 IP/SNIP。由于您已经使用 VLAN 隔离了每个网络,因此必须将每个 SNIP 绑定到其各自的 VLAN。请注意确保没有任何 VLAN 缺少 SNIP。

ADC 根据 SNIP 的子网确定每个虚拟 IP (VIP) 需要放置在哪个 VLAN 中。然后,VLAN 配置会将虚拟服务器隔离到其目标网络中。

您可以在此处找到配置 SNIP 的说明。

注意: 默认情况下 snips 主机管理服务。要在未启用管理服务的情况下创建 Snip,请将 “-mgmtAccess DISABLED” 参数附加到 “add ns IP” 命令中。

8. 在 “系统”、“网络”、“路由” 中配置 ADC 所需的路由

如果您连接了多个逻辑网络,则每个网络中可能都有路由器。因此,您现在必须配置 ADC 到达其客户端和后端服务器所需的所有路由。

您可以在此处找到配置路由的说明。

注意: ADC 只有一个适用于所有接口的路由表。

9. 创建所需的任何基于策略的路由

有时,配置静态路由来提供您想要的行为是不可能的。

最常见的例子是,具有不同的入口、出口和专用管理网络以及出口网络上的管理客户端的 ADC。

在这种情况下,静态规则是不够的。相反,需要基于策略的路由 (PBR)。通过使用 PBR,您可以强制来自 ADC 管理 IP 的流量通过管理路由器。使用 PBR 将绕过静态路由表,否则静态路由表会将数据发送到出口网络。

您可以在此处找到配置基于策略的路由的说明。

但是,如果您有我们的示例中描述的场景,则需要以下 PBR:

add ns pbr Management ALLOW -srcIP = <NSIP_of_first_HA_node>-<NSIP_of_second_HA_node> -destIP "!=" <first_IP_management_subnet>–<last_IP_management_subnet> -nextHop <management_subnet_router> - priority 1
apply pbrs
<!--NeedCopy-->

10. 确保您可以使用基于 Mac 的转发 (MBF) 禁用对每个 SNIP 执行 ping 操作,或者您明白为什么不能

Citrix ADC 有一种称为基于 Mac 的转发 (MBF) 的模式。MBF 会使 ADC 忽略路由表,并将回复发送到其接收流量的 MAC 地址。

在无法定义路线的地方,MBF 非常有用。假设ADC有多个互联网连接,并且必须使用流量到达的互联网路由器进行回复。在此,MBF 将使 ADC 记录每个连接的源 MAC 地址,并将其用作其应答中的目标 MAC。

但是,让 MBF 覆盖路由表会使故障排除变得更加复杂。使用 MBF 时,您无法仅从 ADC 的配置文件中了解流量,因为 MBF 会覆盖路由表,并且流量可能无法按预期流动。结果是,虽然MBF对某些实施至关重要,但也可能导致支持网络中的错误配置仍未被发现。

禁用 MBF 以确保路由表和 PBR 正确无误。禁用 MBF 后,请验证每个 SNIP 是否仍可访问,或者您了解它为什么不可访问。

禁用 MBF 的命令是

disable ns mode mbf
<!--NeedCopy-->

启用 MBF 的命令是

enable ns mode mbf
<!--NeedCopy-->

如果您不需要 MBF,请将其禁用。

您可以在这里找到更多关于基于 Mac 的转发的信息。

11. 您已在流量管理、SSL、证书中为管理 GUI 安装了新的 SSL 证书和密钥


Web 浏览器不信任 Citrix ADC 的默认 SSL 证书。缺乏信任会导致浏览器在访问 ADC 的管理服务时显示警告消息。

证书的浏览器警告旨在在连接不安全时向用户发出警告。Citrix 建议您替换默认 SSL 证书,以免管理用户习惯于接受警告消息。

您可以在此处找到有关如何替换管理 SSL 证书的详细信息。

注意: 由于 Citrix ADC 在 HA 节点之间共享管理 SSL 证书,因此所有用于管理目的的 FQDN 都必须信任您的替换证书。Citrix 建议使用 SAN 证书来包含两个 HA 节点的 FQDN。

基本配置设置

1. 设置时区并启用 NTP

在排除故障或处理安全问题时,日志文件中包含准确且易于理解的时间戳至关重要。

首先,将时区设置为对您有意义的时间。例如,如果您的设备登录到中央 syslog 服务器,并且需要交叉引用每台服务器的数据,请使用与现有服务器相同的时区。

设置时区的命令是:

set ns param -timezone CoordinatedUniversalTime
<!--NeedCopy-->

其次,使用以下命令添加 NTP 服务器并启用时间同步:

add ntp server pool.ntp.org
enable ntp sync
<!--NeedCopy-->

启用时间同步后,使用以下命令查看 NTP 状态以验证行为是否正确:

nsroot@StevensADC-Primary> show ntp status

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*any.time.nl     85.199.214.99    2 u  113 1024  377   21.138   +0.762   0.654
 Done
 nsroot@StevensADC-Primary>
<!--NeedCopy-->

您可以在此处找到有关如何使用ADC的GUI设置时区的详细信息。

您可以在此处找到有关如何添加 NTP 服务器的详细信息。

2. 创建密钥加密密钥

密钥加密密钥(通常称为 KEK)用于加密和解密 ADC 必须以可逆形式存储的凭据。例如,ADC 必须使其 LDAP 绑定密码保持可逆状态,以便在身份验证时检索该密码。

在 Citrix ADC 固件 13.0—76.31 中,ADC 会自动创建 KEK。在更高版本的固件中,该命令会返回一条错误消息,您可以放心地忽略该消息。

在较早的版本中,您可以使用以下命令创建 KEK:

create kek <RANDOMSTRING>
<!--NeedCopy-->

3. 设置非默认的 nsroot 密码

最新版本的 Citrix ADC 固件会在您首次登录时提示您更改 “nsroot” 帐户的默认密码。当启用 “-forcePasswordChange” 系统参数时,最近的固件版本会提示您更改密码。

对于较早的版本,您必须使用以下命令更改 “nsroot” 密码:

set system user nsroot -password <NSROOTPASSWORD>
<!--NeedCopy-->

4. 为禁用外部身份验证的 ADM 添加帐户


理想情况下,将所有 Citrix ADC 连接到 ADM 以进行集中许可和管理。与 ADM 的连接需要用户名和密码,可以使用以下命令创建用户名和密码:

add system user admuser <ADMPASSWORD> -externalAuth DISABLED -timeout 900
bind system user admuser superuser 100
set system user admuser -externalAuth DISABLED
<!--NeedCopy-->

您可以在此处找到有关 ADM 的更多详细信息。

5. 限制非管理应用程序访问 NSIP,仅限制 HTTPS 访问

阻止非管理服务访问管理 IP,并将管理 IP 设置为要求安全通信访问(HTTPS 而不是 HTTP)。

set ns ip NSIP -restrictAccess enabled -gui SECUREONLY
<!--NeedCopy-->

您可以在此处找到有关限制访问 NSIP 的更多详细信息。

6. 设置非默认 RPC 节点密码

将 RPC 通信(用于 HA 和 GSLB)设置为使用非默认密码。

set rpcNode <NSIP_OF_SECONDARY_NODE> -password <RPC_SECONDARY_PASSWORD> -secure YES

set rpcNode <NSIP_OF_PRIMARY_NODE> -password <RPC_PRIMARY_PASSWORD> -secure YES
<!--NeedCopy-->

7. 启用 HA 故障保护模式以确保最后一个运行状况良好的节点继续提供服务

如果 ADC 受监视的 HA 接口或路由指示错误,则 ADC 会进入运行状况不佳并触发 HA 故障转移。如果第二个 HA 节点进入运行状况不佳状态,则两个节点都将停止提供服务。

HA 故障安全模式可确保对中最后一个幸存的节点继续尝试提供业务服务。

set HA node -failSafe ON
<!--NeedCopy-->

您可以在此处找到有关 HA 故障安全模式的更多详细信息。

8. 在 1200 秒内将 HA 故障切换限制为 3

万一出现高可用性故障切换反复发生的情况,您可能会希望它们停止并尝试提供服务。

在这里,我们定义了在 1200 秒(20 分钟)时段内进行三次高可用性故障切换的限制。

set ha node -maxFlips 3
set ha node -maxFlipTime 1200
<!--NeedCopy-->

9. 禁用管理服务的 SSLv3

默认情况下,Citrix ADC 管理 GUI 已启用 SSLv3 和 TLS1.0。为确保通信安全,我们将禁用 SSLv3。

set ssl service nshttps-::1l-443 -ssl3 disabled
set ssl service nshttps-127.0.0.1-443 -ssl3 disabled
<!--NeedCopy-->

根据贵公司的内部安全策略,您可以选择禁用 TLS1.0。

set ssl service nshttps-::1l-443 -ssl3 disabled -tls1 disabled
set ssl service nshttps-127.0.0.1-443 -ssl3 disabled -tls1 disabled
<!--NeedCopy-->

10. 设置通用模式和功能

默认情况下,Citrix ADC 已启用第 3 层模式。第 3 层模式使 ADC 充当路由器,通常可以安全地禁用。边缘模式使 ADC 在链路负载平衡等配置中使用时动态了解有关后端服务器的详细信息。

disable ns mode l3 edge
<!--NeedCopy-->

您可以在此处找到有关第 3 层模式的更多详细信息。

您需要的特定模式和功能取决于您的用例。但是,我们可以选择适用于大多数安装的选项列表。

enable ns feature lb ssl rewrite responder cmp
<!--NeedCopy-->

您可以在此处找到有关模式和功能的更多详细信息。

11. 配置一个或多个 DNS 域名服务器

Citrix ADC 需要有权访问一个或多个域名服务器才能进行 DNS 解析。Citrix ADC 使用 ICMP 监视器检查 DNS 服务器是否处于联机状态。要使用基于 DNS 的监控和分配负载,通常需要实现本地 DNS 负载平衡虚拟服务器。

由于 DNS 可以使用 UDP 或 TCP,因此我们为每种协议创建一个负载平衡虚拟服务器。

使用以下命令配置域名服务器:

add lb virtual server DNS_UDP DNS 0.0.0.0 0 -persistenceType NONE -cltTimeout 120

add serviceGroup DNS_UDP_SVG DNS -maxClient 0 -maxReq 0 -cip DISABLED -usip NO -useproxyport NO -cltTimeout 120 -svrTimeout 120 -CKA NO -TCPB NO -CMP NO
bind lb virtual server DNS_UDP DNS_UDP_SVG

add lb monitor DNS_UDP_monitor DNS -query . -queryType Address -LRTM DISABLED -interval 6 -resptimeout 3 -downTime 20 -destPort 53
bind serviceGroup DNS_UDP_SVG -monitorName DNS_UDP_monitor

bind serviceGroup DNS_UDP_SVG <DNSSERVERIP1> 53
bind serviceGroup DNS_UDP_SVG <DNSSERVERIP2> 53


add lb virtual server DNS_TCP DNS_TCP 0.0.0.0 0 -persistenceType NONE -cltTimeout 120

add serviceGroup DNS_TCP_SVG DNS_TCP -maxClient 0 -maxReq 0 -cip DISABLED -usip NO -useproxyport NO -cltTimeout 120 -svrTimeout 120 -CKA NO -TCPB NO -CMP NO
bind lb virtual server DNS_TCP DNS_TCP_SVG

add lb monitor DNS_TCP_monitor DNS-TCP -query . -queryType Address -LRTM DISABLED -interval 6 -resptimeout 3 -downTime 20 -destPort 53
bind serviceGroup DNS_TCP_SVG -monitorName DNS_TCP_monitor

bind serviceGroup DNS_TCP_SVG <DNSSERVERIP1> 53
bind serviceGroup DNS_TCP_SVG <DNSSERVERIP2> 53

add dns nameServer DNS_UDP -type UDP
add dns nameServer DNS_TCP -type TCP
<!--NeedCopy-->

12. 设置 TCP 和 HTTP 参数

虽然在 ADC 13.0 固件中,窗口缩放 (WS) 和选择性确认 (SACK) 现在默认为启用,但您必须在较早的固件版本中启用这些 TCP 设置。

set ns tcpparam -WS ENABLED
set ns tcpparam -SACK ENABLED
<!--NeedCopy-->

Nagle 使 Citrix ADC 合并数据以发送较少数量的较大数据包,并且可以使用以下命令启用。

set ns tcpparam -nagle ENABLED
<!--NeedCopy-->

默认情况下,Citrix ADC 会转发到达负载平衡器但不符合 RFC 标准的 HTTP 请求。将 ADC 配置为默认丢弃无效请求。

要允许默认值例外,您可以在与安全团队讨论后更改单个虚拟服务器上的 HTTP 选项。

禁用对 HTTP/0.9 协议的支持,该协议已经过时了 20 多年。作为参考,Windows 3.1 上的 Mosaic 2.0 包括对 HTTP/1.0 的支持。

set ns httpparam -dropInvalReqs ENABLED -markHttp09Inval ON
<!--NeedCopy-->

Cookie 版本 0 包含绝对时间戳,而版本 1 的 cookie 具有相对时间。如果客户端和 ADC 时钟不同,则带有绝对时间戳的 Cookie 不会在预期时间过期。但是,到期前的相对时间为+X分钟的cookie会。

Internet Explorer 2 在 1995 年包含了对版本 1 cookie 的支持,启用此选项不太可能遇到问题。

set ns param -cookieversion 1
<!--NeedCopy-->

13. 将 SNMP 查询限制到选定的服务器

好的做法是,ADC 只回答来自应该进行此类查询的主机的 SNMP 查询。使用以下命令限制 ADC 允许 SNMP 查询的主机:

set snmp manager SNMPMANAGERIP
<!--NeedCopy-->

您可以在此处找到有关配置 SNMP 的更多详细信息。

14. 设置 SNMP 警报和陷阱

当 CPU 或内存使用率较高时,ADC 发出警报非常有用。您可以通过陷阱配置向 SNMP 服务器发送警报。您可能还希望在 HA 故障转移发生时触发警报。您可以使用以下命令实现此类配置:

set snmp alarm CPU-USAGE -state ENABLED -normalValue 35 -thresholdValue 80 -logging ENABLED -severity Informational
set snmp alarm MEMORY -state ENABLED -normalValue 35 -thresholdValue 80 -logging ENABLED -severity Critical
set snmp alarm HA-STATE-CHANGE -severity Critical

add snmp trap generic SNMPTRAPDSTIP -communityName public
<!--NeedCopy-->

注意: Citrix 建议您考虑定期检查阈值,以确保 ADC 在您要调查的异常行为时发出警报。

15. 设置远程 syslog 服务器

应在 ADC 上配置审核日志记录,并在远程服务器上存储和分析审核日志。

您可以使用以下命令将 Citrix ADC 配置为将审核日志发送到远程 Syslog 服务器:

add audit syslogAction RemoteSyslogServerAction SYSLOGSERVERIP -loglevel ALL
add audit syslogpolicy RemoteSyslogServerPolicy true RemoteSyslogServerAction
bind audit syslogGlobal -policyName RemoteSyslogServerPolicy -priority 100
<!--NeedCopy-->

[您可以在这里找到有关审核日志记录的更多详情] (/zh-cn/citrix-adc/current-release/system/audit-logging.html)

16. 为管理会话设置超时和提示

Citrix ADC 13.0 允许在断开空闲管理会话连接之前的默认时间为 900 秒(15 分钟)。在较旧的固件版本上,必须确保已配置适当的超时。

set system parameter -timeout 900
<!--NeedCopy-->

管理员可以同时打开与多个 ADC 的 SSH 会话。更改 ADC 的 CLI 提示符有助于明确会话所连接的节点。

以下命令会使 CLI 提示符显示其用户名、ADC 的主机名以及实例的高可用性状态。

set system parameter -promptString %u@%h-%s
<!--NeedCopy-->

运行该命令后,提示符将呈现为:

nsroot@hostname-Primary>
<!--NeedCopy-->

17. 管理账户的集中身份验证

安全团队通常认为,从中央平台(如 Active Directory)控制管理帐户比在每台设备上创建帐户要好。通常,然后会根据组成员资格向这些集中账户授予权限。

集中身份验证和授权的基本原理通常是管理每台设备上的帐户非常耗时且容易出错。此外,还有一种风险是,管理用户不经常更改密码,IT 可能会忘记删除离职员工的帐户。

使用以下命令配置集中式身份验证,请记住 LDAP 筛选器控制允许谁登录。

add authentication ldapAction LDAP_mgmt_auth -serverIP <LDAPMANAGEMENTSERVERIP> -serverPort 636 -ldapBase "<dc=mycoolcompany,dc=local>" -ldapBindDn "<serviceaccount@mycoolcompany.local>" -ldapBindDnPassword <LDAPPASSWORD> -ldapLoginName <sAMAccountName> -searchFilter "&(|(memberOf:1.2.840.113556.1.4.1941:<cn=Citrix-ADC-FullAccess,ou=groups,dn=mycoolcompany,dc=local>)(memberOf:1.2.840.113556.1.4.1941:<cn=Citrix-ADC-ReadOnly,ou=groups,dn=mycoolcompany,dc=local>))" -groupAttrName memberOf -subAttributeName cn -secType SSL -passwdChange ENABLED -nestedGroupExtraction ON -maxNestingLevel 5 -groupNameIdentifier samAccountName -groupSearchAttribute memberOf -groupSearchSubAttribute CN

add authentication Policy LDAP_mgmt_pol -rule true -action LDAP_mgmt_auth
bind system global LDAP_mgmt_pol -priority 100
<!--NeedCopy-->

虽然这些命令实现了身份验证,但它们不控制授权,默认情况下,经过身份验证的用户无法执行任何操作。

要授予用户(或更准确地说,用户所属的组)对 ADC 执行操作的权限,应使用以下命令:

add system group Citrix-ADC-FullAccess -timeout 900
add system group Citrix-ADC-ReadOnly -timeout 900
bind system group Citrix-ADC-FullAccess -policyName superuser 100
bind system group Citrix-ADC-ReadOnly -policyName read-only 110
<!--NeedCopy-->

您可以在此处找到有关集中式身份验证和授权的更多信息。

您还可以在此处找到有关上面使用的 LDAP 过滤器字符串的信息。

此外,在 ADC 固件版本 12.1.51.16 中,您可以 按照此处的步骤为管理用户配置多重身份验证。

18. 禁用 nsroot 用户的 LDAP 身份验证

由于 Citrix ADC 分别处理身份验证和授权,因此用户可以使用 LDAP 进行身份验证,ADC 会根据其组成员资格授予权限。

虽然这不是一个好主意,但您也可以在 ADC 上创建具有授权权限的用户帐户。然后,可以使用与同名 Active Directory 用户关联的密码对这些帐户进行身份验证。

要防止 Active Directory 管理员创建 “nsroot” 用户并能够进行身份验证,必须禁用 “nsroot” 用户帐户的外部身份验证。

set system user nsroot -externalAuth DISABLED
<!--NeedCopy-->

19. TLS/SSL 最佳实践

现在,您可以按照 TLS/SSL 最佳实践文档来定义可用于保护虚拟服务器的安全密码套件。

您可以在此处找到 TLS/SSL 最佳实践文档。

技术论文:Citrix ADC 部署的最佳实践

在本文中