VPN

Verze pro tisk

6. VPN

6.1. IPsec

6.1.1. Základní popis

IPsec je službou běžící v Linuxovém jádře, která zachytává vybrané pakety, šifruje je a přebaluje do paketů ESP (Encapsulating Security Payload), které jsou poslány protistraně. Druhá strana přijímá ESP pakety a dešifruje je do původní podoby.

V RipEXu je implementován IPsec v tunelovém módu.

Princip funkce IPsec

  • IPsec používá pro šifrování symetrické sdílené klíče. Tyto klíče se musí před vytvořením spojení bezpečně předat protistraně a v průběhu existence spojení se musí po čase vyměňovat za nové, aby nebyla ohrožena bezpečnost spojení. Výměna klíčů je zajišťována protokolem IKE (Internet Key Exchange), buď starší verzi 1 nebo novější 2.

  • Protokol IKE komunikuje s protistranou pomocí UDP paketů na portu 500 a nebo při aktivním
    NAT-T (NAT Traversal) nebo MOBIKE (MOBile IKE) na portu 4500.

  • Tunel IPsec je zajišťován bezpečnostními asociacemi (SA, Security Association). Asociací jsou 2 druhy:

    • IKE SA: Bezpečnostní asociace IKE, která slouží k výměně klíčů SA s protistranou.

    • CHILD SA: Bezpečnostní asociace IPsec, která provádí šifrování vybraných paketů.

  • Každý tunel IPsec má právě 1 IKE SA a alespoň 1 CHILD SA.aa

  • Metoda autentizace slouží k bezpečnému ověření protistrany. V RipEXu je implementována metoda PSK (Pre-Shared Key): Obě strany mají nastavený stejný klíč (heslo).

  • Po vyprchání doby platnosti CHILD SA proběhne vygenerování nových klíčů a jejich výměna pomocí IKE SA.

  • Po vyprchání doby platnosti IKE SA v IKEv1 proběhne nová autentizace a výměna klíčů a vytvoření nové IKE SA (a podřízených CHILD SA).

  • Po vyprchání doby platnosti IKE SA v IKEv2 se chování liší podle nastavení. Pokud je vyžadována reautentizace, chová se podobně jako IKEv1. Pokud není vyžadována, jen se vygenerují a vymění nové klíče IKE SA.

6.1.2. Konfigurace

Popis konfiguračních položek

  • IPsec v Ripexu může být nakonfigurován buď pomocí Webového rozhraní (stránka IPsec), nebo pomocí CLI (příkazy cli_cnf_set_ipsec, cli_cnf_set_ipsec_assoc, cli_cnf_set_ipsec_tsel, cli_cnf_set_ipsec_psk).

  • Následující popis se drží Webového rozhraní. CLI je podobné, jen má všechny tabulky oddělené a ne zanořené.

Menu VPN - IPsec

Obr. 6.1: Menu VPN – IPsec

  • Listbox “IPsec”: Zapíná celý subsystém IPsec. Default je “Off”.

  • Listbox “Make-before-break”: Globální nastavení pro všechny IKE SA používající IKEv2 s reautentizací. Pokud je zapnuto, nedochází k dočasnému přerušení spojení během reautentizace IKE_SA. Nemusí fungovat se všemi protistranami. Default je “Off”.

  • Tabulka “IPsec associations”:

    • Každý řádek odpovídá jedné IKE SA. Současně může být nakonfigurováno maximálně 8 aktivních IKE SA.

    • Klíčem tabulky je položka “Peer ID”, která slouží pro jednoznačnou identifikaci IKE SA a k provázání s CHILD SA (tabulka Traffic selectors) a s PSK.

    • Listbox “IKE version”: Výběr verze IKE. Musí odpovídat nastavení na protistraně. Default je “IKEv2”.

    • Položka “Peer address”: IP adresa protistrany, kde běží IKE daemon, se kterým se bude vyjednávat.

    • Položka “Local ID”: Identifikátor lokální strany, buď IP adresa nebo FQDN (Fully Qualified Domain Name). Musí odpovídat “Peer ID” na protistraně.

    • Položka “Peer ID”: Identifikátor protistrany, buď IP adresa nebo FQDN. Musí být v tabulce unikátní. Musí odpovídat “Local ID” na protistraně.

    • Položka “Note”: Popisek řádku tabulky.

    • Přepínač “Active”: Zneplatňuje řádek (IKE SA a všechny přidružené CHILD SA).

    • Tabulka “Traffic selectors”:

      • Každý řádek odpovídá jedné CHILD SA přidružené k dané IKE SA (přes “Peer ID”).

      • Je povoleno mít maximálně 16 aktivních CHILD SA (dohromady přes všechny aktivní IKE SA).

      • Každý aktivní řádek musí mít ekvivalentní řádek na protistraně s prohozenými hodnotami “Local network” a “Remote network”.

      • Položka “Local network”: Rozsah (adresa/maska) zdrojových IP adres paketů, které budou zachyceny a šifrovány.

      • Položka “Remote network”: Rozsah cílových IP adres paketů, které budou zachyceny a šifrovány.

      • Přepínač “Active”: Zneplatňuje řádek (CHILD SA).

      • “Local network” a “Remote network” nesmí být stejné. Také se nesmí překrývat s rozsahem sítě servisního připojení (10.9.8.7/28) nebo připojení k FPGA (192.0.2.233/30).

      • Nesmí existovat dva aktivní selektory (klidně i pro různé IKE SA), které mají stejnou dvojici “Local network” a “Remote network”.

    • Listbox “Start state”: Nastavuje počáteční stav spojení:

      “Passive”

      Spojení se nenavazuje, čeká na druhou stranu. Default.

      “On Demand”

      Spojení se začne navazovat až se přes něj pokusí projít nějaký paket. Paket čeká, než se spojení naváže.

      “Start”

      Spojení se hned navazuje.

    • Listbox “MOBIKE”: Zapíná funkci MOBIKE pro IKEv2 (podpora mobility/migrace tunelů). Vedlejším účinkem MOBIKE je okamžitý přesun IKE z portu 500 na port 4500, s čímž můžou mít problém některé protistrany nebo firewally po cestě. Mělo by souhlasit s protistranou. Default je “On”.

    • Listbox “Dead Peer Detection”: Zapíná detekci ztráty spojení s protistranou. Posílají se testovací IKE pakety. Pokud se vyopakují bez odpovědi, spojení se zruší (a následují příslušné akce). Pokud není zapnuto, tak se ztráta spojení zjistí až při příští výměně klíčů. Default je “Off”.

      • Položka “DPD check period”: Perioda [s] kontroly spojení. Rozsah je 5s – 28800s (8h), default je 30s.

      • Listbox “DPD action”: Do jakého stavu se spojení uvede, když bylo zjištěno jeho přerušení:

        “Clear”

        Spojení se uzavře a čeká.

        “Hold”

        Spojení se uzavře, začne se navazovat, až se přes něj pokusí projít paket. Default.

        “Restart”

        Okamžitě se pokouší navazovat nové spojení.

    • Blok “Phase 1 – IKE”:

      • Nastavuje parametry IKE SA.

      • Listbox “Authentication method”: Metoda autentizace protistrany. V současnosti je podporováno pouze “PSK”. Musí souhlasit s protistranou.

      • Listbox “Encryption algorithm”: Algoritmus pro šifrování IKE SA. Volby označené “(legacy)” neposkytují dostatečnou bezpečnost. Musí souhlasit s nastavením protistrany. Default je “AES128”.

      • Listbox “Integrity algorithm”: Algoritmus pro zajištění integrity IKE SA. Volby označené “(legacy)” neposkytují dostatečnou bezpečnost. Musí souhlasit s nastavením protistrany. Default je “SHA256”.

      • Listbox “Diffie-Hellman group (PFS)”: Perfect Forward Secrecy zvyšuje bezpečnost výměny klíčů IKE SA. Výrazně ovlivňuje zátěž Ripexu během výměny klíčů. Volby označené “(legacy)” neposkytují dostatečnou bezpečnost. Musí souhlasit s nastavením protistrany. Default je “Group 15 (MODP3072)”.

      • Listbox “Reauthentication”: Nastavuje chování po uplynutí životnosti IKE SA při použití IKEv2. Pokud je zapnuto, dochází k vyjednání celé nové IKE SA včetně nové autentizace. Užitečné při práci s certifikáty, protože hlídá jejich vyprchání. Pokud je vypnuto, jen se vyměňují nové klíče. Default je “Off”.

      • Položka “SA lifetime”: Doba platnosti [s] IKE SA. Po jejím uplynutí se provede nová výměna klíčů, případně reautentizace. Rozsah je 300s – 86400s (1 den). Default je 14400s (4h).

    • Blok “Phase 2 – IPsec”:

      • Nastavuje sdílené parametry všech podřízených CHILD SA.

      • Listbox “Encryption algorithm”: Algoritmus pro šifrování CHILD SA (uživatelského provozu). Volby označené “(legacy)” neposkytují dostatečnou bezpečnost. Musí souhlasit s nastavením protistrany. Default je “AES128”.

      • Listbox “Integrity algorithm”: Algoritmus pro zajištění integrity CHILD SA (uživatelského provozu). Volby označené “(legacy)” neposkytují dostatečnou bezpečnost. Musí souhlasit s nastavením protistrany. Default je “SHA256”.

      • Listbox “Diffie-Hellman group (PFS)”: Perfect Forward Secrecy zvyšuje bezpečnost výměny klíčů CHILD SA (uživatelského provozu). Výrazně ovlivňuje zátěž Ripexu během výměny klíčů. Volby označené “(legacy)” neposkytují dostatečnou bezpečnost. Musí souhlasit s nastavením protistrany. Default je “Group 15 (MODP3072)”.

      • Listbox “IPcomp compression”: Zapíná paketovou kompresi před šifrováním uživatelského provozu. Musí souhlasit s nastavením protistrany. Default je “Off”.

      • Položka “SA lifetime”: Doba platnosti [s] CHILD SA. Po jejím uplynutí se provede nová výměna klíčů přes IKE SA. Rozsah je 180s – 86400s (1 den). Default je 3600s (1h).

    • Blok “Pre-shared keys”:

      • Nastavení autentizace PSK pro IKE SA (svázáno pomocí “Peer ID”).

      • Klíč musí být stejný jako u protistrany.

      • Listbox “Mode”: Volí způsob zadání sdíleného klíče.

        • “Pass Phrase”: Zadání pomocí hesla (řetězce). Default.

          • Položka “Pass phrase”: Heslo. Nesmí být prázdné.

        • “Key”: Zadáno jako 256b číslo.

          • Položka “Key”: 256b klíč jako hexadecimální číslo s 64 číslicemi.

          • Tlačítko “Generate”: Vygeneruje do položky “Key” nový 256b klíč.

Pokročilé vlastnosti konfigurace

  • Vlastnosti “Peer address”:

    • Volit tak, aby nastavena adresa souhlasila s adresou, ze které protistrana odpovídá. Ripex se automaticky snaží vybrat lokální adresu, která odpovídá adrese protistrany.

    • Lze nastavit adresu protistrany tak, že provoz IKE/IPsec odpovídá nastavení selektoru CHILD SA. Provoz IKE/IPsec má výjimku a nebude zachycen.

      • Příklad: Propojuje se Ripex A s ETH 192.168.1.41/24 a Ripex B s ETH 192.168.2.67/24. Na Ripexu A je možné nastavit adresu protistrany jako 192.168.2.67 a selektor 192.168.1.0/24 → 192.168.2.0/24 a spojení bude fungovat a nezacyklí se.

  • Hlídač spojení se aktivuje jen pro spojení se “Start state” nastaveným na “Start”, která buď mají vypnuté “Dead Peer Detection” nebo mají nastavené “DPD action” na “Restart”. Jenom u takových spojení lze prohlásit, že musí být vždy vytvořená a nikdy nečekají v neaktivním stavu.

  • V Ripexu lze vytvořit navazující tunely IPsec, ale musí existovat směrovací pravidlo pro přeposílané uživatelské pakety. Je jedno, kam toto pravidlo míří, lze použít i default GW. Paket přijatý z jednoho tunelu se dešifruje a potom je zachycen a zašifrován druhým tunelem.

    • Příklad: V Ripexu 192.168.1.41 končí IPsec tunel se selektorem 10.10.67.0/24 -> 10.10.42.0/24 navázaný na router 192.168.1.42 a tunel se selektorem 10.10.42.0/24 → 10.10.67.0/24 navázaný na router 192.168.2.67. Ve směrovací tabulce Ripexu 192.168.1.41 musí být směrovací pravidla pro adresy 10.10.42.0/24 a 10.10.67.0/24, například 10.10.42.0/24 → 192.168.1.42 a 10.10.67.0/24 → 192.168.2.67. Paket jdoucí z 10.10.42.1 na 10.10.67.1 se potom v Ripexu vybalí z ESP, nalezne se pro něj směrovací pravidlo (takže se nezahodí), následně je zachycen a zabalen do ESP druhým tunelem. Opačný směr je obdobný.

  • Doby platnosti SA se randomizují v rozsahu 90%-110% při každém zahájení odpočtu, aby nedocházelo ke kolizím při zahájení výměny klíčů z obou stran zároveň.

  • Počet a doba opakování paketů IKE jsou v defaultním nastavení: 5 opakování s rostoucím odstupem, po uplynutí 165s (celkem) opakování končí neuspěchem.

    • Při zapnutém DPD s periodou 30s je nejdelší doba od přerušení spojení do uzavření SA 30s+165s = 195s.

  • Dead Peer Detection může běžet výrazně rychleji než výměna klíčů (“SA lifetime”), protože představuje mnohem menší zátěž jak pro CPU, tak pro síť.

  • Nastavení “SA lifetime” by mělo odpovídat množství dat procházejícímu přes SA. Pro IKE SA, přes které prochází jen výměny klíčů, může být použita velká hodnota. CHILD SA bude mít typicky několikanásobně kratší dobu životnosti. Častější výměny klíčů zabraňují prolomení šifry útočníkem, který by analyzoval velké množství stejně šifrovaných dat. Příliš časté výměny klíčů zatěžují CPU a síť. Velká část zátěže CPU při výměně klíčů závisí na nastavení PFS, čím vyšší “Diffie-Hellman group”, tím vyšší zátěž.

  • Ripex nepodporuje vyjednávání spojení IKEv1 pomocí “aggressive mode”, ale jen “main mode”. Agresivní mód není v kombinaci s PSK bezpečný.

  • PRF (Pseudo-Random Function) pro IKE SA se v Ripexu nekonfiguruje, používá se default, tedy to samé, co je v “Integrity algorithm”.

6.1.3. Součinnost IPsec s ostatními službami Ripexu

  • IPsec není dovoleno spustit v režímu Bridge.

  • Uživatelem definovaný firewall filtruje pakety před zašifrováním v IPsec nebo po dešifrování.

  • IPsec lze nakonfigurovat a provozovat přes rádiový kanál. Adresa protistrany může být rádiová IP adresa i IP adresa ETH (primární).

  • IPsec může pracovat vedle optimalizátoru. Provoz zachycený IPsec se nebude optimalizovat.

  • IPsec lze provozovat přes zálohované trasy (Backup routes). Stačí nastavit adresu protistrany tak, že se směruje přes pravidlo se zálohovanou trasou.

  • IPsec lze použít zároveň s TCP Proxy. Nejdříve TCP Proxy zachytí TCP paket a přebalí ho do UDP, potom zabere IPsec. Na protistraně je postup opačný.

  • IPsec lze používat současně s protokolem SLIP (rozhraní COM, terminal server). IPsec spojení může být vytvořeno přes tunel SLIP a umožňuje směrovat skrz něj uživatelský provoz.

  • IPsec může vytvořit spojení přes VLAN nebo subnet. Při přípravě konfigurace Ripex vybere odpovídající zdrojovou adresu.

  • IPsec je schopen fungovat v režimu HotStandby. V pasivním režimu je IPsec vypnutý, při přechodu do aktivního režimu startuje a otevírá nové asociace, které u protistrany nahradí asociace k nyní pasivnímu Ripexu. Přesné chování závisí na nastavení “Start state” a DPD. Nejrychlejší reakce na přepnutí bude, pokud mají Ripexy v HotStanby “Start state” nastavené na “Start”.

6.2. GRE

6.2.1. Základní popis

  • GRE slouží k tunelování uživatelského provozu. Vytváří virtuální point-to-point zařízení, paket do něj nasměrovaný je vložen do GRE paketu, který je poslán protistraně, kde je vybalen. Z hlediska přenášneného provozu se GRE tunel jeví jako 1 hop.

  • GRE může fungovat v režimu tunelu (TUN) nebo může být vytvořeno L2 transparetní spojení pomocí režimu (TAP) a SW bridge. V Ripexu podporujeme pouze režim TUN, GRE TAP není implementován do verze jádra Linuxu v Ripexu.

  • Paket zabalený do GRE není nijak chráněný proti ztrátě a není šifrován.

  • GRE neprovádí žádné navazování ani udržování spojení, tunel GRE je vytvořen bez ohledu na stav (nebo existenci) protistrany.

  • Tunel GRE má vlastní IP adresu a masku. Síť tvořená adresou a maskou obsahuje jen 2 uzly – oba konce tunelu.

  • Protože tunel přidává k balenému paketu GRE hlavičku, má nastavené nižší MTU (1476B), aby nedocházelo k fragmentaci GRE paketů. Vstupující pakety mohou být fragmentovány na GRE rozhraní.

6.2.2. Konfigurace

Popis konfiguračních položek

  • GRE může být v Ripexu nakonfigurováno buď pomocí Webového rozhraní (stránka GRE), nebo pomocí CLI (příkazy cli_cnf_set_gre a cli_cnf_set_gre_tunnels).

  • Následuje popis Webového rozhraní, CLI je organizováno podobně.

Menu VPN - GRE

Obr. 6.2: Menu VPN – GRE

  • Listbox “GRE”: Zapíná celý subsystém GRE. Default je “Off”.

  • Tabulka “GRE tunnels”:

    • Každý řádek odpovídá jednomu GRE tunelu. Nemělo by být současně vytvořeno více než 20 tunelů (doporučení).

    • Klíčem tabulky je položka “Peer address”, která slouží k jednoznačné identifikaci tunelu.

    • Položka “Peer address”: IP adresa protistrany, na které je druhý konec GRE tunelu. Nelze vytvořit 2 GRE tunely na stejnou cílovou adresu, protože kernel rozlišuje podle zdrojové adresy, kterému tunelu patří GRE pakety přicházející od protistran. Lokální (zdrojová) adresa se vybírá automaticky podle druhu (rozhraní) zvolené cílové adresy. Adresy na obou stranách se musí nastavit tak, aby si navzájem odpovídaly.

      • Příklad: Propojují se 2 Ripexy (A a B) s adresami: ETH(A) a AIR(A), ETH(B) a AIR(B). Na Ripexu A existuje směrovací pravidlo ETH(B)→AIR(B), na Ripexu B ETH(A)→AIR(A). Tunel bude veden přes vzduch. Potom lze použít nastavení “Peer address”: na A AIR(B) a na B AIR(A) nebo na A ETH(B) a na B ETH(A). Nelze nastavit například na A ETH(B) a na B AIR(A), protože GRE pakety z A by měly zdrojovou adresu ETH(A) a na B není žádný GRE tunel na ETH(A), který by je rozbalil.

    • Položka “Tunnel IP/MASK”: IP adresa a maska rozhraní tunelu. Síť definovaná touto položkou musí pokrývat jen lokální adresu tunelu a adresu na vzdáleném konci. Oba konce tunelu musí mít nastavenou stejnou síť a musí mít různé IP adresy. IP adresa druhého konce tunelu se používá jako “Gateway” při nastavování směrování do tunelu.

    • Položka “Note”: Popisek řádku tabulky (tunelu).

    • Přepínač “Active”: Zneplatňuje řádek (tunel).

  • Směrování paketů do GRE tunelu lze nastavit na stránce Routing, stačí do sloupce “Gateway” vyplnit adresu druhé strany GRE tunelu (IP adresu rozhraní). CLI rozhraní pro nastavení směrovací tabulky zatím neexistuje (únor 2017).

6.2.3. Součinnost s ostatními službami Ripexu

  • Přístup na management (Web, CLI) přes GRE není povolen.

  • Vzdálený přístup (QSSH) používaný Webem a CLI může probíhat přes GRE tunel.

  • Uživatelský firewall dokáže filtrovat pakety přeposílané do a z GRE tunelu.

  • Proxy ARP na LAN funguje pro adresy směrované do GRE tunelu.

  • Lze vytvořit GRE tunel procházející přes rádiové rozhraní.

  • Zálohované trasa (Backup route) může používat alternativní cestu přes GRE tunel. V “Alternative paths” se nastaví “Gateway” na IP adresu druhého rozhraní GRE tunelu.

  • GRE tunel může být vytvořen přes zálohovanou trasu (Backup route). Pozor: Zdrojová adresa GRE paketů bude typicky hlavní ETH adresa Ripexu (unifikace adres). Tomu musí být přizpůsobeno nastavení protistrany GRE. Rádiová adresa Ripexu bude vybrána jako zdroj, jen pokud zálohovaná trasa obsluhuje směrovací pravidlo na adresy z rozsahu rádiové sítě (v tabulce “Routes”).

  • Optimalizátor může být zapnutý zároveň s GRE. Pakety zabalené do GRE v Ripexu se nebudou optimalizovat. Procházející GRE pakety se optimalizují.

  • Lze vytvořit GRE tunel přes jiný GRE tunel (i ve stejném Ripexu). Pozor na zacyklení a rostoucí režie (přidávání GRE hlaviček, fragmentace).

  • GRE tunel lze používat zároveň s TCP proxy. TCP proxy je schopně zachytávat TCP z GRE i posílat své UDP pakety přes GRE.

  • GRE tunel lze použít v HotStanby režimu, je bezestavový.

  • IPsec může komunikovat se svojí protistranou přes GRE tunel.

  • Lze vytvořit GRE tunel, který je chráněn pomocí IPsec. Pozor na nastavení adres: Musí se nastavit selektor IPsec tak, aby zachycoval GRE pakety, ale aby nedocházelo k interferenci se směrováním do GRE. V případě nutnosti je možné přidat Ripexu další adresy v nastavení “ARP proxy & VLAN”.