Racoon czyli ipsec - VPN adresy statyczne szyfrowanie plain rsa
Transkrypt
Racoon czyli ipsec - VPN adresy statyczne szyfrowanie plain rsa
Racoon czyli ipsec - VPN adresy statyczne szyfrowanie plain rsa Wpisany przez rpc poniedziałek, 12 października 2009 06:45 - Poprawiony piątek, 18 lutego 2011 17:38 Racoon czyli ipsec - VPN adresy statyczne szyfrowanie kluczem plain rsa - linux openwrt 8.09.x , 10.03.x Większość opisów tworzenia tunelu opiera się na OpenVPN . Dla odmiany postanowiłem opisać VPN utworzony za pomocą pakietu rac oon czyli ipsec . Opisany sposób został przetestowany na routerze Linksys AG241v2-EU w jednym końcu tunelu w połączeniu z Debian Lenny na drugim końcu. Oba routery mają adresy IP statyczne czyli nie zmieniają się. Oba adresy MUSZĄ być adresami publicznymi. Nie będe w tym artykule opisywał instalacji w Debianie Racoon. Opis dotyczy tylko Openwrt ew. podam pliki konfiguracyjne po stronie Debiana. Jeszcze jedno. Konfiguracji racoon nie można przeprowadzić poprzez narzędzie UCI. Większość rzeczy trzeba zrobić ręcznie. 27.07.2010: Konfiguracja zgodna z Backfire 10.03.x. Testowano na wr1043nd. Założenia 1 / 20 Racoon czyli ipsec - VPN adresy statyczne szyfrowanie plain rsa Wpisany przez rpc poniedziałek, 12 października 2009 06:45 - Poprawiony piątek, 18 lutego 2011 17:38 Adres publiczny WAN IP Routera Debian Lenny : 218.97.26.22 Adres i maska sieci LAN Routera Debian Lenny : 192.168.1.0/24 Adres publiczny WAN IP Routera z Openwrt AG241 : 87.205.205.13 Adres i maska sieci LAN Routera z Openwrt AG241 : 10.0.0.0/24 (10.0.0.0/24)AG241(87.205.205.13) <=============> (218.97.26.22)Debian(192.168.1.0/24) Szyfrowanie za pomocą pary kluczy Plain RSA Nazwa ID tunelu od strony Debian: vpn.dyndns.org Nazwa ID tunelu od strony AG241 : iyy99.internetdsl.tpnet.pl Nie muszą być to nazwy DNS mogą być dowolne. 2 / 20 Racoon czyli ipsec - VPN adresy statyczne szyfrowanie plain rsa Wpisany przez rpc poniedziałek, 12 października 2009 06:45 - Poprawiony piątek, 18 lutego 2011 17:38 Instalacja Musimy zainstalować Racoon oraz potrzebne moduły. opkg install ipsec-tools kmod-crypto-aead kmod-crypto-aes kmod-crypto-authenc kmod-crypto-core kmod-crypto-des kmod-crypto-hmac kmod-crypto-md5 kmod-crypto-sha1 kmod-ipsec kmod-ipsec4 Od wersji Backfire nie ma modułu kmod-crypto-aead musimy jeszcze utworzyć plik ładujący dodatkowe moduły w czasie startu systemu - są wymagane do poprawnej pracy- UWAGA !!! TYLKO w kamikadze 8.09.x echo af_key >> /etc/modules.d/10-ipsec echo ah4 >> /etc/modules.d/10-ipsec echo esp4 >> /etc/modules.d/10-ipsec echo xfrm_user >> /etc/modules.d/10-ipsec echo xfrm4_mode_beet >> /etc/modules.d/10-ipsec echo xfrm4_mode_transport >> /etc/modules.d/10-ipsec echo xfrm4_mode_tunnel >> /etc/modules.d/10-ipsec echo xfrm4_tunnel >> /etc/modules.d/10-ipsec po załadowaniu modułów lsmod powinien wykazać: 3 / 20 Racoon czyli ipsec - VPN adresy statyczne szyfrowanie plain rsa Wpisany przez rpc poniedziałek, 12 października 2009 06:45 - Poprawiony piątek, 18 lutego 2011 17:38 xfrm_user 21664 0 tunnel4 2608 2 xfrm4_tunnel xfrm4_tunnel 1920 0 xfrm4_mode_tunnel 1952 2 xfrm4_mode_transport 1248 0 xfrm4_mode_beet 2208 0esp4 6368 1 ah4 4800 0 af_key 33552 0 sha1_generic 2144 1 md5 5024 0 hmac 3776 1 des_generic 19296 1 authenc 5280 1 aes_generic 29296 0 aead 5440 2 esp4,authenc deflate 2560 0 ecb 2336 0 cbc 3168 1 crypto_blkcipher 15376 4 authenc,ecb,cbc crypto_hash 3648 2 hmac,authenc cryptomgr 2688 0 crypto_algapi 11616 12 sha1_generic,md5,hmac,des_generic,authenc,aes_generic,aead,deflate,ecb,cbc,crypto_blkciph er,cryptomgr Konfiguracja racoon po stronie routera AG241 na openwrt w katalogu /etc/racoon utwórz 4 pliki i 1 katalog touch /etc/racoon/psk.txt touch /etc/racoon/racoon.conf 4 / 20 Racoon czyli ipsec - VPN adresy statyczne szyfrowanie plain rsa Wpisany przez rpc poniedziałek, 12 października 2009 06:45 - Poprawiony piątek, 18 lutego 2011 17:38 touch /etc/racoon/setkey.conf touch /etc/init.d/racoon mkdir /etc/racoon/certs oraz nadaj uprawnienia do wykonywania chmod +x /etc/racoon/setkey.conf chmod +x /etc/init.d/racoon chmod 600 /etc/racoon.psk.txt Zawartość pliku setkey.conf powinna wyglądać następująco: #!/usr/sbin/setkey -f 5 / 20 Racoon czyli ipsec - VPN adresy statyczne szyfrowanie plain rsa Wpisany przez rpc poniedziałek, 12 października 2009 06:45 - Poprawiony piątek, 18 lutego 2011 17:38 flush; spdflush; #FPW spdadd 10.0.0.0/24 192.168.1.0/24 any -P out ipsec esp/tunnel/87.205.205.13-218.97.26.22/require; spdadd 192.168.1.0/24 10.0.0.0/24 any -P in ipsec esp/tunnel/218.97.26.22-87.205.205.13/require; Zawartość pliku racoon.conf powinna wyglądać następująco: path pre_shared_key "/etc/racoon/psk.txt"; path certificate "/etc/racoon/certs"; log info; listen { isakmp 87.205.205.13 [500]; } remote 218.97.26.22 { exchange_mode main; doi ipsec_doi; situation_identity_only; lifetime time 28800 sec; certificate_type plain_rsa " 87.205.205.13_privatekey.rsa"; peers_certfile plain_rsa "218.97.26.22 _publickey.rsa"; my_identifier fqdn "iyy99.internetdsl.tpnet.pl"; peers_identifier fqdn "vpn.dyndns.org"; passive off; initial_contact on; # ike_frag=on; proposal_check obey; proposal { encryption_algorithm aes; hash_algorithm sha1; authentication_method rsasig; 6 / 20 Racoon czyli ipsec - VPN adresy statyczne szyfrowanie plain rsa Wpisany przez rpc poniedziałek, 12 października 2009 06:45 - Poprawiony piątek, 18 lutego 2011 17:38 dh_group 2; } generate_policy off; } sainfo anonymous { pfs_group 2; lifetime time 3600 sec; encryption_algorithm aes,3des ; authentication_algorithm hmac_sha1, hmac_md5 ; compression_algorithm deflate; } Plik /etc/init.d/racoon winien zawierać: #!/bin/sh /etc/rc.common START=60 start() { echo Uruchamiam tunel ipsec racoon... if [ ! -e /var/racoon ] then mkdir /var/racoon fi setkey -f /etc/racoon/setkey.conf racoon -f /etc/racoon/racoon.conf } stop() { killall racoon } 7 / 20 Racoon czyli ipsec - VPN adresy statyczne szyfrowanie plain rsa Wpisany przez rpc poniedziałek, 12 października 2009 06:45 - Poprawiony piątek, 18 lutego 2011 17:38 Generowanie kluczy Plain RSA na routerze AG241 Przechodzimy do katalogu /etc/racoon/certs cd /etc/racoon/certs i wywołujemy polecenie: plainrsa-gen -f /etc/racoon/certs/87.205.205.13_privatekey.rsa W wyniku utworzy nam się plik z kluczem prywatnym RSA. Teraz musimy wydzielić klucz publiczny z tego pliku. Wykonujemy wywołując: grep ": PUB" 87.205.205.13_privatekey.rsa | sed 's/^#//' > /etc/racoon/certs/87.205.205.13_publ ickey.rsa Ten plik należy przekopiować do drugiego routera Debian do katalogu /etc/racoon/certs/87.205. 205.13 _publickey.rsa Konfiguracja firewalla po stronie routera AG241 na openwrt 8 / 20 Racoon czyli ipsec - VPN adresy statyczne szyfrowanie plain rsa Wpisany przez rpc poniedziałek, 12 października 2009 06:45 - Poprawiony piątek, 18 lutego 2011 17:38 zawartość pliku /etc/config/firewall powinniśmy uzupełnić o następujące wpisy: config rule option src wan option proto esp option target ACCEPT config rule option src wan option proto ah option target ACCEPT config rule option src wan option proto ipcomp option target ACCEPT config rule option dest_port 500 option proto udp option target ACCEPT config rule option dest_port 4500 option proto udp option target ACCEPT config include option path /etc/firewall.user 9 / 20 Racoon czyli ipsec - VPN adresy statyczne szyfrowanie plain rsa Wpisany przez rpc poniedziałek, 12 października 2009 06:45 - Poprawiony piątek, 18 lutego 2011 17:38 Reszta konfiguracji firewall w pliku /etc/firewall.user powinna wyglądać następująco: #regulki dla ipsec #................................................... iptables -I forwarding_rule --dst 192.168.1.0/24 -j ACCEPT iptables -t nat -I postrouting_rule -s 10.0.0.0/24 -d 192.168.1.0/24 -j ACCEPT iptables -t nat -I postrouting_rule -p ipcomp -j ACCEPT iptables -t nat -I postrouting_rule -p ah -j ACCEPT iptables -t nat -I postrouting_rule -p esp -j ACCEPT Jeśli chcemy dopuści cały z LAN Debian do LAN AG241 ruch musimy dopisać jeszcze jedną regułkę zamiast linii wykropkowanej powyżej iptables -I forwarding_rule --src 192.168.1.0/24 -j ACCEPT lub tylko port np. iptables -I forwarding_rule -p tcp --src 192.168.1.0/24 --dport 5900 -j ACCEPT oczywiście to można zmienić wedla własnego uznania. 10 / 20 Racoon czyli ipsec - VPN adresy statyczne szyfrowanie plain rsa Wpisany przez rpc poniedziałek, 12 października 2009 06:45 - Poprawiony piątek, 18 lutego 2011 17:38 Uruchomienie vpn po stronie routera AG241 na openwrt Jeśli wszystko zrobiłeś poprawnie jak pingniesz adres z drugiegej strony tunelu łącze się zestawi. Demon racoon pojawi się w bierzących procesach "ps ax". Jeśli są jakieś problemy to można analizować uruchomienie poprzez: 1. ręcznie uruchom plik ./etc/racoon/setkey.conf 2. uruchom racoon jako proces nie demon: racoon -F -f /etc/racoon/racoon.conf ew. więcej informacji uzyskasz uruchamiając: racoon -F -v -f /etc/racoon/racoon.conf UWAGA !!! ERRATA W Backfire ostatnich wydania jest błąd który winien zostać poprawiony. Niestety developerzy tak przerobili firewalla że nie da się w żaden sposób wstawić na początek głównych łańcuchów własnych reguł iptables. Jeśli masz problemy z nawiązaniem połączenia zerknij koniecznie na 11 / 20 Racoon czyli ipsec - VPN adresy statyczne szyfrowanie plain rsa Wpisany przez rpc poniedziałek, 12 października 2009 06:45 - Poprawiony piątek, 18 lutego 2011 17:38 reguły firewalla iptables -t nat -L -v w szczególności łańcuchów POSTROUTING. Nasze reguły dodane do firewalla MUSZĄ być przed łańcuchami zone_lan_nat zone_wan_nat inaczej nie będzie poprawnie działał tunel Czyli jeśli masz np. taką kolejność Chain POSTROUTING (policy ACCEPT 246 packets, 18433 bytes) pkts bytes target prot opt in out source destination 854 61486 zone_wan_nat all -- any eth0.2 anywhere anywhere 1 84 zone_lan_nat all -- any br-lan anywhere anywhere 246 18433 postrouting_rule all -- any any anywhere anywhere to nie będą działać wpisy w postrouting_rule. Nawet jak dodasz reguły w /etc/firewall.user do głównego łańcucha POSTROUTING to przynajmniej na dzień dzisiejszy reguły zostaną dodane za łańcuchami zone_lan_nat i zone_wan_nat Jedynym rozwiązaniem jest przeniesienie naszych reguł do skryptu uruchamiającego firewall /etc/init.d/racoon Czyli usuwamy nasze wpisy z pliky /etc/firewall.user i wstawiamy je np. tak jak poniżej: 12 / 20 Racoon czyli ipsec - VPN adresy statyczne szyfrowanie plain rsa Wpisany przez rpc poniedziałek, 12 października 2009 06:45 - Poprawiony piątek, 18 lutego 2011 17:38 Plik /etc/init.d/racoon winien zawierać: #!/bin/sh /etc/rc.common START=98 start() { echo Uruchamiam tunel ipsec racoon... if [ ! -e /var/racoon ] then mkdir /var/racoon fi setkey -f /etc/racoon/setkey.conf racoon -f /etc/racoon/racoon.conf #regulki dla ipsec #................................................... iptables -I forwarding_rule --dst 192.168.1.0/24 -j ACCEPT iptables -t nat -I postrouting_rule -s 10.0.0.0/24 -d 192.168.1.0/24 -j ACCEPT iptables -t nat -I postrouting_rule -p ipcomp -j ACCEPT iptables -t nat -I postrouting_rule -p ah -j ACCEPT iptables -t nat -I postrouting_rule -p esp -j ACCEPT } stop() { killall racoon #regulki dla ipsec #................................................... iptables -D forwarding_rule --dst 192.168.1.0/24 -j ACCEPT iptables -t nat -D postrouting_rule -s 10.0.0.0/24 -d 192.168.1.0/24 -j ACCEPT iptables -t nat -D postrouting_rule -p ipcomp -j ACCEPT iptables -t nat -D postrouting_rule -p ah -j ACCEPT iptables -t nat -D postrouting_rule -p esp -j ACCEPT } 13 / 20 Racoon czyli ipsec - VPN adresy statyczne szyfrowanie plain rsa Wpisany przez rpc poniedziałek, 12 października 2009 06:45 - Poprawiony piątek, 18 lutego 2011 17:38 Alternatywą w/w zmian jest uaktualnienie pakietu firewall do najnowszej wersji opkg install http://ecco.selfip.net/backfire/packages/firewall_2-21_all.ipk po wgraniu w/w aktualizacji reguły spokojnie mogą zostać jak w oryginalnym opisie. Pliki konfiguracyjne po stronie Debian Lenny: zawartość pliku /etc/ipsec-tools.conf powinniśmy uzupełnić o następujące wpisy: #!/usr/sbin/setkey -f ## Flush the SAD and SPD # # flush; # spdflush; ## Some sample SPDs for use racoon # spdadd 192.168.10.0/24 10.0.0.0/24 any -P out ipsec esp/tunnel/218.97.26.22-87.205.205.13/require; spdadd 10.0.0.0/24 192.168.10.0/24 any -P in ipsec esp/tunnel/87.205.205.13-218.97.26.22/require; 14 / 20 Racoon czyli ipsec - VPN adresy statyczne szyfrowanie plain rsa Wpisany przez rpc poniedziałek, 12 października 2009 06:45 - Poprawiony piątek, 18 lutego 2011 17:38 zawartość pliku /etc/racoon/racoon.conf powinniśmy uzupełnić o następujące wpisy: path pre_shared_key "/etc/racoon/psk.txt"; path certificate "/etc/racoon/certs"; log info; listen { isakmp 218.97.26.22 [500]; } remote 87.205.205.13 { exchange_mode main; doi ipsec_doi; situation_identity_only; lifetime time 28800 sec; certificate_type plain_rsa "218.97.26.22_privatekey.rsa"; peers_certfile plain_rsa "87.205.205.13_publickey.rsa"; my_identifier fqdn "vpn.dyndns.org"; peers_identifier fqdn "iyy99.internetdsl.tpnet.pl"; passive on; initial_contact off; # ike_frag=on; proposal_check obey; proposal { encryption_algorithm aes,3des; hash_algorithm sha1; authentication_method rsasig; dh_group 2; } generate_policy off; } 15 / 20 Racoon czyli ipsec - VPN adresy statyczne szyfrowanie plain rsa Wpisany przez rpc poniedziałek, 12 października 2009 06:45 - Poprawiony piątek, 18 lutego 2011 17:38 sainfo anonymous { pfs_group 2; lifetime time 3600 sec; encryption_algorithm aes,3des ; authentication_algorithm hmac_sha1 ,hmac_md5 ; compression_algorithm deflate; } Generowanie Kluczy plain RSA po stronie routera Debian Przechodzimy do katalogu /etc/racoon/certs cd /etc/racoon/certs i wywołujemy polecenie: plainrsa-gen -f /etc/racoon/certs/218.97.26.22_privatekey.rsa W wyniku utworzy nam się plik z kluczem prywatnym RSA. Teraz musimy wydzielić klucz publiczny z tego pliku. Wykonujemy wywołując: grep ": PUB" 218.97.26.22_privatekey.rsa | sed 's/^#//' > /etc/racoon/certs/218.97.26.22 _public key.rsa 16 / 20 Racoon czyli ipsec - VPN adresy statyczne szyfrowanie plain rsa Wpisany przez rpc poniedziałek, 12 października 2009 06:45 - Poprawiony piątek, 18 lutego 2011 17:38 Ten plik należy przekopiować do drugiego routera AG241 z openwrt do katalogu /etc/racoon/cer ts/ 218.97.26.2 2 _publicke y.rsa Musimy jeszcze pamiętać o firewallu: #negowanie na INPUT vpn ikea oraz ogolnie vpn zezwolenie /sbin/iptables -A INPUT -p udp --dport 500 -j ACCEPT /sbin/iptables -A INPUT -p udp --dport 4500 -j ACCEPT /sbin/iptables -A INPUT -p esp -j ACCEPT /sbin/iptables -A INPUT -p ah -j ACCEPT /sbin/iptables -A INPUT -p ipcomp -j ACCEPT #.............................................................. /sbin/iptables -A FORWARD --src 192.168.1.0/24 --dst 10.0.0.0/24 -j ACCEPT /sbin/iptables -t nat -A POSTROUTING -p esp -j ACCEPT /sbin/iptables -t nat -A POSTROUTING -p ah -j ACCEPT /sbin/iptables -t nat -A POSTROUTING -p ipcomp -j ACCEPT /sbin/iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -d 10.0.0.0/24 -j ACCEPT 17 / 20 Racoon czyli ipsec - VPN adresy statyczne szyfrowanie plain rsa Wpisany przez rpc poniedziałek, 12 października 2009 06:45 - Poprawiony piątek, 18 lutego 2011 17:38 /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE gdzie eth0 jest interfejsem WAN o adresie 218.97.26.22 . Koniecznie wpisy w POSTROUTING muszą być przed MASQUERADE. Jeśli chcemy dopuści cały z LAN AG241 do LAN w Debianie ruch musimy dopisać jeszcze jedną regułkę zamiast linii wykropkowanej powyżej /sbin/iptables -A FORWARD --src 10.0.0.0/24 -j ACCEPT lub tylko port np. /sbin/iptables -A FORWARD -p tcp --src 10.0.0.0/24 --dport 5900 -j ACCEPT Reszty należy szukać w odpowiednich HOWTO iptablesa, racoon, ipsec, itp. 18 / 20 Racoon czyli ipsec - VPN adresy statyczne szyfrowanie plain rsa Wpisany przez rpc poniedziałek, 12 października 2009 06:45 - Poprawiony piątek, 18 lutego 2011 17:38 Ps. Jeśli chciałbyś przekompilować openwrt np. do wersji 8.09 to poniższe pozycje są potrzebne do działania VPN: Network->ipsec-tools Kernel modules -> Network support->kmod-gre Kernel modules -> Network support->kmod-ipsec Kernel modules -> Network support->kmod-ipsec4 Kernel modules -> Network support->kmod-iptunnel4 Kernel modules -> Netfilter extensions->kmod-ipt-ipsec Kernel modules->Cryptographics API modules->kmod-crypto-aes Kernel modules->Cryptographics API modules->kmod-crypto-authenc Kernel modules->Cryptographics API modules->kmod-crypto-aead Kernel modules->Cryptographics API modules->kmod-crypto-core Kernel modules->Cryptographics API modules->kmod-crypto-des 19 / 20 Racoon czyli ipsec - VPN adresy statyczne szyfrowanie plain rsa Wpisany przez rpc poniedziałek, 12 października 2009 06:45 - Poprawiony piątek, 18 lutego 2011 17:38 Kernel modules->Cryptographics API modules->kmod-crypto-hmac Kernel modules->Cryptographics API modules->kmod-crypto-md5 Kernel modules->Cryptographics API modules->kmod-crypto-sha1 Ps2. Przykład dotyczy debiana ale testowałem i działa z openwrt oraz Asmax BR-604G patrz opis Trzeba sobie dostosować odpowiednio ale schemat jest ten sam 20 / 20