7. Management Target Translation in Proxy Forwarder Applications
Le applicazioni proxy forwarder eseguono la traduzione dei management target quando inoltrano messaggi SNMP. Questa traduzione implica il mapping dei parametri del messaggio in entrata (contextEngineID, contextName, securityModel, securityName, securityLevel) a parametri del messaggio in uscita adatti al motore SNMP target.
La snmpProxyTable definisce le regole di traduzione utilizzate dai proxy forwarder.
7.1. Request Forwarding
Il request forwarding implica la ricezione di una richiesta di comando da un command generator, la traduzione dei parametri della richiesta e l'inoltro della richiesta a un command responder.
7.1.1. Processamento di una Richiesta in Entrata
Quando un proxy forwarder riceve una richiesta:
-
Estrae i parametri in entrata dal messaggio ricevuto:
- contextEngineID
- contextName
- securityModel
- securityName
- securityLevel
- Tipo di PDU
-
Cerca in snmpProxyTable utilizzando questi parametri come chiave. Cerca specificamente una voce dove:
- snmpProxyType è read(1) per PDU di classe read (Get, GetNext, GetBulk) o write(2) per PDU di classe write (Set)
- snmpProxyContextEngineID corrisponde al contextEngineID in entrata
- snmpProxyContextName corrisponde al contextName in entrata
- snmpProxyTargetParamsIn riferisce parametri target che corrispondono ai parametri di sicurezza in entrata
-
Se non viene trovata alcuna voce corrispondente:
- Genera una risposta di errore indicando che la richiesta non può essere inoltrata.
- L'errore specifico dipende dalla versione SNMP e dalle circostanze (ad es. authorizationError, genErr).
-
Se viene trovata una voce corrispondente:
- Estrae il valore snmpProxySingleTargetOut o snmpProxyMultipleTargetOut.
7.1.2. Inoltro della Richiesta
Dopo aver trovato una voce snmpProxyTable corrispondente:
Inoltro a Target Singolo
Se snmpProxySingleTargetOut è specificato:
-
Cerca in snmpTargetAddrTable utilizzando snmpProxySingleTargetOut come snmpTargetAddrName.
-
Estrae le informazioni dell'indirizzo target:
- snmpTargetAddrTDomain (dominio di trasporto)
- snmpTargetAddrTAddress (indirizzo di trasporto)
- snmpTargetAddrParams (riferimento a snmpTargetParamsTable)
-
Cerca in snmpTargetParamsTable utilizzando snmpTargetAddrParams.
-
Estrae i parametri di sicurezza target:
- snmpTargetParamsMPModel (message processing model)
- snmpTargetParamsSecurityModel
- snmpTargetParamsSecurityName
- snmpTargetParamsSecurityLevel
-
Determina il contesto target:
- Se snmpProxyContextEngineID è vuoto, utilizza il contextEngineID in entrata.
- Altrimenti, utilizza snmpProxyContextEngineID.
- Similmente per snmpProxyContextName.
-
Traduce la PDU se necessario:
- Se le versioni SNMP in entrata e in uscita differiscono, traduce il formato PDU e i codici di errore.
- Per SNMPv1 a SNMPv2: Mappa i codici di errore, converte i formati trap.
- Per SNMPv2 a SNMPv1: Mappa i codici di errore (ad es. noAccess → genErr), gestisce i valori di eccezione.
-
Inoltra la richiesta utilizzando la primitiva send PDU del sottosistema di processamento dei messaggi con i parametri target.
Inoltro a Target Multipli
Se snmpProxyMultipleTargetOut è specificato:
-
Cerca in snmpTargetAddrTable tutte le voci dove snmpTargetAddrTagList contiene il tag specificato in snmpProxyMultipleTargetOut.
-
Per ogni indirizzo target corrispondente:
- Segue i passi 2-7 dell'inoltro a target singolo.
- Nota che la richiesta originale è duplicata e inviata a più indirizzi target.
-
Gestione della risposta per target multipli:
- L'inoltro a target multipli è tipicamente utilizzato solo per operazioni di lettura.
- Il proxy potrebbe dover aggregare le risposte o restituire la prima risposta riuscita.
- Il comportamento specifico è dipendente dall'implementazione.
7.1.3. Inoltro della Risposta
Quando il proxy forwarder riceve una risposta dal command responder target:
-
Traduce la PDU di risposta se necessario per corrispondere al formato atteso dal richiedente originale.
-
Mappa il contextEngineID e contextName ai valori attesi dal richiedente originale.
-
Restituisce la risposta utilizzando la primitiva return response PDU del sottosistema di processamento dei messaggi.
7.2. Notification Forwarding
Il notification forwarding implica la ricezione di una notifica da un notification originator e il suo inoltro a uno o più notification receiver.
7.2.1. Processamento di una Notifica in Entrata
Quando un proxy forwarder riceve una notifica:
-
Estrae i parametri in entrata:
- contextEngineID
- contextName
- securityModel
- securityName
- securityLevel
- Tipo di notifica (trap o inform)
-
Cerca in snmpProxyTable utilizzando questi parametri. Cerca una voce dove:
- snmpProxyType è trap(3) per notifiche trap o inform(4) per notifiche inform
- snmpProxyContextEngineID corrisponde al contextEngineID in entrata (o è vuoto per corrispondere a qualsiasi)
- snmpProxyContextName corrisponde al contextName in entrata (o è vuoto per corrispondere a qualsiasi)
- snmpProxyTargetParamsIn riferisce parametri target che corrispondono ai parametri di sicurezza in entrata (o è vuoto per corrispondere a qualsiasi)
-
Se non viene trovata alcuna voce corrispondente:
- La notifica non viene inoltrata.
- Il proxy può registrare questo evento localmente.
-
Se viene trovata una voce corrispondente:
- Estrae il valore snmpProxyMultipleTargetOut (l'inoltro delle notifiche usa sempre l'inoltro a target multipli).
7.2.2. Inoltro della Notifica
Dopo aver trovato una voce snmpProxyTable corrispondente:
-
Cerca in snmpTargetAddrTable tutte le voci dove snmpTargetAddrTagList contiene il tag specificato in snmpProxyMultipleTargetOut.
-
Per ogni indirizzo target corrispondente:
a. Cerca snmpTargetAddrParams in snmpTargetParamsTable.
b. Estrae i parametri target.
c. Determina se inviare come trap o inform basandosi su snmpNotifyTable (se riferita) o utilizza lo stesso tipo della notifica in entrata.
d. Traduce la PDU di notifica se necessario:
- Trap SNMPv1 a trap SNMPv2: Converte formato PDU, aggiunge sysUpTime.0 e snmpTrapOID.0.
- Trap SNMPv2 a trap SNMPv1: Converte formato PDU, estrae enterprise, agent-addr, generic-trap, specific-trap.
e. Inoltra la notifica utilizzando la primitiva send PDU del sottosistema di processamento dei messaggi.
-
Se la notifica in uscita è un inform request:
- Attende una risposta da ogni target.
- Se la notifica in entrata era anche un inform, aggrega le risposte.
- Restituisce una risposta al notification originator originale solo dopo aver ricevuto risposte da tutti (o un sottoinsieme configurato di) target.
Esempi di Traduzione
Esempio 1: Traduzione di Richiesta SNMPv3 a SNMPv1
Richiesta in Entrata:
- contextEngineID: 0x80001F8880
- contextName: "publicView"
- securityModel: 3 (USM)
- securityName: "admin"
- securityLevel: authPriv
- PDU: GetRequest
Voce snmpProxyTable:
- snmpProxyType: read(1)
- snmpProxyContextEngineID: 0x80001F8880
- snmpProxyContextName: "publicView"
- snmpProxyTargetParamsIn: "snmpv3Params"
- snmpProxySingleTargetOut: "legacyDevice"
Voce snmpTargetAddrTable (legacyDevice):
- snmpTargetAddrTDomain: snmpUDPDomain
- snmpTargetAddrTAddress: 192.0.2.10:161
- snmpTargetAddrParams: "snmpv1Params"
Voce snmpTargetParamsTable (snmpv1Params):
- snmpTargetParamsMPModel: 0 (SNMPv1)
- snmpTargetParamsSecurityModel: 1 (SNMPv1)
- snmpTargetParamsSecurityName: "public"
- snmpTargetParamsSecurityLevel: noAuthNoPriv
Richiesta in Uscita:
- Trasporto: UDP a 192.0.2.10:161
- Versione SNMP: SNMPv1
- Community: "public"
- PDU: GetRequest (stessi variable-binding)
Traduzione della Risposta:
- La risposta SNMPv1 in entrata viene ritradotta in formato SNMPv3.
- La risposta viene crittografata e autenticata utilizzando USM.
- Restituita al richiedente originale.
Esempio 2: Traduzione di Trap SNMPv1 a Trap SNMPv2
Trap SNMPv1 in Entrata:
- Community: "public"
- enterprise: 1.3.6.1.4.1.9
- agent-addr: 192.0.2.1
- generic-trap: linkDown(2)
- specific-trap: 0
- time-stamp: 12345
Voce snmpProxyTable:
- snmpProxyType: trap(3)
- snmpProxyContextEngineID: "" (corrisponde a qualsiasi)
- snmpProxyContextName: "" (corrisponde a qualsiasi)
- snmpProxyTargetParamsIn: "" (corrisponde a qualsiasi)
- snmpProxyMultipleTargetOut: "snmpv2Targets"
Voci snmpTargetAddrTable con tag "snmpv2Targets": Più voci con parametri SNMPv2c o SNMPv3.
Trap SNMPv2/v3 in Uscita:
- snmpTrapOID.0: 1.3.6.1.6.3.1.1.5.3 (linkDown)
- sysUpTime.0: 12345
- Variable-binding aggiuntivi dal trap originale.
Considerazioni Speciali
Traduzione di Contesto
La snmpProxyTable permette la traduzione di contesto:
- Un snmpProxyContextEngineID o snmpProxyContextName vuoto nella voce di tabella significa "utilizza il valore in entrata."
- Un valore non vuoto significa "mappa il contesto in entrata a questo contesto in uscita."
Questo permette al proxy di mappare più contesti in entrata a un singolo contesto in uscita, o viceversa.
Prevenzione della Degradazione di Sicurezza
Quando si traduce da un livello di sicurezza superiore a uno inferiore (ad es. SNMPv3 authPriv a SNMPv1 noAuthNoPriv), il proxy dovrebbe:
- Registrare la degradazione di sicurezza per scopi di audit.
- Applicare controlli degli accessi aggiuntivi per limitare quali operazioni possono essere degradate.
- Considerare di crittografare il trasporto (ad es. utilizzando IPsec o TLS) per compensare la sicurezza ridotta a livello SNMP.
Gestione degli Errori
I proxy devono gestire gli errori con attenzione:
- Errori di Traduzione: Se una PDU non può essere tradotta (ad es. valori di eccezione SNMPv2 in SNMPv1), restituisce un errore appropriato.
- Errori di Inoltro: Se il target è irraggiungibile, restituisce un timeout o errore di rete al richiedente originale.
- Errori di Traduzione della Risposta: Se una risposta non può essere ritradotta, registra l'errore e restituisce un genErr al richiedente originale.
Ottimizzazione delle Performance
L'inoltro proxy può essere ottimizzato:
- Caching delle ricerche di tabella: Cache le ricerche di snmpProxyTable, snmpTargetAddrTable e snmpTargetParamsTable per percorsi utilizzati frequentemente.
- Pre-compilazione delle regole: Converte le voci di tabella in un formato interno ottimizzato al momento della configurazione.
- Connection pooling: Per il trasporto basato su TCP, mantiene connessioni persistenti ai target acceduti frequentemente.