OpenBSD ipsec vpn basic Scenario: 192.168.1.0/24--ne3[FRW1]rl0--vr0[FRW2]rl0--192.168.2.0/24 Rete privata con subnet 192.168.1.0/24 Firewall 1 (FRW1) nic ne3: 192.168.1.1 (interfaccia interna) nic rl0: 10.0.0.1 (interfaccia esterna) Firewall 2 (FRW2) nic vr0: 10.0.0.2 (interfaccia esterna) nic rl0: 192.168.2.1 (interfaccia interna) Rete privata con subnet 192.168.2.0/24 Il firewall FRW1 protegge la rete privata 192.168.1.0/24 ed effettua la nat degli indirizzi interni Il firewall FRW2 protegge la rete privata 192.168.2.0/24 ed effettua la nat degli indirizzi interni I due firewall comunicano tra loro su una linea dedicata con le due interfaccie di rete che condividono la stessa subnet 10.0.0.0/24 I dati scambiati dalle due reti private sulla linea dedicata sono protette da ipsec Utilizzando ipsec e ipsecctl si configuri una vpn tra le due reti private ipsecctl aiuta a semplificare la configurazione di ipsec 1. Assicurarsi che le tre subnet 192.168.1.0/24, 192.168.2.0/24 e 10.0.0.0/24 comunichino tra loro eventualmente aggiornando le rispettive tabelle di routing e abilitando l'ip forwarding nei due router firewall FRW1: route add 192.168.2.0/24 10.0.0.2 route show -inet Togliere il commento # alla seguente riga di /etc/sysctl.conf: net.inet.ip.forwarding=1 firewall FRW2: route add 192.168.1.0/24 10.0.0.1 route show -inet Togliere il commento # alla seguente riga di /etc/sysctl.conf: net.inet.ip.forwarding=1 generico pc della subnet 192.168.1.0/24: route add 10.0.0.0/24 192.168.1.1 route add 192.168.2.0/24 192.168.1.1 route show -inet generico pc della subnet 192.168.2.0/24: route add 10.0.0.0/24 192.168.2.1 route add 192.168.1.0/24 192.168.2.1 route show -inet 2. Abilitare nei due firewall/router i protocolli di ipsec togliendo i commenti # alle seguenti righe di /etc/sysctl.conf: net.inet.esp.enable=1 net.inet.ah.enable=1 3. Configurazione del firewall FRW1 in pf.conf ext_if = "rl0" int_if = "ne3" set skip on { lo0 $int_if } nat on $ext_if from ! ($ext_if) -> ($ext_if:0) block in pass out keep state 4. Configurazione del firewall FRW2 in pf.conf ext_if = "vr0" int_if = "rl0" set skip on { lo0 $int_if } nat on $ext_if from ! ($ext_if) -> ($ext_if:0) block in pass out keep state 5. Configurazione di ipsec /etc/ipsec.conf in FRW1 ike esp from 192.168.1.0/24 to 192.168.2.0/24 peer 10.0.0.2 ipsec configura di default la fase 1 con i seguenti parametri (ipsec.conf man page): hmac-sha1, aes, and modp1024 la fase 2 ha i seguenti parametri di default: hmac-sha2-256 and aes Quando non e' specificato (come in questo caso, vedi ipsec.conf man page) avremo: active mode: la negoziazione tra i due demoni isakmpd inizia automaticamente encap esp: protocollo esp tmode tunnel: tunnel mode perfetto per creare una vpn 6. Configurazione di ipsec /etc/ipsec.conf in FRW2 ike esp from 192.168.2.0/24 to 192.168.1.0/24 peer 10.0.0.1 7. Consentire il passaggio di ipsec attraverso il firewall FRW1 modificando pf.conf linea da aggiungere: pass quick on $ext_if from 10.0.0.2 linea da modificare: set skip on { lo0 $int_if enc0 } 8. Consentire il passaggio di ipsec attraverso il firewall FRW2 modificando pf.conf linea da aggiungere: pass quick on $ext_if from 10.0.0.1 linea da modificare: set skip on { lo0 $int_if enc0 } 9. Copiare le chiavi isakmpd di ogni sistema Copiare /etc/isakmpd/private/local.pub dal firewall FRW2 a /etc/isakmpd/pubkeys/ipv4/10.0.0.2 del firewall FRW1 Copiare local.pub da /etc/isakmpd/private/ del firewall FRW1 a /etc/isakmpd/pubkeys/ipv4/10.0.0.1 del firewall FRW2 10. Verificare nei due firewall in /etc/rc.conf che pf sia attivo e che ipesec non lo sia pf=YES ipsec=NO 11. Avviare la vpn su entrambi i firewall isakmpd -K ipsecctl -f /etc/ipsec.conf nb: L'opzione K consente a isakmpd di non leggere i file di configurazione e keynote policy Questo e' possibile quando policy per i flows e le security associations (SA) sono ottenute automaticamente ad esempio da ipsecctl 12. Provare ad effettuare un ping da 192.168.1.* a 192.168.2.* e viceversa Se non dovesse funzionare provare con le opzioni di debug/verbose -dv: isakmpd -Kdv -d: usata per far funzionare il demone in foreground facendo loggare allo stderr -v: abilita il logging verbose Normalmente isakmpd e' silenzioso e non mostra messaggi a meno che non ci siano warning o errori Con verbose si riescono a loggare il completamento della fase 1 (Main and Aggressive) e la fase 2(Quick) 13. Rendere definitive le modifiche Cambiare la seguente linea in /etc/rc.conf isakmpd_flags=''-K'' Aggiungere inoltre la seguente riga a rc.local: ipsecctl -f /etc/ipsec.conf Per conosce lo stato dei flows e delle associazioni: ipsecctl -sa Per controllare che effettivamente i pacchetti siano crittografati usare, ad esempio, tcpdump sul firewall FRW1 e effettuare un ping dal pc 192.168.1.2 al pc 192.168.2.2 tcpdump -i rl0 -s 1500 host 10.0.0.1 09.07 rev.1 Giuseppe Reale jscrat@libero.it reference: ipsec, ipsec.conf man page zero to IPSec in 4 minutes - Dragos Ruiu