IPsec su multicast

5

Sto cercando di implementare IPSec per la comunicazione multicast, ho provato strongSwan per configurare IPSec per unicast ma non supporta alcun standard per multicast ipsec come elencato qui link .

Ho implementato con successo IPSec per multicast utilizzando lo strumento iproute2 utilizzando i seguenti comandi e configurazioni

Per mittente (192.168.1.3)

ip xfrm state flush; ip xfrm policy flush

ip xfrm state add src 192.168.1.3 dst 232.1.1.1 proto esp spi 0x54c1859e mode tunnel reqid 0x67cea4aa  auth sha256 0xc8a8bf5ce6330699c3500bd8d2637bc1fa26929bab747d5ff2a1c4dddc7ce7ff enc aes 0xfdce8eaf81e3da02fa67e07df975c0111ecfa906561e762e5f3e78dfe106498e

ip xfrm policy add src 192.168.1.3 dst 232.1.1.1 dir out tmpl src 192.168.1.3 dst 232.1.1.1 proto esp reqid 0x67cea4aa mode tunnel

e per i ricevitori (192.168.1.1 e 192.168.1.2)

ip xfrm state flush; ip xfrm policy flush

ip xfrm state add src 192.168.1.3 dst 232.1.1.1 proto esp spi 0x54c1859e mode tunnel reqid 0x67cea4aa  auth sha256 0xc8a8bf5ce6330699c3500bd8d2637bc1fa26929bab747d5ff2a1c4dddc7ce7ff enc aes 0xfdce8eaf81e3da02fa67e07df975c0111ecfa906561e762e5f3e78dfe106498e

ip xfrm policy add src 192.168.1.3 dst 232.1.1.1 dir in tmpl src 192.168.1.3 dst 232.1.1.1 proto esp reqid 0x67cea4aa mode tunnel

Questo tunnel IPSec creato con successo per il gruppo multicast 232.1.1.1, ma il problema è che sto usando il meccanismo di manipolazione manuale. C'è qualche strumento o modo per impostare il gruppo SA e i criteri di gruppo e aggiornare le chiavi dopo un determinato intervallo?

    
posta Zaksh 13.04.2015 - 16:43
fonte

2 risposte

1

I router Cisco e Juniper implementano GDOI.

Puoi anche guardare a questa implementazione: GDOI Reference Implementation Primer , ma è un po 'vecchio.

    
risposta data 17.04.2015 - 08:53
fonte
0

Ho trovato una domanda e una risposta relativa a chiavi e criteri di gruppo qui ServerFault .

Inoltre, il codice elencato al link è:     modifica l'utente di Sudo con:

%AccessGroup ALL=(git-sync) NOPASSWD: /usr/bin/"Access"

e modifica il gancio con:

sudo -u git-sync /usr/bin/"AccessGroup" push origin

Ci sono anche i comandi:

#!/usr/sbin/setkey -f
#
# SPD for gateway A (172.16.72.1)
#
spdadd 192.168.1.0/24 10.42.23.0/24 any -P out ipsec
       esp/tunnel/172.16.72.1-172.16.72.254/require
       ah/tunnel/172.16.72.1-172.16.72.254/require;
spdadd 10.42.23.0/24 192.168.1.0/24 any -P in ipsec
        esp/tunnel/172.16.72.254-172.16.72.1/require
        ah/tunnel/172.16.72.254-172.16.72.1/require;
    # AH SAD entries with 160 bit keys
add 172.16.72.254 172.16.72.1 ah 0x200 -A hmac-sha1         0x46915c30ed7e2465b42861b6ab19f2772813020c;
add 172.16.72.1 172.16.72.254 ah 0x300 -A hmac-sha1 0xc4dac594f8228e0b94a54758f7fbf2fdf4e37f3e;

Voci ESAD ESP con chiavi a 192 bit

add 172.16.72.254 172.16.72.1 esp 0x201 -E rijndael-cbc      0xa3993b3dfc41ef0a1aa8d168a8bf2c27e48249ac17b61e09;
add 172.16.72.1 172.16.72.254 esp 0x301 -E rijndael-cbc 0x8f6498928ba354bd45cfad147f54c67b3b742896b3bafc02;

questo deve essere modificato, ovviamente ( fonte )

Per quanto riguarda le chiavi di aggiornamento, il seguente script può aiutare:

auto

quale operazione, se esistente, dovrebbe essere eseguita automaticamente all'avvio di IPsec; i valori attualmente accettati sono

 add (signifying an ipsec auto --add), 
route (signifying that plus an ipsec auto --route), 
start (signifying that plus an ipsec auto --up), 
manual (signifying an ipsec manual --up), 
and ignore (also the default) (signifying no automatic startup operation). 

  • Rilevante solo localmente, l'altro capo non ha bisogno di accordarsi su di esso (ma in generale, per una connessione destinata alla permanente, entrambe le estremità dovrebbero usare auto = start per assicurare che qualsiasi riavvio causi una rinegoziazione immediata).
  • fonte

    Ho scritto l'inizio di uno script python per aiutare a distribuire e raggruppare le chiavi dei client: Il codice è ancora in fase di elaborazione anche se ...

        void key (str x)
    def _init_(key, status):  
    class key:
    key.status = status
    #Getter function
    @status
    def status(key):
    return key.status
    #Setter Function
        @status.setter
        def status(key, value):
        if not isinstance(value, str):
        raise TypeError('Expected Key Not Found')
        key.status = value
    
    #Deleter function
     @status.deleter
     def status(key):
     raise AttibuteError("Can't Delete Attribute")
     from operator import itemgetter
     from ittertools import groupby
     rows.sort(key=itemgetter(key.status))
    for key.status, items in groupby(rows, key=itemgetter(key.status)):
    print(status)
    for i in items:
    print(' ', i)
    #Asserting Keys to Subclasses
    class key(group)
        @key
        def status(key):
        print("Adding Key to Group")
        return super().status
     @status.setter
     def name(status, value):
    print('Distributing Keys', value)
    super(Subclient, Subclient).status._set_(key, value)
        @key.deleter
        def status(key):
        print('Revoking Key')
        super(Subclient, Subclient).key._delete_(status)
    

    Questo non è inserito nel terminale, ma funziona come uno script!

        
    risposta data 18.04.2015 - 05:59
    fonte

    Leggi altre domande sui tag