ECS:如何在 ECS 3.8.0 及更高版本上防止主机标头注入以避免管理 API 403 错误和无法访问的 Grafana UI
Summary: 从 ECS 3.8.0.x 开始,已解决有关主机标头注入的安全问题(请参阅 STORAGE-27164 的发行说明)。
This article applies to
This article does not apply to
This article is not tied to any specific product.
Not all product versions are identified in this article.
Instructions
什么是主机标头注入?
- 应用程序信任用户提供的 HTTP 主机标头,并使用用户提供的主机标头重定向到另一个页面。
- 攻击者可以通过将 HTTP 主机标头更改为恶意主机名并将用户重定向到恶意网页来利用它。
提醒:这仅影响通过代理或负载均衡器进行的管理 API 调用。它不会影响数据操作。
从 ECS 3.8.0.x 开始实施了哪些更改?
作为修复的一部分,将实施一组新的 API,允许设置或取消设置允许的服务器名称列表。根据该列表检查传入请求的主机标头值。如果该列表中不存在主机标头值,则请求将被拒绝。
下面是为注册和管理接受的服务器列表而引入的新 REST API 集。
| 资源名称 | 描述 |
|---|---|
GET /acceptedservernames/ |
获取接受的管理服务器名称的列表 |
POST /acceptedservernames/ |
创建或替换接受的管理服务器名称列表 |
PUT /acceptedservernames/ |
更新接受的管理服务器名称的列表。 |
DELETE /acceptedservernames/ |
删除接受的管理服务器名称列表 |
您在什么情况下会受到影响?
实施在 ECS 上配置接受的服务器列表这一解决方案的应用场景:
| 升级自 | 升级到或安装在 | 修复 |
|---|---|---|
| ECS 3.7 及更早版本 | ECS 3.8.0.x |
|
| ECS 3.7 及更早版本 | ECS 3.8.1.x 或更高版本 |
|
| ECS 3.8.0.x | ECS 3.8.1.x 或更高版本 |
|
什么表明您遇到了问题?
- 在重新安装或从较早的 3.8.x 升级到 3.8.0.x 后,所有管理登录 API 都将失败并显示 403-forbidden。
- Grafana 控制面板也可能无法访问。
日志在 ECS 上显示哪些错误?
"GET /login HTTP/1.1" 403 error is seen in /opt/storageos/logs/nginx/access.log and /opt/storageos/logs/objcontrolsvc.log on nodes API calls are made against.
解决方案摘要(升级到 3.8.0.x 或更高版本后)
- 将您的 ECS xDoctor 软件升级到最新版本。
- 添加外部 IP 的列表。
- 无需注册直接向 ECS 节点发出管理 API 调用或使用 ECS 节点的 IP 的外部服务器,因为连接已经成功。仅当连接通过代理服务器或负载平衡器传递时,才需要执行以下过程。因此,必须将所有代理和/或负载平衡器添加到管理服务器名称接受列表中。
1-xDoctor 升级
- 将 ECS xDoctor 软件升级到可用的最新版本。
- 检查系统上运行的 xDoctor 版本。如果版本为 4.8-87.0 或更高版本,请转至“添加外部 IP 列表”步骤。如果不是,请继续执行以下步骤。
命令:
# sudo xdoctor --version
示例:
admin@node1:~> sudo xdoctor --version 4.8-87.0
- 登录到 戴尔支持站点,直接连接到此下载 ECS 下载位置,使用关键字搜索栏搜索 xDoctor,然后单击 xDoctor 4.8-87.0 RPM 链接进行下载。要查看发行说明,请直接连接到 ECS 产品页面,然后从侧边栏中选择手册和文档,手册和文档应该可从该侧边栏下载它们。
- 下载 RPM 后,使用任何远程 SCP 程序,将文件上传到第一个 ECS 节点上的 /home/admin 目录。
- 上传完成后,以管理员身份通过 SSH 登录到 ECS 系统的第一个节点。
- 使用新分发的版本在所有节点上升级 xDoctor。
命令:
# sudo xdoctor --upgrade --local=/home/admin/xDoctor4ECS-4.8-87.0.noarch.rpm示例:
admin@ecs-n1:~> sudo xdoctor --upgrade --local=/home/admin/xDoctor4ECS-4.8-87.0.noarch.rpm 2022-07-04 07:41:49,209: xDoctor_4.8-83.0 - INFO : xDoctor Upgrader Instance (1:SFTP_ONLY) 2022-07-04 07:41:49,210: xDoctor_4.8-83.0 - INFO : Local Upgrade (/home/admin/xDoctor4ECS-4.8-84.0.noarch.rpm) 2022-07-04 07:41:49,226: xDoctor_4.8-83.0 - INFO : Current Installed xDoctor version is 4.8-86.0 2022-07-04 07:41:49,242: xDoctor_4.8-86.0 - INFO : Requested package version is 4.8-84.0 2022-07-04 07:41:49,242: xDoctor_4.8-86.0 - INFO : Updating xDoctor RPM Package (RPM) 2022-07-04 07:41:49,293: xDoctor_4.8-86.0 - INFO : - Distribute package 2022-07-04 07:41:50,759: xDoctor_4.8-86.0 - INFO : - Install new rpm package 2022-07-04 07:42:04,401: xDoctor_4.8-86.0 - INFO : xDoctor successfully updated to version 4.8-87.0
- 如果环境是多机架 VDC,则您必须在每个机架的第一个节点上安装新的 xDoctor 软件包。要确定这些机架主节点,请运行以下命令。在此实例中,突出显示了四个机架和四个机架主节点
- 查找机架主节点(在下面以粗体突出显示)。
命令:
# svc_exec -m "ip address show private.4 |grep -w inet"示例:
admin@ecsnode1~> svc_exec -m "ip address show private.4 |grep -w inet" svc_exec v1.0.2 (svc_tools v2.1.0) Started 2021-12-20 14:03:33 Output from node: r1n1 retval: 0 inet 169.254.1.1/16 brd 169.254.255.255 scope global private.4 Output from node: r2n1 retval: 0 inet 169.254.2.1/16 brd 169.254.255.255 scope global private.4 Output from node: r3n1 retval: 0 inet 169.254.3.1/16 brd 169.254.255.255 scope global private.4 Output from node: r4n1 retval: 0 inet 169.254.4.1/16 brd 169.254.255.255 scope global private.4
- 根据以下方面,将软件包从系统的第一个节点 (R1N1) 复制到其他机架主节点:
示例:
admin@ecs-n1: scp xDoctor4ECS-4.8-87.0.noarch.rpm 169.254.2.1:/home/admin/ xDoctor4ECS-4.8-84.0.noarch.rpm 100% 32MB 31.9MB/s 00:00 admin@ecsnode1~> scp xDoctor4ECS-4.8-87.0.noarch.rpm 169.254.3.1:/home/admin/ xDoctor4ECS-4.8-84.0.noarch.rpm 100% 32MB 31.9MB/s 00:00 admin@ecsnode1~> scp xDoctor4ECS-4.8-87.0.noarch.rpm 169.254.4.1:/home/admin/ xDoctor4ECS-4.8-87.0.noarch.rpm 100% 32MB 31.9MB/s 00:00 admin@ecsnode1~>
- 按照上述步骤 1,在前面确定的上述每个机架主节点上运行相同的 xDoctor 安装命令。
命令:
# sudo xdoctor --upgrade --local=/home/admin/xDoctor4ECS-4.8-87.0.noarch.rpm
2-A 添加外部 IP 列表。
- 管理用户必须使用安全管理员角色执行此活动。在下面的示例中,我们使用 root 用户,因为它也具有安全管理功能。
- 它可以在 ECS VDC 上的任何节点上完成。
- 在包含多个 VDC 的联合中,必须在升级联合中的所有 VDC 之后才执行此操作。然后,可以将该过程应用于每个 VDC。
-
提醒:允许列表会跨联合 VDC 进行复制,因此在一个群集上添加允许列表条目会将这些条目复制到另一个群集,并覆盖已添加到另一个群集上的任何内容
- 如果用户不是安全管理员,或者使用了错误的凭据,则该工具会引发“401 - 未经授权”异常。
- 准备要添加到信任列表中的服务器名称(IP、主机名和 FQDN)的列表。将列表合并到一个文件中,其中每行包含一个服务器名称。如果管理网络已分离,则还应将管理节点的 FQDN 添加到信任列表中。许多客户可能必须添加节点的名称;均使用“hostname -s”svc_exec短名称,并使用svc_exec主机名进行长名称
要检查是否针对管理进行网络分离,请运行以下命令并搜索突出显示的“mgmt”。
命令:
# getrackinfo -n
示例:
#getrackinfo -n Named networks ============== Node ID Network Ip Address Netmask Gateway VLAN Interface 1 mgmt 1xx.xxx.xx.xxx 255.25x.xxx.x 19x.xxx.xx.x xxx public 1 mgmt 1xx.xxx.xx.xxx 255.25x.xxx.x 19x.xxx.xx.x xxx public 1 mgmt 1xx.xxx.xx.xxx 255.25x.xxx.x 19x.xxx.xx.x xxx public 1 mgmt 1xx.xxx.xx.xxx 255.25x.xxx.x 19x.xxx.xx.x xxx public 1 mgmt 1xx.xxx.xx.xxx 255.25x.xxx.x 19x.xxx.xx.x xxx public 1 mgmt 1xx.xxx.xx.xxx 255.25x.xxx.x 19x.xxx.xx.x xxx public
下面的示例,其中包含服务器名称列表(替换为真实名称)。
# cat trust.server.list ecs1-n1 ecs1-n1.dell.com ecs1-n2 ecs1-n2.dell.com ecs1-n3 ecs1-n3.dell.comecs1-n4 ecs1-n4.dell.comecs1-n5 ecs1-n5.dell.comLoad_balancer1_IPLoad_balancer1_HostnameLoad_balancer1_FQDNLoad_balancer2_IPLoad_balancer2_HostnameLoad_balancer2_FQDN
- 检查日志以验证服务器名称是否存在任何 403 错误:
命令:
svc_log -f 'ERROR HostHeaderAcceptListFilter.java' -sr objcontrolsvc -start '2 hours ago'
示例:
# svc_log -f 'ERROR HostHeaderAcceptListFilter.java' -sr objcontrolsvc -start '2 hours ago'
svc_log v1.0.31 (svc_tools v2.13.1) Started 2023-10-10 18:00:11
Running on nodes: <All nodes>
Time range: 2023-10-13 17:00:00 - 2023-10-13 18:11:47
Filter string(s): 'ERROR HostHeaderAcceptListFilter.java'
Show filename(s): True
Show nodename(s): True
Search reclaim logs (if any): False
169.254.1.1 objcontrolsvc.log 2023-10-10T17:00:07,188 [qtp47151359-4412] ERROR HostHeaderAcceptListFilter.java (line 81) The host header server name didn't match the accepted list ecsdev1-m1
169.254.1.1 objcontrolsvc.log 2023-10-10T17:00:38,609 [qtp47151359-4386] ERROR HostHeaderAcceptListFilter.java (line 81) The host header server name didn't match the accepted list ecsdev1-m1
169.254.1.1 objcontrolsvc.log 2023-10-10T17:01:07,499 [qtp47151359-4310] ERROR HostHeaderAcceptListFilter.java (line 81) The host header server name didn't match the accepted list ecsdev1-m1
169.254.1.2 objcontrolsvc.log 2023-10-10T17:05:01,743 [qtp1754883736-3393] ERROR HostHeaderAcceptListFilter.java (line 81) The host header server name didn't match the accepted list ecsdev1-m2
169.254.1.2 objcontrolsvc.log 2023-10-10T17:05:01,756 [qtp1754883736-3397] ERROR HostHeaderAcceptListFilter.java (line 81) The host header server name didn't match the accepted list ecsdev1-m2
169.254.1.3 objcontrolsvc.log 2023-10-10T17:30:01,533 [qtp1289718177-2883] ERROR HostHeaderAcceptListFilter.java (line 81) The host header server name didn't match the accepted list ecsdev1-m3
169.254.1.3 objcontrolsvc.log 2023-10-10T17:30:01,546 [qtp1289718177-2944] ERROR HostHeaderAcceptListFilter.java (line 81) The host header server name didn't match the accepted list ecsdev1-m3
下面的示例,其中包含服务器名称列表(替换为真实名称)。
# cat trust.server.list ecs1-n1 ecs1-n1.dell.com ecs1-n2 ecs1-n2.dell.com ecs1-n3 ecs1-n3.dell.comecs1-n4 ecs1-n4.dell.comecs1-n5 ecs1-n5.dell.com ecsdev1-m1 ecsdev1-m2 ecsdev1-m3Load_balancer1_IP Load_balancer1_HostnameLoad_balancer1_FQDNLoad_balancer2_IPLoad_balancer2_HostnameLoad_balancer2_FQDN
使用提供的 <提供mgmt_user>的列表添加受信任的服务器。系统会提示用户输入mgmt_user的密码,输入密码,然后按 Enter 键继续。
命令:
svc_param asn add -u <mgmt_user> -p -f <server.list>
示例:
# svc_param asn add -u root -p -f trust.server.list Password: svc_param v1.1.3 (svc_tools v2.7.0) Started 2022-11-08 19:27:16 add trusted servers successfully!
- 检索受信任的服务器列表。该列表可以是 a) 打印到屏幕上以快速检查它是否简短,或 b) 保存到文件以进行备份或检查。
- 将结果打印到屏幕上。系统会提示您输入密码,按 Enter 键以继续。
命令:
svc_param asn list -u <mgmt_user> -p
示例:
# svc_param asn list -u root -p
Password:
svc_param v1.1.3 (svc_tools v2.7.0) Started 2023-10-10 19:32:58
Found 19 trusted servers:
Load_balancer1_FQDN
Load_balancer1_Hostname
Load_balancer1_IP
Load_balancer2_FQDN
Load_balancer2_Hostname
Load_balancer2_IP
ecs-n1
ecs-n1.nas2008.com
ecs-n2
ecs-n2.nas2008.com
ecs-n3
ecs-n3.nas2008.com
ecs-n4
ecs-n4.nas2008.com
ecs-n5
ecs-n5.nas2008.com
ecsdev1-m1
ecsdev1-m2
ecsdev1-m3
- 将结果保存到文件中。系统会提示您输入密码,按 Enter 键以继续。
命令:
svc_param asn list -u <mgmt_user> -p -o <output file>
示例:
# svc_param asn list -u root -p -o server.list.backup Password: svc_param v1.1.3 (svc_tools v2.7.0) Started 2022-10-10 19:38:05 Found 19 trusted servers: Please find the result in /home/admin/server.list.backup # cat /home/admin/server.list.backup Load_balancer1_FQDN Load_balancer1_Hostname Load_balancer1_IP Load_balancer2_FQDN Load_balancer2_Hostname Load_balancer2_IP ecs-n1 ecs-n1.nas2008.com ecs-n2 ecs-n2.nas2008.com ecs-n3 ecs-n3.nas2008.com ecs-n4 ecs-n4.nas2008.com ecs-n5 ecs-n5.nas2008.com ecsdev1-m1 ecsdev1-m2 ecsdev1-m3
提醒:在不 使用负载 均衡器的情况下,仍然获得相同的信息
nginx 403 Forbidden 错误,请检查客户是否正在使用VLAN 网络。使用 进行分离 getrackinfo -n 命令(按步骤 1 执行)。如果是这样,则将来自客户网络的 管理 DNS 名称和管理 IP 地址 添加到其所有节点的信任服务器列表中。
(如下)
示例:
# cat trust.server.list 10.x.x.1 10.x.x.2 10.x.x.3 10.x.x.4 10.x.x.5 10.x.x.6 test-n1.domain.example test-n2.domain.example test-n3.domain.example test-n4.domain.example test-n5.domain.example test-n5.domain.example
2-B 删除外部 IP 列表。
如果您必须从受信任列表中删除条目,系统会提示您输入密码,然后按 Enter 键以继续。A server.to.remove.list 应创建。
示例:
# cat server.list.to.remove Load_balancer1_Hostname Load_balancer2_IP删除命令:
svc_param asn remove -u <mgmt_user> -p -f <server.to.remove.list>(系统会提示您输入密码,请按 Enter 键以继续。)
例:
# svc_param asn remove -u root -p -f server.list.to.remove Password: svc_param v1.1.3 (svc_tools v2.7.0) Started 2022-11-08 19:42:00 remove trusted servers successfully!
再次列出条目以确认条目已被删除。
svc_param asn list -u root -p(系统会提示您输入密码,请按 Enter 键以继续。)
例:
# svc_param asn list -u root -p
Password:
svc_param v1.1.3 (svc_tools v2.7.0) Started 2022-11-08 19:43:19
Found 4 trusted servers:
Load_balancer1_FQDN
Load_balancer1_IP
Load_balancer2_FQDN
Load_balancer2_Hostname
Additional Information
有关此更改的更多详细信息和上下文,请参阅 戴尔支持网站上提供的以下文档:
- ECS 3.8.0 或 ECS 3.8.1 发行说明
- ECS 3.8.0 或 ECS 3.8.1 管理指南
- ECS 3.8.0 或 ECS 3.8.1 安全指南
Affected Products
ECS, ECS Appliance, Elastic Cloud StorageArticle Properties
Article Number: 000205031
Article Type: How To
Last Modified: 14 Nov 2024
Version: 30
Find answers to your questions from other Dell users
Support Services
Check if your device is covered by Support Services.