4.4.1.1. Selettori (Selectors)
Una SA può essere a grana fine o grossa, a seconda dei selettori utilizzati per definire l'insieme di traffico per la SA. Ad esempio, tutto il traffico tra due host può essere trasportato tramite una singola SA e ricevere un insieme uniforme di servizi di sicurezza. In alternativa, il traffico tra una coppia di host potrebbe essere distribuito su più SA, a seconda delle applicazioni utilizzate (come definito dal protocollo di livello successivo e dai campi correlati, ad esempio le porte), con diversi servizi di sicurezza offerti da diverse SA. Allo stesso modo, tutto il traffico tra una coppia di gateway di sicurezza potrebbe essere trasportato su una singola SA, oppure una SA potrebbe essere assegnata per ogni coppia di host comunicanti.
I seguenti parametri selettore DEVONO essere supportati da tutte le implementazioni IPsec per facilitare il controllo della granularità SA. Si noti che sia gli indirizzi locali che quelli remoti dovrebbero essere IPv4 o IPv6, ma non un mix di tipi di indirizzo. Si noti inoltre che i selettori di porta locale/remota (e tipo e codice messaggio ICMP, e tipo intestazione mobilità) possono essere etichettati come OPAQUE per accogliere situazioni in cui questi campi sono inaccessibili a causa della frammentazione dei pacchetti.
Indirizzo(i) IP remoto(i) (Remote IP Address(es))
Tipo: IPv4 o IPv6
Questo è un elenco di intervalli di indirizzi IP (unicast, broadcast (solo IPv4)). Questa struttura consente l'espressione di:
- Un singolo indirizzo IP (tramite un intervallo banale)
- Un elenco di indirizzi (ciascuno un intervallo banale)
- Un intervallo di indirizzi (valori basso e alto, inclusi)
- Un elenco di intervalli
Gli intervalli di indirizzi vengono utilizzati per supportare più di un sistema remoto che condivide la stessa SA, ad esempio, dietro un gateway di sicurezza.
Indirizzo(i) IP locale(i) (Local IP Address(es))
Tipo: IPv4 o IPv6
Questo è un elenco di intervalli di indirizzi IP (unicast, broadcast (solo IPv4)). Questa struttura consente l'espressione di:
- Un singolo indirizzo IP (tramite un intervallo banale)
- Un elenco di indirizzi (ciascuno un intervallo banale)
- Un intervallo di indirizzi (valori basso e alto, inclusi)
- Un elenco di intervalli
Gli intervalli di indirizzi vengono utilizzati per supportare più di un sistema sorgente che condivide la stessa SA, ad esempio, dietro un gateway di sicurezza. Locale si riferisce agli indirizzi protetti da questa implementazione (o voce di politica).
Nota: La SPD non include il supporto per le voci di indirizzi multicast. Per supportare le SA multicast, un'implementazione dovrebbe utilizzare una SPD di gruppo (Group SPD, GSPD) come definito in [RFC3740]. Le voci GSPD richiedono una struttura diversa, cioè non si può utilizzare la relazione simmetrica associata ai valori di indirizzo locale e remoto per le SA unicast in un contesto multicast. In particolare, il traffico in uscita diretto a un indirizzo multicast su una SA non verrebbe ricevuto su una SA in entrata complementare con l'indirizzo multicast come sorgente.
Protocollo di livello successivo (Next Layer Protocol)
Fonte: Campo "Protocollo" IPv4 o campo "Intestazione successiva" IPv6
Valori: Numero di protocollo individuale, ANY, o (solo IPv6) OPAQUE
Il protocollo di livello successivo è ciò che viene dopo le intestazioni di estensione IP presenti. Per semplificare la localizzazione del protocollo di livello successivo, DOVREBBE esserci un meccanismo per configurare quali intestazioni di estensione IPv6 ignorare.
Intestazioni di estensione IPv6 da ignorare per impostazione predefinita:
- 0 (Opzioni hop-by-hop)
- 43 (Intestazione di routing)
- 44 (Intestazione di frammentazione)
- 60 (Opzioni di destinazione)
Nota: L'elenco predefinito NON include 51 (AH) o 50 (ESP). Dal punto di vista della ricerca del selettore, IPsec tratta AH ed ESP come protocolli di livello successivo.
Selettori dipendenti dal protocollo di livello successivo
Diversi selettori aggiuntivi dipendono dal valore del protocollo di livello successivo:
Porte (TCP, UDP, SCTP, ecc.)
Se il protocollo di livello successivo utilizza due porte (come fanno TCP, UDP, SCTP e altri), allora ci sono selettori per le porte locale e remota. Ciascuno di questi selettori ha un elenco di intervalli di valori.
Importante: Le porte locale e remota potrebbero non essere disponibili nel caso di ricezione di un pacchetto frammentato o se i campi porta sono stati protetti da IPsec (crittografati); pertanto, DEVE essere supportato anche un valore di OPAQUE.
Gestione della frammentazione:
- In un frammento non iniziale, i valori di porta non saranno disponibili.
- Se un selettore di porta specifica un valore diverso da ANY o OPAQUE, non può corrispondere a pacchetti che sono frammenti non iniziali.
- Se la SA richiede un valore di porta diverso da ANY o OPAQUE, un frammento in arrivo senza porte DEVE essere scartato. (Vedere Sezione 7, "Gestione dei frammenti".)
Tipo di intestazione di mobilità (Mobility Header Type)
Se il protocollo di livello successivo è un'intestazione di mobilità, allora c'è un selettore per il tipo di messaggio dell'intestazione di mobilità IPv6 (MH type). Questo è un valore a 8 bit che identifica un particolare messaggio di mobilità.
Nota: Il tipo MH potrebbe non essere disponibile nel caso di ricezione di un pacchetto frammentato. (Vedere Sezione 7, "Gestione dei frammenti".)
Per IKE: Il tipo di messaggio dell'intestazione di mobilità IPv6 (MH type) è posizionato negli otto bit più significativi del selettore "porta" locale a 16 bit.
Tipo e codice ICMP (ICMP Type and Code)
Se il valore del protocollo di livello successivo è ICMP, allora c'è un selettore a 16 bit per il tipo e il codice del messaggio ICMP.
Struttura:
- Tipo di messaggio (Message Type): Singolo valore a 8 bit che definisce il tipo di un messaggio ICMP, o ANY
- Codice ICMP (ICMP Code): Singolo valore a 8 bit che definisce un sottotipo specifico per un messaggio ICMP
Per IKE:
- Il tipo di messaggio è posizionato negli 8 bit più significativi del selettore a 16 bit
- Il codice è posizionato negli 8 bit meno significativi
Combinazioni consentite:
- Tipo singolo e intervallo di codici
- Tipo singolo e ANY codice
- ANY tipo e ANY codice
Algoritmo di corrispondenza: Data una voce di politica con un intervallo di tipi (T-start a T-end) e un intervallo di codici (C-start a C-end), e un pacchetto ICMP con tipo t e codice c, un'implementazione DEVE testare la corrispondenza usando:
(T-start*256) + C-start <= (t*256) + c <= (T-end*256) + C-end
Nota: Il tipo e il codice del messaggio ICMP potrebbero non essere disponibili nel caso di ricezione di un pacchetto frammentato. (Vedere Sezione 7, "Gestione dei frammenti".)
Nome (Name)
Importante: Questo non è un selettore come gli altri sopra. Non viene acquisito da un pacchetto. Un nome può essere utilizzato come identificatore simbolico per un indirizzo IPsec locale o remoto.
Le voci SPD nominate vengono utilizzate in due modi:
Caso d'uso 1: Risponditore (Controllo accesso per road warrior)
Una voce SPD nominata viene utilizzata da un risponditore (non un iniziatore) a supporto del controllo degli accessi quando un indirizzo IP non sarebbe appropriato per il selettore di indirizzo IP remoto, ad esempio, per i "road warrior".
Processo:
- Il nome utilizzato per corrispondere a questo campo viene comunicato durante la negoziazione IKE nel payload ID.
- L'indirizzo IP sorgente dell'iniziatore (intestazione IP interna in modalità tunnel) è associato all'indirizzo IP remoto nella voce SAD creata dalla negoziazione IKE.
- Questo indirizzo sovrascrive il valore dell'indirizzo IP remoto nella SPD, quando la voce SPD viene selezionata in questo modo.
Requisito: Tutte le implementazioni IPsec DEVONO supportare questo uso dei nomi.
Forme di nome supportate:
- Nome di dominio completamente qualificato (Fully Qualified Domain Name, FQDN)
- Nome distinto (Distinguished Name, DN)
- Indirizzo e-mail RFC 822
- ID chiave (Key ID)
Caso d'uso 2: Iniziatore (Identificazione multi-utente)
Una voce SPD nominata può essere utilizzata da un iniziatore per identificare un utente per il quale verrà creata una SA IPsec (o per il quale il traffico può essere bypassato). L'indirizzo IP sorgente dell'iniziatore (dall'intestazione IP interna in modalità tunnel) viene utilizzato per sostituire quanto segue se e quando vengono creati:
- Indirizzo locale nella voce della cache SPD
- Indirizzo locale nella voce SAD in uscita
- Indirizzo remoto nella voce SAD in entrata
Supporto: Questo uso è opzionale per le implementazioni host native multi-utente e non applicabile ad altre implementazioni.
Nota: Questo nome viene utilizzato solo localmente; non viene comunicato dal protocollo di gestione delle chiavi. Inoltre, forme di nome diverse da quelle utilizzate per il caso 1 sopra (risponditore) sono applicabili nel contesto dell'iniziatore.
Nome nelle voci SPD
Una voce SPD può contenere sia un nome (o un elenco di nomi) sia valori per l'indirizzo IP locale o remoto.
Per il caso 1 (risponditore): Gli identificatori impiegati nelle voci SPD nominate sono nomi DNS, nomi distinti o indirizzi e-mail RFC 822.
Per il caso 2 (iniziatore): Le forme di nome possono essere le stesse del caso 1, oppure possono essere un ID utente (UID) o altra convenzione di denominazione locale.
Regole di denominazione importanti:
- Tutte le voci SPD DEVONO essere in grado di accogliere le forme di nome definite sopra per l'uso del risponditore.
- Se un'implementazione consente di creare voci SPD utilizzando forme di nome localmente significative per l'uso dell'iniziatore, questa è una questione locale.
- Una voce SPD che include un nome può essere utilizzata solo se il nome si risolve in un indirizzo IP locale o remoto, o se il nome viene utilizzato durante la negoziazione IKE per corrispondere al payload ID.