6. Notification Filtering
Il filtraggio delle notifiche fornisce un meccanismo per inviare selettivamente notifiche ai management target in base al contenuto della notifica. Questo permette un controllo granulare su quali management target ricevono quali tipi di notifiche.
Il filtraggio delle notifiche utilizza tre tabelle MIB:
- snmpNotifyFilterProfileTable: Associa un nome di profilo di filtro con un insieme di parametri target.
- snmpNotifyFilterTable: Definisce le regole di filtro effettive basate sul contenuto della notifica.
- snmpTargetParamsTable: Contiene i nomi dei parametri target riferiti dalla tabella del profilo di filtro.
Algoritmo di Processamento del Filtro
Quando un notification originator genera una notifica per un management target, applica il filtraggio delle notifiche come segue:
-
Recupera il nome dei parametri target dall'oggetto snmpTargetAddrParams per il management target.
-
Cerca il profilo di filtro in snmpNotifyFilterProfileTable utilizzando il nome dei parametri target come indice.
-
Se non viene trovato alcun profilo di filtro, la notifica viene inviata (nessun filtraggio viene applicato).
-
Se viene trovato un profilo di filtro, snmpNotifyFilterProfileName identifica un insieme di voci di filtro in snmpNotifyFilterTable.
-
Per ogni variable-binding nella notifica:
a. Cerca snmpNotifyFilterTable per le voci che corrispondono al nome del profilo di filtro.
b. Le voci vengono processate in ordine lessicografico dei loro indici.
c. Per ogni voce di filtro, controlla se il sottoalbero specificato da snmpNotifyFilterSubtree corrisponde all'identificatore di oggetto della variabile.
d. Si verifica una corrispondenza se l'OID della variabile è all'interno o uguale al sottoalbero del filtro, considerando snmpNotifyFilterMask se specificato.
e. Se viene trovata una corrispondenza:
- Se snmpNotifyFilterType è included(1), continua a controllare altre variabili.
- Se snmpNotifyFilterType è excluded(2), non invia la notifica a questo management target.
f. Se non viene trovata alcuna corrispondenza per una variabile dopo aver controllato tutte le voci di filtro, non invia la notifica.
-
Se tutti i variable-binding passano il filtro, invia la notifica al management target.
Semantica della Maschera di Filtro
L'oggetto snmpNotifyFilterMask fornisce un controllo a livello di bit sul matching del sottoalbero. È una maschera di bit con la seguente semantica:
- Ogni ottetto nella maschera corrisponde a un sotto-identificatore nell'OID del sottoalbero del filtro.
- Ogni bit in un ottetto corrisponde a un bit nel sotto-identificatore.
- Se un bit nella maschera è 1, il bit corrispondente nel sotto-identificatore deve corrispondere all'OID della variabile.
- Se un bit nella maschera è 0, il bit corrispondente nel sotto-identificatore viene ignorato (wildcard).
Una maschera di lunghezza zero (predefinita) significa che tutti i sotto-identificatori devono corrispondere esattamente.
Esempio di Uso della Maschera:
Sottoalbero del Filtro: 1.3.6.1.2.1.2.2.1.8
Maschera: 0xFF.0xFF.0xFF.0xFF.0xFF.0xFF.0xFF.0xFF.0xFE
Questa maschera permette il matching sia di 1.3.6.1.2.1.2.2.1.8 (ifOperStatus) che di 1.3.6.1.2.1.2.2.1.9 (ifLastChange), perché l'ultimo bit del sotto-identificatore finale è wildcard.
Esempi di Configurazione
Esempio 1: Invio di Tutte le Notifiche a un Management Target
Per inviare tutte le notifiche a un management target senza filtraggio:
- Non creare una voce in snmpNotifyFilterProfileTable per il nome dei parametri del target.
OPPURE
- Creare un profilo di filtro con un singolo filtro inclusivo:
- snmpNotifyFilterSubtree: 1 (o qualsiasi OID radice)
- snmpNotifyFilterMask: "" (vuoto)
- snmpNotifyFilterType: included(1)
Esempio 2: Invio Solo di Notifiche Relative alle Interfacce
Per inviare solo notifiche relative alle interfacce (ifTable):
Voce snmpNotifyFilterProfileTable:
- snmpNotifyFilterProfileName: "interfaceFilter"
- Associato al nome dei parametri target: "stationAParams"
Voci snmpNotifyFilterTable:
Voce 1:
- snmpNotifyFilterProfileName: "interfaceFilter"
- snmpNotifyFilterSubtree: 1.3.6.1.2.1.2
- snmpNotifyFilterMask: ""
- snmpNotifyFilterType: included(1)
Questa configurazione permette l'invio di notifiche contenenti variabili dal gruppo interfaces (1.3.6.1.2.1.2), mentre filtra tutte le altre notifiche.
Esempio 3: Esclusione di Notifiche Specifiche
Per inviare tutte le notifiche eccetto quelle relative alla tabella di connessione TCP:
Voce snmpNotifyFilterProfileTable:
- snmpNotifyFilterProfileName: "noTcpConnections"
- Associato al nome dei parametri target: "stationBParams"
Voci snmpNotifyFilterTable:
Voce 1:
- snmpNotifyFilterProfileName: "noTcpConnections"
- snmpNotifyFilterSubtree: 1
- snmpNotifyFilterMask: ""
- snmpNotifyFilterType: included(1)
Voce 2:
- snmpNotifyFilterProfileName: "noTcpConnections"
- snmpNotifyFilterSubtree: 1.3.6.1.2.1.6.13
- snmpNotifyFilterMask: ""
- snmpNotifyFilterType: excluded(2)
Questa configurazione include tutte le notifiche (Voce 1), ma esclude esplicitamente quelle contenenti variabili da tcpConnTable (Voce 2).
Considerazioni di Implementazione
Performance
Il filtraggio delle notifiche richiede confronti di OID per ogni variable-binding contro potenzialmente più voci di filtro. Le implementazioni dovrebbero ottimizzare questo processo:
- Utilizzare strutture dati efficienti (ad es. trie o tabelle hash) per le ricerche di OID.
- Memorizzare nella cache le ricerche di profili di filtro per management target utilizzati frequentemente.
- Considerare la pre-compilazione delle regole di filtro al momento della configurazione.
Ordine dei Filtri
Le voci di filtro vengono processate in ordine lessicografico dei loro indici. Questo significa:
- Le esclusioni più specifiche (OID più lungo) dovrebbero essere configurate appropriatamente rispetto alle inclusioni più ampie.
- L'ordine delle voci di filtro può influenzare il risultato del filtraggio.
Comportamento Predefinito
Se non esiste alcun profilo di filtro per i parametri di un target:
- Il comportamento predefinito è di inviare la notifica (nessun filtraggio).
- Questo assicura la retrocompatibilità con sistemi che non utilizzano il filtraggio delle notifiche.
Requisiti Variable-Binding
RFC 3416 richiede che le notifiche includano almeno due variable-binding:
- sysUpTime.0
- snmpTrapOID.0
Questi variable-binding obbligatori devono passare il filtro affinché la notifica venga inviata. Se il filtro esclude questi OID, la notifica non verrà inviata a quel management target.
Considerazioni di Sicurezza
Il filtraggio delle notifiche può impattare la sicurezza in diversi modi:
-
Prevenzione della Divulgazione di Informazioni: Il filtraggio può prevenire l'invio di informazioni sensibili a stazioni di gestione non autorizzate.
-
Protezione della Configurazione: Le tabelle di configurazione del filtro (snmpNotifyFilterProfileTable e snmpNotifyFilterTable) dovrebbero essere protette dal controllo degli accessi per prevenire modifiche non autorizzate.
-
Bypass del Filtro: Una configurazione del filtro inappropriata (ad es. regole di inclusione troppo ampie) può permettere l'invio di notifiche non intenzionali.
-
Denial of Service: Regole di filtro eccessivamente complesse possono consumare risorse di processamento eccessive, causando potenzialmente un denial of service.
Si raccomanda di utilizzare il filtraggio delle notifiche in congiunzione con un appropriato controllo degli accessi (come VACM) e le funzionalità di sicurezza SNMPv3 per garantire una sicurezza completa.