ECS: 관리 API 403 오류 및 액세스할 수 없는 Grafana UI를 방지하기 위해 ECS 3.8.0 이상에서 호스트 헤더 삽입을 방지하는 방법
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 버전에서 3.8.0.x로 업그레이드한 후 모든 관리 로그인 API가 403-사용할 수 없음으로 실패합니다.
- 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
- Dell 지원 사이트에 로그인하고 이 다운로드 ECS 다운로드 위치에 직접 연결한 다음 키워드 검색 표시줄을 사용하여 xDoctor를 검색하고 xDoctor 4.8-87.0 RPM 링크를 클릭하여 다운로드합니다. 릴리스 노트를 보려면 ECS 제품 페이지로 직접 이동하여 사이드바에서 매뉴얼 및 문서를 선택하여 다운로드할 수 있습니다.
- RPM이 다운로드되면 원격 SCP 프로그램을 사용하여 첫 번째 ECS 노드의 /home/admin 디렉토리에 파일을 업로드합니다.
- 업로드가 완료되면 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 패키지를 각 랙의 첫 번째 노드에 설치해야 합니다. 이러한 기본 랙을 식별하려면 아래 명령을 실행합니다. 이 예에서는 4개의 랙과 4개의 랙 프라이머리가 강조 표시되어 있습니다
- 랙 기본 노드를 찾습니다(아래에서 굵게 강조 표시됨).
명령:
# 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) 백업 또는 검사를 위해 파일에 저장할 수 있습니다.
- 결과를 화면에 인쇄합니다. 비밀번호를 입력하라는 메시지가 나타나면 키를 눌러 계속 진행합니다.
명령:
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
- 결과를 파일에 저장합니다. 비밀번호를 입력하라는 메시지가 나타나면 키를 눌러 계속 진행합니다.
명령:
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 ECS 사용자 인터페이스에서 오류가 발생했습니다. 고객이 VLAN 네트워크를 사용하고있는지 확인하십시오. 를 사용한 분리 getrackinfo -n 명령 1. 이 경우 고객 네트워크의 관리 DNS 이름 및 관리 IP 주소를 모든 노드의 Trust Server List에 추가합니다.
(아래 참조)
예:
# 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>(비밀번호를 입력하라는 메시지가 나타나면 키를 눌러 계속 진행
)본보기:
# 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(비밀번호를 입력하라는 메시지가 나타나면 키를 눌러 계속 진행
)본보기:
# 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
이 변경 사항에 대한 자세한 내용 및 컨텍스트는 Dell Support에서 제공되는 다음 문서를 참조하십시오.
- 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.