cs:spravce:pripojovani:ipsec:linux

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
Následující verze
Předchozí verze
cs:spravce:pripojovani:ipsec:linux [2017/08/21 15:05]
jan.tomasek@cesnet.cz [Definice IPsec politik]
— (aktuální)
Řádek 1: Řádek 1:
-====== Připojení k eduroam.cz: konfigurace IPsec na Linuxu ====== 
  
-<box orange> 
-Návod pro IPsec na Linuxu není udržován, použijte [[cs:​spravce:​pripojovani:​radsec:​uvod|RadSec]]! 
-</​box>​ 
- 
-V rámci přípravy projektu //​eduroam.cz//​ jsme otestovali IPsec 
-tunnel, OpenBSD'​s isakmpd a IPsec-Tools (KAME'​s IPsec utilities). Při seznamování s technologií IPsecu se jako užitečný ukázal dokument [[http://​www.freeswan.org/​freeswan_snaps/​CURRENT-SNAP/​doc/​glossary.html|Glossary for the Linux FreeS/​WAN]]. FreeS WAN jsme ale netestovali,​ protože jeho vývoj byl zastaven. 
- 
-[[http://​ringstrom.mine.nu/​ipsec_tunnel/​|IPsec tunnel]] vyžaduje úpravu zdrojového kódu 
-kernelu a neumožňuje použití transportního režimu. Má implementováno 
-pouze tunelování,​ což by přineslo zbytečné komplikace při přidělování 
-IP adres tunelům, proto jsme se rozhodli ho nepoužít. 
- 
-[[http://​www.ipsec-howto.org/​x496.html|OpenBSD'​s isakmpd]] transportní režim podporuje, ale 
-má horší podporu pro práci s certifikáty. Především se nám nepodařilo 
-najít takovou konfiguraci,​ při které by byl schopen navázat šifrované 
-spojení bez vymazání IPSec politik. V okamžiku restartu jednoho z 
-konců spojení je nutné IPSec politiky vymazat na obou koncích, což je 
-velmi těžko realizovatelné a mohlo byt vést až k výpadku celé národní 
-//eduroam// RADIUS hierarchie. 
- 
-Z otestovaných implementací se nám jako nejvhodnější jeví 
-[[http://​ipsec-tools.sourceforge.net/​|IPsec-Tools]] ​ ([[http://​www.ipsec-howto.org/​x299.html|howto]]). Racoon, daemon 
-zodpovědný za dynamickou výměnu šifrovacích klíčů, ale také není zcela 
-bez problémů. Na RADIUS serverech provozovaných CESNETem je použit 
-právě IPsec-Tools v konfiguraci popsané dále. Těm, kteří ještě žádné 
-IPSec řešení nepoužívají,​ doporučujeme použití toho námi 
-popisovaného. Nebráníme se spolupráci s těmi, kteří používají řešení 
-jiné, ale v těchto případech je třeba počítat s delší dobou nutnou na 
-odladění a otestování specifické konfigurace. 
- 
-===== Potřebný software ===== 
- 
-V kernelu Linuxu musí být zapnuta podpora IPsec, ta se zapíná 
-direktivami ''​CONFIG_INET_AH''​ a ''​CONFIG_INET_ESP''​ v 
-konfiguračním souboru. Potřebný kód je k dispozci v kernelech 2.5.47+, 
-2.6.1+. Je také možné, že potřebná fukcionalita byla backportována do 
-distribučního kernelu, např. Debian má podporu IPsec v kernelech od 
-verze 2.4.25. 
- 
-IPsec-Tools jsou stále aktivně vyvíjeny, a proto by měly být pokud 
-možno v poslední stabilní verzi, v době psaní tohoto dokumentu to je 
-0.6.4. 
- 
-Je možné, že na Vaší distribuci jsou trochu jiné zvyklosti, např. v 
-umisťování spouštěcích skriptů a konfiguračních souborů. Zde uváděné 
-příklady předpokládají použití [[http://​www.debian.org/​|Debian 
-GNU/​Linuxu]]. V příkladech je uváděno fiktivní jméno a IP 
-připojovaného počítače. 
- 
-===== Definice IPsec politik ===== 
- 
-''​Racoon''​ sice umožnuje dynamické generování politik pro 
-kernel, ale tato funkcionalita je určena pro klienty, kteří se 
-připojují z různých IP adres. V //​eduroam.cz//​ je dynamická 
-konfigurace nežádoucí. Díky statické konfiguraci je mimo jiné 
-zajištěno,​ že RADIUS servery mezi sebou nemohou nedopatřením 
-komunikovat nešifrovaně. 
- 
-Vytvořte soubor ''/​etc/​ipsec-policies.conf''​ s tímto obsahem (raději použijte rovnou IP adresy): 
- 
-<​xterm>​ 
-SETKEY="/​usr/​local/​sbin/​setkey"​ 
-LOCAL="​**radius1.example.com**"​ 
-PEERS="​radius1.eduroam.cz"​ 
-</​xterm>​ 
- 
-a spusťte [[cs:​spravce:​pripojovani:​ipsec:​linux:​ipsec-policies|ipsec-policies start]]. Po spuštění by se 
-mělo zobrazit: 
- 
-<​xterm>​ 
-Setting ipsec policies: ​ 
-   ​**radius1.example.com** <-> radius1.eduroam.cz 
-</​xterm>​ 
- 
-Pro ověření, že je opravdu vše v pořádku, si můžete ještě zkontrolovat 
-//Security Policy Database// spuštěním ''​setkey -DP''​. Získáte 
-následující výstup: 
- 
-<​xterm>​ 
-195.113.187.22[any] **10.0.0.1**[any] any 
-        in prio def ipsec 
-        esp/​transport/​require 
-        created: Aug 26 15:31:42 2004  lastused: 
-        lifetime: 0(s) validtime: 0(s) 
-        spid=1032 seq=3 pid=5559 
-        refcnt=1 
-**10.0.0.1**[any] 195.113.187.22[any] any 
-        out prio def ipsec 
-        esp/​transport/​require 
-        created: Aug 26 15:31:42 2004  lastused: 
-        lifetime: 0(s) validtime: 0(s) 
-        spid=1025 seq=1 pid=5559 
-        refcnt=1 
-195.113.187.22[any] **10.0.0.1**[any] any 
-        fwd prio def ipsec 
-        esp/​transport/​require 
-        created: Aug 26 15:31:42 2004 lastused: ​                     
-        lifetime: 0(s) validtime: 0(s) 
-        spid=18 seq=2 pid=5559 
-        refcnt=1 
-</​xterm>​ 
- 
-Jestliže všechno vypadá v pořádku, zkuste pingnout na národní 
-RADIUS: ''​radius1.eduroam.cz''​. Ping by 
-**neměl** projít, protože jsou již nakonfigurovány IPsec 
-politiky. Kernel tedy už ví, že musí s národním RADIUSem komunikovat 
-šifrovaně,​ ale ještě neběží ''​racoon'',​ který zajistí výměnu 
-//Security Associations//,​ čímž umožní zahájení šifrované 
-komunikace. 
- 
-===== Zprovoznění racoona ===== 
- 
-==== Umístění certifikátů ==== 
- 
-Popisovaná konfigurace předpokládá uložení certifikátů v adresáři 
-''/​etc/​ssl/​certs''​ a v adresáři ''/​etc/​ssl''​ musí být 
-symbolický link na kořenový certifikát CA. Jména linků jsou hash z subjectu kořenového certifikátu CA. Linky vytvořte takto: 
- 
-<​xterm>​ 
-radius1:/​etc/​ssl#​ ln -s certs/​CCA2005.pem \ 
-  `openssl x509 -in certs/​CCA2005.pem -noout -hash`.0 
-</​xterm>​ 
- 
-Kořenový certifikát,​ soubor ''​CCA2005.pem'',​ získáte na stránkách [[http://​www.cesnet.cz/​pki/​|CESNET CA]]. 
- 
- 
-==== Stahování revokačního listu ==== 
- 
-Na tomtéž místě jako link na kořenový certifikát,​ tedy v 
-''/​etc/​ssl'',​ očekává racoon umístění revokačního listu. Jméno 
-souboru musí odpovídat linku odkazujícímu na certifikát,​ jen přípona 
-souboru bude ''​.r0''​. Při každém stažení certifikátu musíte 
-kontrolovat jeho platnost a podpis, tak doporučuji použití skriptů [[http://​tools.cesnet-ca.cz/​getcrl/​|getcrl.sh a getcrls.sh]],​ které 
-se o vše potřebné umí postarat. 
- 
-Instalace je následující:​ 
- 
-<​xterm>​ 
-radius1:​~/​getcrl-1.9#​ ./configure --prefix=/​usr/​local/​getcrl-1.9 --sysconfdir=/​etc \ 
-   ​--with-crt-dir=/​etc/​ssl --with-crl-dir=/​etc/​ssl 
-radius1:​~/​getcrl-1.9#​ make 
-radius1:​~/​getcrl-1.9#​ make install 
-</​xterm>​ 
- 
-Vytvořte soubor ''/​etc/​getcrls.cfg''​ s obsahem: 
- 
-<​code>​ 
-http://​www.cesnet.cz/​pki/​crl/​cn=CESNET%20CA,​dc=cesnet-ca,​dc=cz.crl 
-</​code>​ 
- 
-Vyzkoušejte,​ jestli vše funguje: ​ 
- 
-<​xterm>​ 
-radius1:~# /​usr/​local/​getcrl-1.9/​sbin/​getcrls.sh -s 
-</​xterm>​ 
- 
-Výstup by měl vypadat takto: 
- 
-<​code>​ 
-getcrl[4991]:​ Starting with http://​www.cesnet.cz/​pki/​crl/​cn=CESNET CA,​dc=cesnet-ca,​dc=cz.crl 
-getcrl[4991]:​ New CRL is younger than the installed one. 
-getcrl[4991]:​ Task completed. 
-</​code>​ 
- 
-Pokud je vše v pořádku, tak stahování nastavte jednou denně v 
-cronu. Vymyslete si nějaký náhodný čas, ať se neúčastníte DoS útoku na 
-distribuční servery. ;) 
- 
- 
-==== Konfigurace racoona ==== 
- 
- 
- 
-Umístěte níže uvedenou konfiguraci do souboru 
-''/​etc/​racoon.conf''​. Pochopitelně musíte změnit IP adresy a 
-správně spočítat lifetime pro SA. Vzorec naleznete v [[:​cs:​spravce:​pripojovani:​ipsec:​uvod|obecném popisu parametrů IPsec spojení]]. 
- 
-<​xterm>​ 
-path certificate "/​etc/​ssl";​ 
- 
-listen { 
-  isakmp **10.0.0.1**;​ 
-  strict_address;​ 
-} 
- 
-# -- radius1.eduroam.cz -- 
-sainfo subnet **10.0.0.1**/​32 any subnet 195.113.187.22/​32 any { 
-  pfs_group 2; 
-  lifetime time **61587** sec; 
-  encryption_algorithm 3des; 
-  authentication_algorithm hmac_sha1; 
-  compression_algorithm deflate; 
-} 
- 
-remote 195.113.187.22 {  
-  exchange_mode main; 
-  my_identifier asn1dn; 
-  peers_identifier asn1dn; 
- 
-  certificate_type x509 "​certs/​**ipsec_radius1.example.com**.crt.pem"​ 
-                        "​private/​**ipsec_radius1.example.com**.key.pem";​ 
- 
-  lifetime time 24 hours; 
- 
-  proposal { 
-    encryption_algorithm 3des; 
-    hash_algorithm sha1; 
-    authentication_method rsasig; 
-    dh_group 2; 
-  } 
- 
-  proposal_check claim; 
-} 
-</​xterm>​ 
- 
-Sekce s ''​listen {...}''​ je volitelná a je na zvážení 
-administrátora. Nastavení ''​proposal_check''​ na ''​claim''​ 
-znamená, že PFS group protějšku musí být shodná s lokální a z lifetime 
-se použije buď lokální nebo návrh protějšku podle toho, která z hodnot 
-je kratší. Jesliže vaše verze racoona nerozumí ''​subnet'',​ tak ho 
-změnte na ''​address''​. Zbytek direktiv je asi vcelku jasný, 
-manuál k ''​racoon.conf''​ mohu doporučit, je poměrně 
-kvalitní. 
- 
-Jestliže používáte IPsec-Tool z distribuce, tak pravděpodobně máte 
-vhodný startovací skript. Racoon se občas odmítá ukončit a potřebuje 
-zvýšenou motivaci v podobě signálu 9. V přílohách máte k dispozici 
-[[cs:​spravce:​pripojovani:​ipsec:​linux:​racoon|osvědčený skript]], který dokáže racoona 
-spolehlivě ukončit. 
- 
-Pro první pokus ale spusťe racoon v popředí v terminálu, ať můžete 
-pohodlně zkontrolovat výstup, a v druhém okně spusťe ''​ping 
-radius1.eduroam.cz'',​ aby měl racoon důvod začít pracovat: 
- 
-<​xterm>​ 
-radius1:~# racoon -F -4 -f /​etc/​racoon.conf 
-</​xterm>​ 
- 
-Pro ukázku uvádím komunikaci s ''​radius1.eduoram.cz'':​ 
- 
-<​xterm>​ 
-@(#​)ipsec-tools 0.6.4 (ipsec-tools.sourceforge.net) 
-@(#)This product linked OpenSSL 0.9.7e 25 Oct 2004 (www.openssl.org) 
-**10.0.0.1**[500] used as isakmp port (fd=5) 
-IPsec-SA request for 195.113.187.22 queued due to no phase1 found. 
-initiate new phase 1 negotiation:​ **10.0.0.1**[500]<​=>​195.113.187.22[500] 
-begin Identity Protection mode. 
-ISAKMP-SA established **10.0.0.1**[500]-195.113.187.22[500] spi:​05ef9e13fa5fefa8:​6fefbe1bf1a1584a 
-initiate new phase 2 negotiation:​ **10.0.0.1**[0]<​=>​195.113.187.22[0] 
-respond new phase 2 negotiation:​ **10.0.0.1**[0]<​=>​195.113.187.22[0] 
-IPsec-SA established:​ ESP/​Transport 195.113.187.22[0]->​**10.0.0.1**[0] spi=45612402(0x2b7fd72) 
-IPsec-SA established:​ ESP/​Transport **10.0.0.1**[0]->​195.113.187.22[0] spi=98598645(0x5e07ef5) 
-IPsec-SA established:​ ESP/​Transport 195.113.187.22[0]->​**10.0.0.1**[0] spi=48516199(0x2e44c67) 
-IPsec-SA established:​ ESP/​Transport **10.0.0.1**[0]->​195.113.187.22[0] spi=107434508(0x667520c) 
-</​xterm>​ 
- 
-Další možností kontroly funkce racoona je výpis SA pomocí příkazu ''​setkey -D''​. 
- 
-Racoon začne spojení navazovat až když vznikne potřeba komunikace. Národní RADIUS server se sice snaží posílat ping na všechny definované RADIUS servery, ale vněkterých případech je nutné aby bylo IPsec spojení navázáno z druhé strany. Pro tyto případy se hodí skript ​ [[#​skript_eduroam-ping.sh|eduroam-ping.sh]]. 
- 
- 
-===== Udržování aktivního IPsec spojení ===== 
- 
-Každé SA má omezenou dobu platnosti, po vypršení racoon s protějškem 
-nedohaduje nové, ale čeká, až vznikne potřeba komunikace. Sestavení nového SA někdy trvá i minutu nebo dvě. Aby byla  zajištěna vysoká dostupnost služby, tak se národní RADIUS 
-server častými ping pakety snaží udržovat IPsec spojení aktivní. [[cs:​spravce:​monitoring:​statistiky_dostupnosti_ipsec|Statistiky odezev]] jsou zaznamenávány a 
-jsou správcům k dispozici v grafické podobě. 
- 
-Skript který použávám na národním RADIUS serveru je k [[cs:​spravce:​pripojovani:​ipsec:​linux:​eduroam-ping|dispozici]] pro ty správce, kteří chtějí mít vlastní záznamy. 
- 
-Skript automaticky zjistí, jaká IPsec spojení jsou nadefinována. 
-Potom pro každé jednotlivé IPčko vygeneruje podproces, který zajistí, 
-aby se ping nespouštěl paralelně pro tu samou adresu, zpracuje 
-výsledky a zaarchivuje do systémových logů. Loguje se na 
-''​local5.info''​. 
- 
- 
- 
- 
-===== Některé chybovky a jejich řešení ===== 
- 
- 
-==== ERROR: pfkey UPDATE failed: Protocol not supported ==== 
- 
-V kernelu chybí některý z důležitých modulů. Zkontrolujte přítomnost **esp4**, **des**, **sha1**, **af_key**. 
- 
- 
-==== WARNING: unable to get certificate CRL(3) at depth:1 SubjectName:​... ==== 
- 
-Dooinstalujte si [[cs:​spravce:​pripojovani:​ipsec:​linux#​stahovani_revokacniho_listu|statahování revokačního listu]]. 
- 
-===== Přílohy ===== 
- 
-==== Skript ipsec-policies ==== 
- 
-Skript [[cs:​spravce:​pripojovani:​ipsec:​linux:​ipsec-policies|ipsec-policies]] slouží 
-k nastavení/​odstranění IPsec politik. 
- 
- 
-==== Skripty getcrl.sh a getcrls.sh ==== 
- 
-Skripty souží ke stahování a ověřování revokačních listů, jsou distribuovány z adresy [[http://​tools.cesnet-ca.cz/​getcrl/​]]. 
- 
-==== Startovací skript pro racoon ==== 
- 
-Osvědčený [[cs:​spravce:​pripojovani:​ipsec:​linux:​racoon|startovací skript]], který si 
-s racoonem poradí, i když nereaguje na signály k ukončení. 
- 
-==== Skript eduroam-ping.sh ==== 
- 
-Skript [[cs:​spravce:​pripojovani:​ipsec:​linux:​eduroam-ping|eduroam-ping.sh]] je používán k udržování aktivního IPsec spojení. 
- 
- 
-====== ​ ====== 
- --- //​[[http://​staff.cesnet.cz/​~semik/​|Jan Tomášek]] 11.09.2006 13:40// dokument převeden z www.eduroam.cz\\ 
- --- //​[[http://​staff.cesnet.cz/​~semik/​|Jan Tomášek]] 23.01.2008 10:39// doplnil jsem informace o řešení dvou častých chyb v logu racoona 
-  
Poslední úprava:: 2017/08/21 15:05