Portál AbcLinuxu, 23. dubna 2024 12:37

IPSec v kernelu 2.6 - I

3. 6. 2004 | Marek Červenka
Články - IPSec v kernelu 2.6 - I  

Nový seriál, jenž vám předvede principy šifrované komunikace na bázi IPSec a naučí vás jeho základům pod Linuxem.

Úvodem

Cílem tohoto článku je zasvětit běžného administrátora do možností, které nabízí kernel 2.6 v oblasti tvorby VPN. Zaměříme se na protokol IPSec, který je silnější a bezpečnější alternativou k protokolu pptp (www.poptop.org) a také umožňuje použít nativního klienta Windows XP/2000 pro přístup do intranetu.

Předpokládají se běžné znalosti z oblasti linuxu a síťování. Naopak neočekávejte vysoce sofistikované popisy protokolu, rozebírání jednotlivých hashovacích a šifrovacích algoritmů apod. Článek ani není koncipován jako detailní porovnání s ostatními IPSec implementacemi. Pro budování šifrovaných tunelů máme i další možnosti. Od CIPE, OpenVPN až po nějaké ssh tunelování.

PPTP

Kromě toho, že pptp je v oblasti šifrování slabší a méně bezpečné než IPSec, existuje také patentový problém, který nedovolí začlenit pptp přímo do distribucí.

Kompresní protokol MPPC (Microsoft Point-to-Point Compression) je patentován firmou Hifn Inc.. Protokol MPPE(Microsoft Point-to-Point Encryption) používá algoritmus RC4, který sice není patentovaný, ale je obchodní značkou firmy RSA Data Security Inc.

IPSec

Původní návrh IP protokolu neobsahoval žádné bezpečnostní prvky. Nový návrh IPv6 obsahuje zabezpečení jako součást protokolu. Pro toto zabezpečení se vžil název IPSec (IP Security). IPSec je dostupný i pro protokol IPv4.

IPSec obsahuje 2 základní služby:

přičemž nemusíme nutně používat obě (ESP navíc dokáže zastat i funkce AH).

IPSec můžeme používat ve 2 režimech:

Dalším pojmem, se kterým se u IPSec setkáme, je SAD (Security Association Database). SA nám vznikne ustanovením spojení a jsou v ní obsaženy veškeré informace o spojení (bezpečnostní protokol, šifrovací algoritmus, countery, atd.). SA jsou identifikovány pomocí SPI (Security Parametr Index), ten je obsažen v každém z paketů.

SPD (Security Policy Database) obsahuje pravidla, podle kterých se buď na pakety IPSec aplikuje, nebo jsou pakety zahazovány, nebo propouštěny.

Protože manuální správa SAD by byla ve větších sítích velmi problematická, byl navržen protokol, který se snaží tento problém eliminovat. ISAKMP (Internet Security Association and Key Management Protocol) je popsán v RFC2408.

Zjednodušeně můžeme říci, že obě strany se snaží dohodnout na stejných parametrech spojení (tzv. proposal). Iniciátor pošle sadu navrhovaných parametrů a responder si z nich vybere tu, která vyhovuje jeho konfiguraci. Pokud se obě strany neshodnou, spojení není možné navázat.

ISAKMP komunikace probíhá na UDP portu 500, ten je třeba mít povolený ve firewallu.

Ustanovení IPSec spojení je dvoufázové. V první fázi (Phase 1) se vytvoří základní ISAKMP SA, která se dále používá pro druhou fázi (Phase 2) a ustanovení dalších SA pro ESP/AH. Tyto SA jsou zaváděny do kernelu.

Průběh komunikace (winXP - Linux[racoon] )

2004-05-17 18:00:10: INFO: respond new phase 1 negotiation: 192.168.0.226[500]<=>192.168.0.227[500]
2004-05-17 18:00:10: INFO: begin Identity Protection mode.
2004-05-17 18:00:10: INFO: received Vendor ID: MS NT5 ISAKMPOAKLEY
2004-05-17 18:00:10: INFO: ISAKMP-SA established 192.168.0.226[500]-192.168.0.227[500]spi:dcd3d3d25bc29952:a14e34a6864a095f
2004-05-17 18:00:10: INFO: respond new phase 2 negotiation:192.168.0.226[0]<=>192.168.0.227[0]
2004-05-17 18:00:11: INFO: IPsec-SA established: ESP/Transport 192.168.0.227->192.168.0.226 spi=174567934(0xa67b1fe)
2004-05-17 18:00:11: INFO: IPsec-SA established: ESP/Transport 192.168.0.226->192.168.0.227 spi=3143250583(0xbb5a3297)

O výměnu klíčů v rámci ISAKMP frameworku se stará IKE (Internet Key Exchange) RFC2409. Jedním z kroků při navazování spojení je autentizace.

Autentizace může probíhat pomocí:

  1. sdíleného klíče
  2. X.509 certifikátů
  3. kerberosu
  4. plain RSA
  5. ...

NAT

Problémem ve stávajících IPv4 sítích je pro IPSec NAT. Řešením tohoto problému je návrh draft-ietf-ipsec-nat-t-ike-08.txt. Otázkou kompatibility se zabývá RFC3715.

Implementace IPSecu na Linuxu

Kernel

My se budeme dále zabývat druhou jmenovanou implementací, protože ta je standardně přítomna v kernelu 2.6 a enterprise distributoři provedli její downport i pro kernel řady 2.4 (např. RHEL3).

Pokud si kompilujeme vlastní jádro, musíme mít v konfiguraci následující položky:

CONFIG_NET_KEY=y
CONFIG_INET_AH=m
CONFIG_INET_ESP=m
CONFIG_INET_IPCOMP=m
CONFIG_XFRM_USER=m

CRYPTO=y
CRYPTO_HMAC=m
CRYPTO_MD5=m
CRYPTO_NULL=m
CRYPTO_SHA1=m
CRYPTO_DES=m
CRYPTO_AES=m

IPSec-tools

Pokud máme připravený kernel, vrhneme se na instalaci ipsec-tools. Pokud máme distribuci SuSE 9.1, Fedora Core 2, Mandrake 10 nebo další aktuální distribuci, jsou tam již ipsec-tools většinou přítomné. IPSec-tools jsou sponzorovány společností SuSE (Novell). Pokud je v distribuci nemáme, stáhneme si je z http://ipsec-tools.sf.net a nainstalujeme standardní trojkombinací:

./configure
make
make install

ipsec-tools obsahují:

Ukázka manuální konfigurace transport módu

Konečně se dostáváme k něčemu trochu užitečnému, i když ne příliš používanému. Mějme následující topologii:

router kryton (192.168.0.226) ---- Internet ---- router lister (192.168.0.227)

a chceme mít komunikaci mezi těmito routery šifrovanou.

Použijeme manuální konfiguraci pouze s ESP a jako šifrovací algoritmus použijeme 3des.

výpis souboru ipsec-kryton.cfg pro router "kryton"

#!/sbin/setkey -f
flush;
spdflush;

# ESP SAs using 192 bit long keys (168 + 24 parity)
add 192.168.0.226 192.168.0.227 esp 0x201 -E 3des-cbc 0x7aeaca3f87d060a12f4a4487d5a5c3355920fae69a96c831;
add 192.168.0.227 192.168.0.226 esp 0x301 -E 3des-cbc 0xf6ddb555acfd9d77b03ea3843f2653255afe8eb5573965df;

# Security policies
spdadd 192.168.0.226 192.168.0.227 any -P out ipsec
           esp/transport//require;
spdadd 192.168.0.227 192.168.0.226 any -P in ipsec
           esp/transport//require;

Pro router "lister" prohodíme v konfiguračním souboru v sekci "security policies"(prikazy spdadd) ip adresy na řádcích (tzn. tam kde je 192.168.0.226, dáme 192.168.0.227 a naopak) a uložíme jako ipsec-lister.cfg.

Na obou routerech potom aktivujeme nastavení pomocí příkazů

kryton#setkey -f ipsec-kryton.cfg
lister#setkey -f ipsec-lister.cfg

SAD a SPD můžeme vypsat pomocí příkazu

bash#setkey -D
192.168.0.227 192.168.0.226
        esp mode=transport spi=769(0x00000301) reqid=0(0x00000000)
        E: 3des-cbc  f6ddb555 acfd9d77 b03ea384 3f265325 5afe8eb5 573965df
        seq=0x00000000 replay=0 flags=0x00000000 state=mature
        created: Jun  1 01:13:14 2004   current: Jun  1 01:13:17 2004
        diff: 3(s)      hard: 0(s)      soft: 0(s)
        last:                           hard: 0(s)      soft: 0(s)
        current: 0(bytes)       hard: 0(bytes)  soft: 0(bytes)
        allocated: 0    hard: 0 soft: 0
        sadb_seq=1 pid=21880 refcnt=0
192.168.0.226 192.168.0.227
        esp mode=transport spi=513(0x00000201) reqid=0(0x00000000)
        E: 3des-cbc  7aeaca3f 87d060a1 2f4a4487 d5a5c335 5920fae6 9a96c831
        seq=0x00000000 replay=0 flags=0x00000000 state=mature
        created: Jun  1 01:13:14 2004   current: Jun  1 01:13:17 2004
        diff: 3(s)      hard: 0(s)      soft: 0(s)
        last:                           hard: 0(s)      soft: 0(s)
        current: 0(bytes)       hard: 0(bytes)  soft: 0(bytes)
        allocated: 0    hard: 0 soft: 0
        sadb_seq=0 pid=21880 refcnt=0

Tady vidíme dvě SA pro router kryton. První SA nám říká, že paket jdoucí z 192.168.0.227 na 192.168.0.226 se SPI=769 je dešifrován tímto klíčem: 0x0xf6ddb555acfd9d77b03ea3843f2653255afe8eb5573965df. Druhé SA nám říká, že paket jdoucí z 192.168.0.226 na 192.168.0.227 se SPI=513 je šifrován tímto klíčem: 0x7aeaca3f87d060a12f4a4487d5a5c3355920fae69a96c831.

bash#setkey -DP
192.168.0.227[any] 192.168.0.226[any] any
        in ipsec
        esp/transport//require
        created: Jun  1 01:13:14 2004  lastused:
        lifetime: 0(s) validtime: 0(s)
        spid=1856 seq=1 pid=21881
        refcnt=1
192.168.0.226[any] 192.168.0.227[any] any
        out ipsec
        esp/transport//require
        created: Jun  1 01:13:14 2004  lastused:
        lifetime: 0(s) validtime: 0(s)
        spid=1849 seq=0 pid=21881
        refcnt=1

Tyto dvě SP na routeru kryton nastavují policy. První SP nám říká, že pro příchozí pakety jdoucí ze 192.168.0.227 na 192.168.0.226 má aplikovat ESP. U druhé SP je to analogické. Že je provoz šifrovaný se můžeme přesvědčit např. tcpdumpem na rozhraní, kterým pakety odchází do sítě.

Jak si můžeme domyslet, nebylo by zrovna ideální udržovat větší počet takovýchto manuálních SA a politik. Proto si příště ukážeme jak nám může pomoci IKE daemon. Také si povíme něco o L2TP, ukážeme si konfigurace pro sdílené klíče a X.509 certifikáty.

Za konzultace bych chtěl poděkovat jednomu z hlavních vývojářů ipsec-tools Michalu Ludvigovi.

Autor externě spolupracuje se společností IPEX a.s., která mu částečně umožnila práci na tomto článku.

O společnosti IPEX a.s.

Společnost IPEX a.s. (http://www.ipex.cz) je jedním z nejsilnějších poskytovatelů internetu a telekomunikačních služeb v České Republice. Celorepublikově nabízí bezdrátové i pevné připojení, ADSL, WiFi. Společnost IPEX a.s. poskytuje komplexní telekomunikační řešení.

Zdroje:

Související články

IPSec v kernelu 2.6 - II

Odkazy a zdroje

www.ipsec-howto.org
www.kame.net

Další články z této rubriky

Úvod do Dockeru (1)
Paralelizace běžných činností v konzoli pomocí GNU Parallel
Unixové nástroje – 26 (triky pro práci v Bashi)
Unixové nástroje – 25 ((s,c)fdisk, gdisk, parted a findmnt)
Linux: systémové volání splice()

Diskuse k tomuto článku

3.6.2004 09:15 JR
Rozbalit Rozbalit vše Paradni clanek
Odpovědět | Sbalit | Link | Blokovat | Admin
Dekuji autorovi za tento clanek. Uz se tesim na dalsi pokracovani. Jeste bych se chtel zeptat, zda jde pomoci ipsec prokolu udelat prihlasovani na zaklade prihlasovacich udaju. Tj. ne na zaklade IP adresy, ale na zaklade toho, ze zadam jmeno a heslo (tak jak je to v PPTP). Pokud ano, pak jestli se bude serial timto take zabyvat?
3.6.2004 09:59 Pavel
Rozbalit Rozbalit vše Re: Paradni clanek
IPSEC ve firmě uspěšně používáme více než rok (OpenSwan). Ověřování na základě jména a hesla patrně nastavit nelze, lze ale použít ověřování na základě certifikátů - certifikát je jiný pro každého oprávněného uživatele. Používáme to pro připojování mobilních klientů s Win2K/XP do fiemní sítě. Do Woken se naimportuje certifikát, nastaví se konfigurační soubor ipsec klienta a už to frčí - ověřování pomocí certifikátu je možná ještě šikovnější než ověřování pomocí uživatelského jména a hesla. Sice jsem to ještě nezkoušel, ale určitě to jde nastavit i pro komunikaci net - gateway - gateway1 - net1 s OpenSwan na obou branách.
3.6.2004 15:24 Kosac
Rozbalit Rozbalit vše Re: Paradni clanek
Nechcete sepsat jednoduche howto na to jak jste zprovoznili připojování mobilních klientů s Win2K/XP do fiemní sítě? Treba jen v bodech jak postupovat. Zkousim to s openvpn a nejak se tim nemuzu prokousat...
3.6.2004 15:41 Pavel
Rozbalit Rozbalit vše Re: Paradni clanek
Celkem povedený návod je na http://vpn.ebootis.de Pokud budete mít problémy (a budu znát řešení), rád Vám poradím.
3.6.2004 10:17 cervajs | skóre: 14
Rozbalit Rozbalit vše Re: Paradni clanek
IPSec jako takovy tuhle vec neumoznuje. Mozne to je pomoci protokolu l2tp, ktery bezi nad IPSecem a napr. winxp ho pouzivaji k tunelovani. Informace budou v dalsim dilu.
3.6.2004 09:34 AB
Rozbalit Rozbalit vše autentifikace???
Odpovědět | Sbalit | Link | Blokovat | Admin
IMHO slovo "autentifikace" neexistuje v ceskem slovniku
3.6.2004 10:05 B0biN | skóre: 21 | blog: B0biN bloguje
Rozbalit Rozbalit vše Re: autentifikace???
(lol) take neni v ceskem slovniku a casto se pouziva ...!!! kua ze si musi vzdycky nekdo rypnout ... grr
cd /pub | more beer
3.6.2004 10:25 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: autentifikace???
LOL není slovo, ale akronym ;) Česky je autentizace, a nevidím důvod, proč psát babydžka, když můžeme psát babička...
3.6.2004 10:22 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Dobrý článek.
Odpovědět | Sbalit | Link | Blokovat | Admin
Díky.
3.6.2004 12:00 petrxh
Rozbalit Rozbalit vše GPRS, t-mobile, NAT-T
Odpovědět | Sbalit | Link | Blokovat | Admin
Je IPSec pouzitelny i pro pristup z GPRS site T-Mobile? Pokud vim, zakaznici jsou pripojeni v jakesi "lokalni siti", ktere je umoznen pristup na internet pres NAT.
3.6.2004 15:48 Pavel
Rozbalit Rozbalit vše Re: GPRS, t-mobile, NAT-T
Na Eurotelu to funguje, kdysi (1.5 roku zpet) jsem to zkousel i na T-mobile, tusim ze byla potreba nekaka "pridana" sluzba od operatora. Nicmene mi to fungovalo.
4.6.2004 08:51 Hermelin
Rozbalit Rozbalit vše Re: GPRS, t-mobile, NAT-T
A povedlo se nekomu rozhejbat nat-t pres racoon ? ja uz se s tim peru docela dlouho a ne a ne to zprovoznit.
3.6.2004 12:33 Vskutečnosti Saýc | skóre: 7
Rozbalit Rozbalit vše Skvelej clanek
Odpovědět | Sbalit | Link | Blokovat | Admin
Skvelej clanek, proc jsem si ho jenom nevsiml driv nez na nej nekdo dal odkazl v linux@linux.cz ? :(

Doufam ze pokracovani bude brzo :)
3.6.2004 15:13 Vskutečnosti Saýc | skóre: 7
Rozbalit Rozbalit vše Re: Skvelej clanek
ehm, on je dnesni. tka nic :)
3.6.2004 17:58 Vskutečnosti Saýc | skóre: 7
Rozbalit Rozbalit vše Chybne odkazy
Odpovědět | Sbalit | Link | Blokovat | Admin
kdyztak pridejte tem odkazum na konci clanku http:// na zacatek, protoze adresa http://www.abclinuxu.cz/clanky/show/www.kame.net neni zrovna koser :)
6.6.2004 13:37 Zdeněk Štěpánek | skóre: 57 | blog: uz_mam_taky_blog | varnsdorf
Rozbalit Rozbalit vše internet ???
Odpovědět | Sbalit | Link | Blokovat | Admin
Zdravim

Ponekud mi neni jasne jak mezi 192.168.0.226 a 192.168.0.227 muze byt internet. Ale to jiste chapavy ctenar dokaze prelousknout.

Ja budu za cas resit tunel skrz internet mezi dvema rozsahlyma sitema (verejna vs. verejna IP), doufam ze to bude v nasledujicim dilu. GRE tunel na tohle asi vhodny neni.

Zdenek
www.pirati.cz - s piráty do parlamentu i jinam www.gavanet.org - czfree varnsdorf
18.6.2004 22:20 Predseda
Rozbalit Rozbalit vše POKRACOVANI ????
Odpovědět | Sbalit | Link | Blokovat | Admin
Zdravim, kdy se muzeme tesit na dalsi pokracovani ??? Zda se mi to uz docela dlouho. Diky
21.6.2004 12:24 cervajs | skóre: 14
Rozbalit Rozbalit vše Re: POKRACOVANI ????
clanek maji od konce minuleho tydne v redakci
24.6.2004 23:02 javes | skóre: 8 | Ostrava Poruba
Rozbalit Rozbalit vše Re: POKRACOVANI ????
Bomba clanek, vsimnul jsem si ho az ted, ale to je dobre, nebude se mi zdat, ze pokracovani je za dlouho :)

Diky Autorovi!

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.