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.
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.
Passo | Azione | Scopo |
---|---|---|
1 | Apri DCOM Config: Win + R → dcomcnfg → Component Services › Computers › My Computer › DCOM Config. | Accedere all’elenco delle applicazioni COM/DCOM. |
2 | Individua l’eseguibile del server OPC → tasto destro → Proprietà → scheda General. | Verificare Run application on this computer. |
3 | Scheda Security: Launch and Activation Permissions → Customize → Edit → concedi a utenti/gruppi: Local Launch, Remote Launch, Local Activation, Remote Activation. Access Permissions → Customize → Edit → concedi Local Access, Remote Access. | Autorizzare avvio e accesso locali/remoti. |
4 | Scheda Identity → This user (account di servizio dedicato) o altro account corretto. | Garantire che il servizio giri con un account avente diritti adeguati. |
5 | Authentication level: imposta almeno Connect (meglio Packet Integrity dove possibile). | Evitare “access denied” per livello insufficiente. |
6 | Firewall: 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
- Abilitare DCOM a livello macchina (una tantum)
- In Component Services → Computers → My Computer → tasto destro → Properties.
- 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.
- Scheda COM Security:
- Access Permissions → Edit Limits e Edit Default: verifica che i gruppi o gli account dei client remoti abbiano Remote Access.
- Launch and Activation Permissions → Edit Limits e Edit Default: accertati che i client remoti abbiano Remote Launch/Remote Activation.
- 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.
- Concedere Launch/Activation e Access all’app OPC
- Scheda Security → Launch and Activation Permissions → Customize → Edit → Add i gruppi/utenti client (es. un gruppo AD “OPC Clients”). Concedi:
- Local Launch e Remote Launch
- Local Activation e Remote Activation
- Scheda Security → Access Permissions → Customize → Edit → concedi Local Access e Remote Access.
- Scheda Security → Launch and Activation Permissions → Customize → Edit → Add i gruppi/utenti client (es. un gruppo AD “OPC Clients”). Concedi:
- 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.
- 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.
- 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
- Esegui
OPCEnum.exe
da un client remoto per enumerare i server esposti dal nodo Windows Server 2022. - Se l’enumerazione fallisce immediatamente, controlla: regole firewall, porte RPC, permessi Launch/Activation e Access su OPCEnum e sull’app OPC.
- 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
Componente | Gruppo/Utente | Permessi DCOM | Note |
---|---|---|---|
Server OPC (AppID) | Gruppo AD “OPC Clients” | Remote Launch/Activation, Remote Access | Contiene solo i client autorizzati. |
OPCEnum | Gruppo AD “OPC Clients” | Remote Launch/Activation, Remote Access | Necessario per la navigazione. |
Server OPC (Identity) | Account servizio (dominio/gMSA) | Log on as a service | Privilegi 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
Errore | Likely cause | Azione |
---|---|---|
0x80070005 (Access denied) | Permessi DCOM insufficienti o livello autenticazione troppo basso | Rivedi Launch/Activation/Access; eleva a Packet Integrity/Connect. |
0x800706BA (RPC server unavailable) | Firewall/porte RPC o nome host non raggiungibile | Apri TCP 135 e range; verifica DNS e Test-NetConnection . |
0x80040154 (Class not registered) | Server OPC non registrato o mismatch 32/64 bit | Reinstalla/Registra correttamente; usa versione corretta. |
0x80080005 (Server execution failed) | Identity errata, dipendenze mancanti, permessi file | Imposta 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
- Apri dcomcnfg e abilita DCOM a livello macchina con autenticazione almeno Connect (meglio Packet Integrity).
- 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.
- Configura OPCEnum con gli stessi permessi.
- Riduci l’intervallo RPC e apri in firewall 135 + 6000–6099 (o il range scelto), limitando lo scope agli IP dei client.
- Se necessario, regola
LocalAccountTokenFilterPolicy
. - 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.