Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Obě strany předchozí revize Předchozí verze Následující verze | Předchozí verze | ||
cs:spravce:pripojovani:ipsec:linux [2017/08/21 13:05] – [Definice IPsec politik] semik@cesnet.cz | cs:spravce:pripojovani:ipsec:linux [2024/05/17 08:30] (aktuální) – odstraněno Jan Čáslavský | ||
---|---|---|---|
Řá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: | ||
- | </ | ||
- | |||
- | V rámci přípravy projektu // | ||
- | tunnel, OpenBSD' | ||
- | |||
- | [[http:// | ||
- | kernelu a neumožňuje použití transportního režimu. Má implementováno | ||
- | pouze tunelování, | ||
- | IP adres tunelům, proto jsme se rozhodli ho nepoužít. | ||
- | |||
- | [[http:// | ||
- | má horší podporu pro práci s certifikáty. Především se nám nepodařilo | ||
- | najít takovou konfiguraci, | ||
- | 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:// | ||
- | 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í, | ||
- | 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 '' | ||
- | 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:// | ||
- | GNU/ | ||
- | připojovaného počítače. | ||
- | |||
- | ===== Definice IPsec politik ===== | ||
- | |||
- | '' | ||
- | kernel, ale tato funkcionalita je určena pro klienty, kteří se | ||
- | připojují z různých IP adres. V // | ||
- | konfigurace nežádoucí. Díky statické konfiguraci je mimo jiné | ||
- | zajištěno, | ||
- | komunikovat nešifrovaně. | ||
- | |||
- | Vytvořte soubor ''/ | ||
- | |||
- | < | ||
- | SETKEY="/ | ||
- | LOCAL=" | ||
- | PEERS=" | ||
- | </ | ||
- | |||
- | a spusťte [[cs: | ||
- | mělo zobrazit: | ||
- | |||
- | < | ||
- | Setting ipsec policies: | ||
- | | ||
- | </ | ||
- | |||
- | Pro ověření, že je opravdu vše v pořádku, si můžete ještě zkontrolovat | ||
- | //Security Policy Database// spuštěním '' | ||
- | následující výstup: | ||
- | |||
- | < | ||
- | 195.113.187.22[any] **10.0.0.1**[any] any | ||
- | in prio def ipsec | ||
- | esp/ | ||
- | 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/ | ||
- | 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/ | ||
- | created: Aug 26 15:31:42 2004 lastused: | ||
- | lifetime: 0(s) validtime: 0(s) | ||
- | spid=18 seq=2 pid=5559 | ||
- | refcnt=1 | ||
- | </ | ||
- | |||
- | Jestliže všechno vypadá v pořádku, zkuste pingnout na národní | ||
- | RADIUS: '' | ||
- | **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ě, | ||
- | //Security Associations//, | ||
- | komunikace. | ||
- | |||
- | ===== Zprovoznění racoona ===== | ||
- | |||
- | ==== Umístění certifikátů ==== | ||
- | |||
- | Popisovaná konfigurace předpokládá uložení certifikátů v adresáři | ||
- | ''/ | ||
- | 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: | ||
- | |||
- | < | ||
- | radius1:/ | ||
- | `openssl x509 -in certs/ | ||
- | </ | ||
- | |||
- | Kořenový certifikát, | ||
- | |||
- | |||
- | ==== Stahování revokačního listu ==== | ||
- | |||
- | Na tomtéž místě jako link na kořenový certifikát, | ||
- | ''/ | ||
- | souboru musí odpovídat linku odkazujícímu na certifikát, | ||
- | souboru bude '' | ||
- | kontrolovat jeho platnost a podpis, tak doporučuji použití skriptů [[http:// | ||
- | se o vše potřebné umí postarat. | ||
- | |||
- | Instalace je následující: | ||
- | |||
- | < | ||
- | radius1: | ||
- | | ||
- | radius1: | ||
- | radius1: | ||
- | </ | ||
- | |||
- | Vytvořte soubor ''/ | ||
- | |||
- | < | ||
- | http:// | ||
- | </ | ||
- | |||
- | Vyzkoušejte, | ||
- | |||
- | < | ||
- | radius1:~# / | ||
- | </ | ||
- | |||
- | Výstup by měl vypadat takto: | ||
- | |||
- | < | ||
- | getcrl[4991]: | ||
- | getcrl[4991]: | ||
- | getcrl[4991]: | ||
- | </ | ||
- | |||
- | 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 | ||
- | ''/ | ||
- | správně spočítat lifetime pro SA. Vzorec naleznete v [[: | ||
- | |||
- | < | ||
- | path certificate "/ | ||
- | |||
- | listen { | ||
- | isakmp **10.0.0.1**; | ||
- | strict_address; | ||
- | } | ||
- | |||
- | # -- radius1.eduroam.cz -- | ||
- | sainfo subnet **10.0.0.1**/ | ||
- | 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 " | ||
- | " | ||
- | |||
- | lifetime time 24 hours; | ||
- | |||
- | proposal { | ||
- | encryption_algorithm 3des; | ||
- | hash_algorithm sha1; | ||
- | authentication_method rsasig; | ||
- | dh_group 2; | ||
- | } | ||
- | |||
- | proposal_check claim; | ||
- | } | ||
- | </ | ||
- | |||
- | Sekce s '' | ||
- | administrátora. Nastavení '' | ||
- | 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í '' | ||
- | změnte na '' | ||
- | manuál k '' | ||
- | 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: | ||
- | 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 '' | ||
- | radius1.eduroam.cz'', | ||
- | |||
- | < | ||
- | radius1:~# racoon -F -4 -f / | ||
- | </ | ||
- | |||
- | Pro ukázku uvádím komunikaci s '' | ||
- | |||
- | < | ||
- | @(# | ||
- | @(#)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: | ||
- | begin Identity Protection mode. | ||
- | ISAKMP-SA established **10.0.0.1**[500]-195.113.187.22[500] spi: | ||
- | initiate new phase 2 negotiation: | ||
- | respond new phase 2 negotiation: | ||
- | IPsec-SA established: | ||
- | IPsec-SA established: | ||
- | IPsec-SA established: | ||
- | IPsec-SA established: | ||
- | </ | ||
- | |||
- | Další možností kontroly funkce racoona je výpis SA pomocí příkazu '' | ||
- | |||
- | 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 | ||
- | |||
- | |||
- | ===== 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: | ||
- | jsou správcům k dispozici v grafické podobě. | ||
- | |||
- | Skript který použávám na národním RADIUS serveru je k [[cs: | ||
- | |||
- | 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 | ||
- | '' | ||
- | |||
- | |||
- | |||
- | |||
- | ===== 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: | ||
- | |||
- | ===== Přílohy ===== | ||
- | |||
- | ==== Skript ipsec-policies ==== | ||
- | |||
- | Skript [[cs: | ||
- | k nastavení/ | ||
- | |||
- | |||
- | ==== 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:// | ||
- | |||
- | ==== Startovací skript pro racoon ==== | ||
- | |||
- | Osvědčený [[cs: | ||
- | s racoonem poradí, i když nereaguje na signály k ukončení. | ||
- | |||
- | ==== Skript eduroam-ping.sh ==== | ||
- | |||
- | Skript [[cs: | ||
- | |||
- | |||
- | ====== | ||
- | --- // | ||
- | --- // | ||
- |