본문 바로가기

Security

Unable to access to web client due to discrepancy between config store database and configuration xml file

[문제 증상]

ESXi Host 재부팅 이 후 Web Client 접속 실패

동일한 ESXi Host에 SSH는 접근 가능

 

[분석 내용]

- 알 수 없는 시점에 vSphereClient Firewall Rule을 변경(이번 경우는 허용 가능한 IP를 추가)한 후 ESXi Host를 재부팅 할 때, Configuration 정보가 저장된 Config Store Database를 우선 확인하게 됩니다.

- 이 때, Config Store Database에 vSphereClient 관련 Firewall Rule 정보가 존재하는 경우 Configuration 정보가 있는 XML 파일에 설정된 값을 이용하지 않는 Bug가 있습니다.

- 이번 상황도 XML 파일에는 "enabled" flag가 true로 되어 있었지만, Config Store Database에 vSphereClient의 Firewall Rule이 정의되어 있었기 때문에 해당 flag는 무시되었습니다.

- 결과적으로 Config Store Database에 설정된 flag를 읽어야 하는데, Config Store Database에는 "enabled" flag가 true로 되어 있지 않아 부팅되는 과정에서 해당 Rule은 false로 처리되었습니다.

- 수정된 Code 에서는 Config Store Database에 "enabled" flag가 설정되어 있지 않다면, Configuration XML을 추가로 참고하는 것으로 변경되었습니다.

 

[해결 방안]

1. 동일 문제가 발생할 시 다음과 같은 명령어로 Rule을 활성화하는 Workaround를 사용하실 수 있습니다.

# esxcli network firewall ruleset set --ruleset-id vSphereClient --enabled true

 

2. 해당 증상은 KB84192에 기술된 대로 7.0U3에서 해결된 것으로 확인됩니다. 필요하신 경우 7.0U3 이상으로 업데이트를 하시어 문제를 예방하실 수 있습니다.

 

[분석 로그]

1. Web Client 접속 시 Client와 Server(Server는 VMKernel Interface)에서 Packet 수집

- Client에서 TCP 3-way handshake의 일환으로 Syn flag packet 전달

708 07:13:31.488099 <client>  <server>  TCP 66  52029 → 443 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 WS=256 SACK_PERM=1
709 07:13:31.495901 <client>  <server>  TCP 66  52030 → 443 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 WS=256 SACK_PERM=1
719 07:13:31.749485 <client>  <server>  TCP 66  52031 → 443 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 WS=256 SACK_PERM=1

 

- Server에서 Syn flag packet 수신은 확인되나, Server가 이에 대한 응답으로 Syn/Ack를 보내지 않음

87  07:13:31.483951 <client>  <server>  TCP 66  52029 → 443 [SYN] Seq=0 Win=64240 Len=0 MSS=1340 WS=256 SACK_PERM=1
88  07:13:31.491890 <client>  <server>  TCP 66  52030 → 443 [SYN] Seq=0 Win=64240 Len=0 MSS=1340 WS=256 SACK_PERM=1
91  07:13:31.746993 <client>  <server>  TCP 66  52031 → 443 [SYN] Seq=0 Win=64240 Len=0 MSS=1340 WS=256 SACK_PERM=1

 

2. 문제가 발생하는 ESXi Host의 Firewall Rule 확인

- vSphereClient ruleset이 false로 되어 있음

# esxcli network firewall ruleset list
Name                         Enabled
---------------------------  -------
sshServer                       true
sshClient                      false
nfsClient                      false
nfs41Client                    false
dhcp                            true
dns                             true
snmp                            true
ntpClient                       true
CIMHttpServer                   true
CIMHttpsServer                  true
CIMSLP                          true
iSCSI                          false
vpxHeartbeats                   true
updateManager                   true
faultTolerance                  true
webAccess                      false
vMotion                         true
vSphereClient                  false ### <--
activeDirectoryAll             false
NFC                             true
HBR                             true
ftpClient                      false
httpClient                     false
gdbserver                      false
DVFilter                       false
DHCPv6                         false
DVSSync                         true
syslog                         false
WOL                             true
vSPC                           false
remoteSerialPort               false
rdt                            false
cmmds                          false
ipfam                          false
vvold                          false
iofiltervp                      true
esxupdate                      false
vit                            false
vsanEncryption                 false
pvrdma                         false
vic-engine                     false
etcdClientComm                 false
etcdPeerComm                   false
settingsd                      false
vdfs                           false
gstored                        false
trusted-infrastructure-kmxd    false
iwarp-pm                       false
ptpd                           false
trusted-infrastructure-kmxa     true
nvmetcp                        false
vsanhealth-unicasttest         false

 

3. vobd 로그 확인 시, 2/22일자에 부팅 확인

2023-02-22T07:27:57.965Z: [GenericCorrelator] 3549959302us: [vob.user.dcui.shutdown.host] Shutting down host
2023-02-22T07:27:57.965Z: [UserLevelCorrelator] 3549959302us: [vob.user.dcui.shutdown.host] Shutting down host
2023-02-22T07:27:57.965Z: [UserLevelCorrelator] 3549959536us: [esx.audit.dcui.host.shutdown] The host is being shutdown through Direct Console User Interface(DCUI). Please consult ESXi Embedded and vCenter Server Setup Guide or follow the Ask VMware link for more information.
2023-02-22T07:27:58.413Z: [UserLevelCorrelator] 3550407502us: [vob.user.host.stop.shutdown] Host is shutting down.
2023-02-22T07:27:58.413Z: [GenericCorrelator] 3550407502us: [vob.user.host.stop.shutdown] Host is shutting down.
2023-02-22T07:27:58.413Z: [UserLevelCorrelator] 3550407697us: [esx.audit.host.stop.shutdown] Host is shutting down.

 

4. vobd 로그 확인 시, Firewall ruleset 특이 사항 확인

- "vSphereClient" ruleset에 대해 다른 ruleset과 달리 "addIP4" operation이 적용되는 것을 확인

2023-02-22T07:32:37.060Z: [netCorrelator] 45031349us: [vob.net.firewall.config.changed] Firewall configuration has changed. Operation 'add' for rule set vSphereClient succeeded.
2023-02-22T07:32:37.060Z: [netCorrelator] 45034540us: [esx.audit.net.firewall.config.changed] Firewall configuration has changed. Operation 'add' for rule set vSphereClient succeeded.
2023-02-22T07:32:37.060Z: [netCorrelator] 45031354us: [vob.net.firewall.config.changed] Firewall configuration has changed. Operation 'noallowall' for rule set vSphereClient succeeded.
2023-02-22T07:32:37.060Z: [netCorrelator] 45034576us: [esx.audit.net.firewall.config.changed] Firewall configuration has changed. Operation 'noallowall' for rule set vSphereClient succeeded.
2023-02-22T07:32:37.060Z: [netCorrelator] 45031413us: [vob.net.firewall.config.changed] Firewall configuration has changed. Operation 'addIP4' for rule set vSphereClient succeeded.

 

5. hostd 로그를 보면, 재부팅 이전에 "vSphereClient" Firewall ruleset이 변경된 것을 확인

2023-02-22T06:12:20.048Z info hostd[2100743] [Originator@6876 sub=Hostsvc.VmkVprobSource] VmkVprobSource::Post event: (vim.event.EventEx) {
-->    key = 222,
-->    chainId = 1552256912,
-->    createdTime = "1970-01-01T00:00:00Z",
-->    userName = "",
-->    host = (vim.event.HostEventArgument) {
-->       name = "<esxi hostname>",
-->       host = 'vim.HostSystem:ha-host'
-->    },
-->    eventTypeId = "esx.audit.net.firewall.config.changed",
-->    arguments = (vmodl.KeyAnyValue) [
-->       (vmodl.KeyAnyValue) {
-->          key = "1",
-->          value = "add"
-->       },
-->       (vmodl.KeyAnyValue) {
-->          key = "2",
-->          value = "vSphereClient"
-->       }
-->    ],
-->    objectId = "ha-host",
-->    objectType = "vim.HostSystem",
--> }

 

6. Firewall vSphere Ruleset 관련 Service XML 확인

- XML 파일을 보면 enabled flag가 true로 되어 있음

/etc/vmware/firewall/service.xml

<service id='0017'>
  <id>vSphereClient</id>
  <rule id='0000'>
    <direction>inbound</direction>
    <protocol>tcp</protocol>
    <porttype>dst</porttype>
    <port>902</port>
  </rule>
  <rule id='0001'>
    <direction>inbound</direction>
    <protocol>tcp</protocol>
    <porttype>dst</porttype>
    <port>443</port>
  </rule>
  <enabled>true</enabled> ### <--
  <required>true</required>
</service>

 

7. Config Store Database를 보면, vSphereClient Firewall ruleset에 여러 허용 가능한 IP Address는 설정되어 있으나, enabled 값이 정의되어 있지 않음

[
   {
      "name": "CIMHttpServer",
      "num_clients": 0,
      "enabled": true
   },
   {
      "name": "CIMHttpsServer",
      "num_clients": 0,
      "enabled": true
   },
   {
      "name": "DHCPv6",
      "enabled": false,
      "num_clients": 0
   },
   {
      "name": "iofiltervp",
      "enabled": true
   },
   {
      "name": "ntpClient",
      "num_clients": 0,
      "enabled": true
   },

<snip>

   {
      "name": "trusted-infrastructure-kmxa",
      "enabled": true,
      "allow_all_ip": false
   },
   {
      "name": "vSphereClient",
      "allowed_ips": [
         {
            "address": "xxx.xxx.xxx.xxx"
         },
         {
            "address": "xxx.xxx.xxx.xxx"
         },
         {
            "address": "xxx.xxx.xxx.xxx"
         },

<snip>

      ],
      "allow_all_ip": false
   },
   {
      "name": "vpxHeartbeats",
      "num_clients": 0,
      "enabled": true
   },

<snip>

]

 

'Security' 카테고리의 다른 글

TPM 구성 테스트  (0) 2023.07.18
TPM Overview  (0) 2023.07.18
Configure vCenter Server Identity Provider Federation for AD FS  (0) 2023.04.23
Use ADFS as Identity Provider for vCenter  (0) 2023.04.02
Active Directory - Kerberos  (0) 2022.09.12