Configurare correttamente DCOM per un server OPC Classic su Windows Server 2022

Su Windows Server 2022 molti server OPC Classic smettono di rispondere perché DCOM è più rigido o mal configurato. In questa guida trovi una procedura chiara per allineare sicurezza 2023+, aprire correttamente il firewall, impostare l’account di servizio e verificare il tutto con OPCEnum.

Indice

Quando DCOM blocca un server OPC Classic su Windows Server 2022

OPC Classic si basa su COM/DCOM e RPC. A partire da Windows Server 2022 (e dagli aggiornamenti di sicurezza 2023), DCOM impone livelli di autenticazione più elevati. Se i permessi non sono corretti o le porte RPC non sono raggiungibili, i client OPC non riescono a connettersi, la navigazione dei tag fallisce e spesso compaiono errori come Access denied (0x80070005), RPC server unavailable (0x800706BA), Class not registered (0x80040154) o timeout di enumerazione.

Prerequisiti e buone pratiche

  • Backup: crea un punto di ripristino o esporta chiavi di registro e policy prima di modificare sicurezza DCOM e firewall.
  • Account di servizio dedicato: evita LocalSystem o Interactive User. Usa un account di dominio o un gMSA (se disponibile) con privilegi minimi.
  • Sincronizzazione oraria e DNS: Kerberos richiede tempo sincronizzato e risoluzione DNS corretta (forward e reverse). Nomescambio errati → fallimento DCOM.
  • Patch uniformi: assicurati che tutti i client/server OPC siano aggiornati e supportino il DCOM “rafforzato”.
  • Ambiente di test: applica i cambiamenti in laboratorio prima di portarli in produzione.

Procedura rapida

La tabella seguente sintetizza la soluzione; più sotto trovi i dettagli di ogni passaggio.

PassoAzioneScopo
1Apri DCOM Config: Win + RdcomcnfgComponent Services › Computers › My Computer › DCOM Config.Accedere all’elenco delle applicazioni COM/DCOM.
2Individua l’eseguibile del server OPC → tasto destro → Proprietà → scheda General.Verificare Run application on this computer.
3Scheda Security: Launch and Activation PermissionsCustomizeEdit → concedi a utenti/gruppi: Local Launch, Remote Launch, Local Activation, Remote Activation. Access PermissionsCustomizeEdit → concedi Local Access, Remote Access.Autorizzare avvio e accesso locali/remoti.
4Scheda IdentityThis user (account di servizio dedicato) o altro account corretto.Garantire che il servizio giri con un account avente diritti adeguati.
5Authentication level: imposta almeno Connect (meglio Packet Integrity dove possibile).Evitare “access denied” per livello insufficiente.
6Firewall: apri TCP 135 (RPC Endpoint Mapper) e l’intervallo porte dinamiche RPC (default 49152–65535 o range ridotto via netsh advfirewall).Consentire il traffico DCOM sulla rete.

Configurazione dettagliata in Component Services

  1. Abilitare DCOM a livello macchina (una tantum)
    1. In Component ServicesComputersMy Computer → tasto destro → Properties.
    2. Scheda Default Properties:
      • Spunta Enable Distributed COM on this computer.
      • Default Authentication Level: imposta almeno Connect; per conformità con l’hardening 2023 è consigliato Packet Integrity se tutti i client lo supportano.
      • Default Impersonation Level: tipicamente Identify o Impersonate per OPC Classic.
    3. Scheda COM Security:
      • Access PermissionsEdit Limits e Edit Default: verifica che i gruppi o gli account dei client remoti abbiano Remote Access.
      • Launch and Activation PermissionsEdit Limits e Edit Default: accertati che i client remoti abbiano Remote Launch/Remote Activation.
    Nota: i limiti a livello macchina possono sovrascrivere quelli per-app. Se l’app OPC ha permessi corretti ma i limiti macchina negano l’accesso, la connessione fallirà comunque.
  2. Individuare la voce DCOM del server OPC In DCOM Config cerca il nome del prodotto OPC (o usa il suo AppID/CLSID dalla documentazione). In caso di server sia a 32-bit sia a 64-bit, potresti vedere due voci diverse. Apri Properties e nella scheda General controlla che sia selezionato Run application on this computer.
  3. Concedere Launch/Activation e Access all’app OPC
    1. Scheda SecurityLaunch and Activation PermissionsCustomizeEditAdd i gruppi/utenti client (es. un gruppo AD “OPC Clients”). Concedi:
      • Local Launch e Remote Launch
      • Local Activation e Remote Activation
    2. Scheda SecurityAccess PermissionsCustomizeEdit → concedi Local Access e Remote Access.
    Buona pratica: evita Everyone o Anonymous Logon. Usa gruppi dedicati per tracciare e limitare l’accesso.
  4. Impostare l’Identity del server OPC In scheda Identity seleziona This user e specifica un account di servizio dedicato (di dominio o gMSA). Assicurati che:
    • possa eseguire il login come servizio (Log on as a service),
    • abbia diritti sui file/cartelle del prodotto OPC (cartella di installazione, log, DB),
    • sia autorizzato al database/PLC/dispositivo di campo se richiesto dal vendor.
    Evita Interactive User (richiede un utente loggato alla console) e Launching user (fragile in scenari remoti).
  5. Livello di autenticazione Nella scheda General o Security (a seconda della voce), imposta l’Authentication Level almeno su Connect. Se tutte le parti sono aggiornate, preferisci Packet Integrity per allinearti all’hardening DCOM.
  6. OPCEnum: non dimenticarlo OPCEnum.exe è il servizio di enumerazione dei server OPC Classic: va configurato anch’esso in DCOM (Launch/Activation/Access) e, dove richiesto, in Identity. Se la sua enumerazione fallisce da remoto, quasi sempre è un problema di DCOM o firewall.

Impostazioni firewall e porte RPC

DCOM utilizza RPC con mappatura porta su TCP 135 e un intervallo di porte dinamiche. In ambienti enterprise conviene restringere il range per semplificare le regole.

Regole minime

  • Inbound/Outbound TCP 135 verso/da i client OPC autorizzati (domain profile).
  • Inbound/Outbound porte RPC dinamiche (default TCP 49152–65535) oppure un intervallo statico ristretto.

Definire un intervallo statico di porte RPC

Per restringere a 100 porte a partire dalla 6000:

netsh int ipv4 set dynamicport tcp start=6000 num=100

Questa impostazione richiede un riavvio per essere totalmente applicata. Dopo il reboot, crea regole firewall solo per 6000–6099 (oltre a 135).

Esempi di regole con PowerShell

# Apri l'Endpoint Mapper
New-NetFirewallRule -DisplayName "DCOM RPC EPM In"  -Direction Inbound  -Protocol TCP -LocalPort 135 -Action Allow -Profile Domain
New-NetFirewallRule -DisplayName "DCOM RPC EPM Out" -Direction Outbound -Protocol TCP -RemotePort 135 -Action Allow -Profile Domain

Apri l'intervallo statico (es. 6000-6099)

New-NetFirewallRule -DisplayName "DCOM RPC Range In"  -Direction Inbound  -Protocol TCP -LocalPort 6000-6099 -Action Allow -Profile Domain
New-NetFirewallRule -DisplayName "DCOM RPC Range Out" -Direction Outbound -Protocol TCP -RemotePort 6000-6099 -Action Allow -Profile Domain

Limita lo scope agli IP/segmenti dei client OPC

Esempio: consenti solo dal 10.10.20.0/24

Set-NetFirewallRule -DisplayName "DCOM RPC EPM In"  -RemoteAddress 10.10.20.0/24
Set-NetFirewallRule -DisplayName "DCOM RPC Range In" -RemoteAddress 10.10.20.0/24 

Verifica con Test-NetConnection

Test-NetConnection <server-opc> -Port 135
Test-NetConnection <server-opc> -Port 6000

Se 135 risponde ma il range no, la mappatura RPC avverrà ma la sessione DCOM fallirà all’apertura della porta dinamica.

Hardening DCOM Microsoft (CVE-2021-26414)

Dal 14 marzo 2023 l’hardening DCOM è in enforcement. Su Windows Server 2022 non è più disponibile la chiave di rollback: i client non aggiornati possono fallire l’attivazione remota o l’accesso. Contromisure pratiche:

  • Aggiorna tutti i nodi OPC (server e client) alle patch più recenti.
  • Imposta, dove possibile, il livello di autenticazione su Packet Integrity (o lascia Default se a livello macchina è impostato coerentemente).
  • Evita workaround che abbassano la sicurezza (Anonymous, Everyone, disabilitazioni varie).

Se un client legacy continua a fallire, convalida con un tool di test recente. In molti casi problemi attribuiti al vendor OPC derivano da client non aggiornati che non supportano l’hardening.

UAC Remote Restrictions

In domini o in workgroup con account locali, l’UAC può limitare i token degli amministratori remoti. Se devi consentire l’accesso remoto a un account locale (non consigliato in produzione), puoi valutare il seguente parametro:

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\LocalAccountTokenFilterPolicy = 1 (DWORD)

Attenzione: questa impostazione riduce la protezione UAC per gli account locali. Preferisci account di dominio con diritti dedicati.

Verifica con OPCEnum

  1. Esegui OPCEnum.exe da un client remoto per enumerare i server esposti dal nodo Windows Server 2022.
  2. Se l’enumerazione fallisce immediatamente, controlla: regole firewall, porte RPC, permessi Launch/Activation e Access su OPCEnum e sull’app OPC.
  3. Se l’enumerazione riesce ma la connessione al server specifico fallisce, verifica i permessi sull’AppID del server OPC e il suo Authentication Level.

Scenario a 32-bit e 64-bit

Molti server OPC Classic sono a 32-bit e girano su host a 64-bit in WOW64. Attenzione a:

  • Voci DCOM distinte: potresti vedere istanze separate per 32/64 bit.
  • OPCEnum doppio: esistono versioni a 32 e a 64 bit; verifica di configurare quella usata dai tuoi client.
  • Registrazioni COM: errori Class not registered derivano da registrazioni a 32-bit non reperite dai client a 64-bit (o viceversa).

Impostazioni di sicurezza a livello macchina

Oltre ai permessi per-app, controlla le impostazioni globali COM Security (Component Services → My Computer → Properties → COM Security):

  • Edit Limits (Access/Launch): i limiti possono bloccare l’accesso anche se i permessi per-app sono corretti.
  • Edit Default: utile per dare una base coerente a tutte le applicazioni COM se non sono sovrascritte.
  • Protocollo: assicurati che “Connection-oriented TCP/IP” sia presente in Default Protocols.

Tabella di mappatura ruoli consigliata

ComponenteGruppo/UtentePermessi DCOMNote
Server OPC (AppID)Gruppo AD “OPC Clients”Remote Launch/Activation, Remote AccessContiene solo i client autorizzati.
OPCEnumGruppo AD “OPC Clients”Remote Launch/Activation, Remote AccessNecessario per la navigazione.
Server OPC (Identity)Account servizio (dominio/gMSA)Log on as a servicePrivilegi minimi su file/log/DB.

Diagnostica e risoluzione dei problemi

Event Viewer

  • System e Application: cerca DCOM, RPC, errori con ID evento tipo 10016/10028/10010.
  • Security: eventuali Audit Failure possono rivelare SID senza diritti.

Codici di errore comuni e significato

ErroreLikely causeAzione
0x80070005 (Access denied)Permessi DCOM insufficienti o livello autenticazione troppo bassoRivedi Launch/Activation/Access; eleva a Packet Integrity/Connect.
0x800706BA (RPC server unavailable)Firewall/porte RPC o nome host non raggiungibileApri TCP 135 e range; verifica DNS e Test-NetConnection.
0x80040154 (Class not registered)Server OPC non registrato o mismatch 32/64 bitReinstalla/Registra correttamente; usa versione corretta.
0x80080005 (Server execution failed)Identity errata, dipendenze mancanti, permessi fileImposta This user, verifica diritti e dipendenze.

Controlli rapidi con PowerShell

# Verifica porte locali aperte
Get-NetTCPConnection -LocalPort 135,6000..6099 | Where-Object {$_.State -eq "Listen"}

Elenco regole firewall legate a RPC/DCOM

Get-NetFirewallRule | Where-Object DisplayName -Match "DCOM|RPC"

Raggiungibilità dal client

Test-NetConnection  -Port 135
Test-NetConnection  -Port 6000 

Workgroup, dominio e UAC: differenze operative

  • Dominio: preferibile; usa gruppi AD per OPC Clients e un account di servizio di dominio (o gMSA). Kerberos semplifica l’autenticazione.
  • Workgroup: usa account locali identici (nome/password) su client e server; spesso serve LocalAccountTokenFilterPolicy=1; valuta rischi di sicurezza.

OPC UA e migrazione

La domanda riguarda OPC Classic, ma molti ambienti stanno migrando a OPC UA. Ricorda che UA si basa su certificati X.509, richiede la distribuzione e la fiducia reciproca dei certificati tra server e client, e porte dedicate (ad es. 4840 o HTTPS secondo configurazione). Se stai pianificando la migrazione:

  • Definisci una PKI (CA interna) o un processo di firma certificati.
  • Automatizza la distribuzione dei certificati ai client.
  • Allinea il firewall alle porte UA effettive.

Checklist operativa

  • DCOM abilitato a livello macchina; Default Authentication coerente (meglio Packet Integrity se supportato).
  • Server OPC e OPCEnum con Launch/Activation/Access completi per i gruppi corretti.
  • Identity impostata su This user con account di servizio dedicato e diritti minimi.
  • Firewall: TCP 135 + range dinamico aperti inbound/outbound verso/da i soli client autorizzati.
  • Porte RPC ristrette (es. 6000–6099) e riavvio effettuato dopo netsh int ipv4 set dynamicport ....
  • UAC Remote Restrictions valutate; preferisci account di dominio.
  • Patch 2023+ installate su tutti i nodi; client legacy adeguati all’hardening DCOM.
  • Test con OPCEnum.exe dal client: enumerazione e connessione OK.
  • Event Viewer pulito da errori DCOM/RPC ricorrenti.

Esempio di procedura end‑to‑end riassunta

  1. Apri dcomcnfg e abilita DCOM a livello macchina con autenticazione almeno Connect (meglio Packet Integrity).
  2. Trova la voce DCOM del tuo server OPC e imposta:
    • Identity = This user (account di servizio).
    • Launch/Activation/Access = consenti Local/Remote ai gruppi dei client.
  3. Configura OPCEnum con gli stessi permessi.
  4. Riduci l’intervallo RPC e apri in firewall 135 + 6000–6099 (o il range scelto), limitando lo scope agli IP dei client.
  5. Se necessario, regola LocalAccountTokenFilterPolicy.
  6. Riavvia il server (o almeno i servizi interessati) e testa con OPCEnum.exe da remoto.

Domande frequenti

Serve davvero Remote Activation? Sì: senza attivazione remota l’oggetto COM del server OPC non può essere creato dal client.

Perché aprire anche l’outbound sul server? DCOM stabilisce connessioni bidirezionali sulle porte assegnate dinamicamente; bloccare l’uscita può interrompere la sessione.

Posso usare solo 135 senza range? No. 135 serve a negoziare la porta finale; la sessione dati DCOM userà una porta dinamica nel range.

“Default” o “Per‑application”? Impostazioni Default aiutano, ma per certezze e auditing usa Customize per l’AppID del server OPC e per OPCEnum.

Conclusioni e punti chiave

  • Punto critico: assegna correttamente Launch/Activation e Access all’account/gruppo usato dal servizio OPC e dai client.
  • Firewall: apri TCP 135 e un range RPC limitato e controllato su entrambi i lati (server e client), preferibilmente ristretto e con scope IP.
  • Hardening 2023: l’hardening DCOM è obbligatorio su Windows Server 2022; aggiorna i client per supportarlo e prediligi Packet Integrity.
  • OPCEnum: se la sua enumerazione remota fallisce, il problema è quasi sempre DCOM/firewall.

Seguendo i passi sopra e verificando le integrazioni suggerite, un’installazione OPC Classic su Windows Server 2022 può comunicare in modo affidabile e conforme alle regole di sicurezza più recenti.


Appendice: script di base per preparare un server

# 1) Riduci l'intervallo di porte RPC (riavvio richiesto)
netsh int ipv4 set dynamicport tcp start=6000 num=100

2) Apri le porte in Windows Defender Firewall (profilo Domain)

New-NetFirewallRule -DisplayName "DCOM RPC EPM In"  -Direction Inbound  -Protocol TCP -LocalPort 135 -Action Allow -Profile Domain
New-NetFirewallRule -DisplayName "DCOM RPC EPM Out" -Direction Outbound -Protocol TCP -RemotePort 135 -Action Allow -Profile Domain
New-NetFirewallRule -DisplayName "DCOM RPC Range In"  -Direction Inbound  -Protocol TCP -LocalPort 6000-6099 -Action Allow -Profile Domain
New-NetFirewallRule -DisplayName "DCOM RPC Range Out" -Direction Outbound -Protocol TCP -RemotePort 6000-6099 -Action Allow -Profile Domain

3) (Opzionale) Limita lo scope agli IP client

Set-NetFirewallRule -DisplayName "DCOM RPC EPM In"  -RemoteAddress 10.10.20.0/24
Set-NetFirewallRule -DisplayName "DCOM RPC Range In" -RemoteAddress 10.10.20.0/24

4) Verifica raggiungibilità

Test-NetConnection  -Port 135
Test-NetConnection  -Port 6000 

Appendice: promemoria impostazioni DCOM per l’app OPC

  • Identity = This user (account di servizio, password gestita).
  • Launch and Activation = Local/Remote Launch + Local/Remote Activation per i gruppi di client.
  • Access = Local/Remote Access per i gruppi di client.
  • Authentication Level = almeno Connect; preferibile Packet Integrity.

Nota finale per i team di sicurezza: documenta i gruppi AD autorizzati, gli IP/segmenti consentiti dal firewall, il range RPC, l’account di servizio e il proprietario applicativo. Queste informazioni accelerano audit, incident response e futuri change.

Indice