On 03/30/11 10:38, kron24:
- zatim nevim o jednoduchem navodu (ale Dan uz ho jednou psal,
tak ho snad najdu)
Ja ho mezitim nasel ve svem archivu, sice asi nekde v hlubinach archivu
teto konference lezi, snad se ael nestaen tolik, kdyz ho preposlu jeste
jednou. Nezapomente ale, ze nize okopirovany text vznikl na pocatku jara
roku 2002 pojednava o verzich OS ktere nekteri z vas mozna behem sve
odborne kariery uz nestihli potkat.
Text jsem needitoval a tak tam zustala nabidka, z ebudu reagovat an
doplnujici dotazy - nahlednete ale realisticky, ze s odstupem deviti let
bude spise obtizne najit otazku, na kterou bych dokazal uspokojive
odpovedet.
Dan
Informace se tykaji komunikace W2k resp FreeBSD versus FreeBSD, CISCO je
zatim zcela neozkousene.
Takze - nezkonkurencne nejspolehlivejsi je IPSec bez key-managementu,
FreeBSD proti FreeBSD, z pevne adresy na pevnou. To nema vubec zadne
kontraindikace (krome nizsi bezpecnosti kvuli nevymenovanym klicum), je to
spolehlive a i zatizeni CPU je male. Bohuzel, tato varianta neprichazi pro
komunikaci s W2k vubec v uvahu (tam nelze klice staticky nastavit, alespon ne
prostredky o kterych jsem kdy slysel).
Nicmene, pokud chceme dynamickou spravu klicu (tu potrebujeme pokud je
jetna strana W2k), pak to uz je trochu jina.
Oproti dobam, kdy jsem jej naposled pouzival je stabilita prislusneho daemona (racoon) nekonecne lepsi. Nespadl mi ani jednou a klice vymenoval bez zavahani. Je pravda, ze v okamziku vymeny klicu se cas od casu par paketu komunikace ztrati, ale nenastava to vzdy a obvykle jde skutecne spise o jednotky paketu a doba vypadku je rozhodne pod zlomky vterin. Pokouseli jsme se ho ruzne trapit, dokonce jsme mu jinym programem z kernelu mazaly klice, ktere on tam pracne dotlacil a i z toho se (na strane odesilajici) dokaze pomerne slusne vzpamatovat (na strane prijimajici to nedokaze - a neni to ani mozne, na druhou stranu, to, ze mu nekdo v jadre vymaze klice asi nelze povazovat za "normalni"). Nicmene, nejsem zcela klidny - jednak v TODO je poznamka, ze je nutne vylepsit "rekeying" a rto jiste ma nejaky duvod (ackoliv me pripadalo, ze funguje dobre), jednak, problemy, ktere se tehdy ve FIO objevovaly mohly byt zpusobeny tim, ze komunikace probihala po saturovane az pretizene
lince. To sice jsem schopen castecne simulovat, ale nemam poneti nakolik je
takova simulace prukazna.
Zkratka receno, nepodarilo se mi racoona dostat do situace, o ktere se
domnivam, ze by mohla realne nastavat a on by selhal - ale presto mu uplne
neverim. Nicmene, asi bych to s nim zkusil.
Tak. A jake moznosti mame v tomto pripade. Autentizaci M$ Kerberosem vynechavam,
protoze pro ni jsem na FreeBSD stranu nenasel zadny "protikus". Nenasel jsem
ani zminku, ze by to nekdo pouzival.
Autentizace pomoci pre-shared-key - funguje jak ve variante F<->F tak W<->F, Windows by mely mit instalovany
"high-encryption patch" (ten je normalne dostupny). ISAKMP protokol, ktery se na komunikaci pouziva definuje
"main" a "agressive" mod navazovani spojeni - bohuzel, podle vsecho co jsem dokazal zjistit i vydisassemblovat,
Windows umi pouze "main". To naprosto vylucuje (z principu designu protokolu) v tomto pripade variantu, ze by komunikace
probihala mezi Windows s dynamickou adresou - obe strany musi navzajem sve adresy znat predem v konfiguraci.
Autentizace prostrednictvim X509 je jednoducha (tedy az na problem WIndows, jehoz
reseni trvalo skoro 3 hodiny spocivajici v tom, ze databanky klicu jsou ve skutecnosti
dve, o cemz se nikde nemluvi - a vsechny normalni utility umoznuji pracovat s osobnimi
certifikaty v prvni bance, jenze pro ucely IPSec musi byt certifikat vlozen do te druhe).
I tady plati, ze obe adresy musi byt pevne. A bohuzel, je zde jeste jedno omezeni, obe
strany povazuji klic za autenticky pokud jej podepise pevne nakonfigurovana CA. To
bohuzel prakticky znemoznuje revokovat konkretni klice (napr. pri odchodu zamestnance).
Zde jeste neni zkoumani zcela dokonceno - je jiste, ze na strane BSD lze pomerne snadno
zasahnout do konu a logiku "schvalovani" klice zmenit, na stane Windows to ale
takhle nepujde - tam bych ale zase vsadil na moznost, ze WIndows by mohly, mozna, on-line
kontaktovat nejakym protokolem CA a zjistovat zda aktualni klic je stale platny. Pokud to
delaji, je jakz-takz vyhrano, pok
ud ne, je to spise neresitelne.
Co se tyce pripojeni a tunellingu stanic s nahodnou adresou, tam jsem pomerne skepticky. To co
jsem zkousel, bylo "znasilnit" prostredky urcene pro staticke IP pro ucely IP dynamicke -
coz se v zasade nepovedlo. Pro IPSec klice typu "mobileIP" ale neni v jadru FreeBSD vubec
podpora.
Pro ucely techto konfiguraci predpokladam, ze laskavy ctenar je alespon
zakladne seznamem s principy IPSec a jeho implementaci na FreeBSD
(protoze jinak je to na obrovsky dlouhe povidani), vi jaka je uloha
racoon daemona v cele te veci, neni mu uplne neznamy pojem Oakley/ISAKMP
(protokol pouzivany (nejen) Racoonem pro vymenu informaci), ma alespon
zakladni prehled o problematice PKIX, X509 a tak podobne.
Jsem pripraven reagovat na jakoukoliv doplnujici otazku; nejsem, ani po
teto dobe, pripraven provest kompletni skoleni "od podlahy" ktere by
nepredpokladalo zadne predchozi znalosti ze zminenych oboru.
Tolik uvod. Zacneme.
Jeste technicka poznamka - sice jsem svemu software zakazal zalamovat
radky, ale stat se to, preci jen, muze - proto kazdy radek jest
predchazen znakem '!'. Pokud radek timto znakem nezacina, je to nejspis
zalomenina z radku predchoziho.
[1]=== Tunnel FreeBSD vs FreeBSD, static, X509 ====================
Nejprve tunnel FreeBSD versus FreeBSD na pevnych znamych IP adresach
autentizovane X509 certifikaty. Tahle konfigurace je v zasade
"normalni", tedy takova, kterou by clovek z examplu a navodu odvodil.
Jediny hacek, na ktery lze narazit je, ze je nutne aby pouzity
certifikat obsahoval polozku "X509v3 Subject Alternative Name" typu "IP"
s tou IP adresou, ze ktere bude certifikat pouzivan. To mozna
zkomplikuje pouzivani certifikatu podepsanych cizimi CA, protoze nelze
obecne rict, zda CA extenze obsazene v requestu ponecha nebo odstrani.
Jiny me znamy hacek tam neni.
Takze:
---- ipsec.conf (pro setkey) ------------------------
!flush;
!spdflush;
!spdadd 10.50.20.0/24 10.50.21.0/24 any -P out ipsec
esp/tunnel/195.113.19.80-195.113.25.235/require;
!spdadd 10.50.21.0/24 10.50.20.0/24 any -P in ipsec
esp/tunnel/195.113.25.235-195.113.19.80/require;
!spdadd 195.113.19.80/32 195.113.25.235/32 any -P out ipsec
esp/transport/195.113.19.80-195.113.25.235/use;
!spdadd 195.113.25.235/32 195.113.19.80/32 any -P in ipsec
esp/transport/195.113.25.235-195.113.19.80/use;
---- ipsec.conf (pro setkey) - END ------------------
Konfigurak plati pro obe strany - normalne by se "proti" delala
konfigurace tak, ze by se zamenily IP adresy - jenze tady je vse totalne
symetricke, takze by vyslo totez.
---- racoon.conf (pro racoon) ------------------------
!path include "/usr/local/etc/racoon" ;
!path certificate "/usr/local/etc/racoon" ;
!padding
!{
! maximum_length 20; # maximum padding length.
! randomize off; # enable randomize length.
! strict_check off; # enable strict check.
! exclusive_tail off; # extract last one octet.
!}
!timer
!{
! counter 5; # maximum trying count to send.
! interval 20 sec; # maximum interval to resend.
! persend 1; # the number of packets per a send.
! phase1 30 sec;
! phase2 15 sec;
!}
!remote 195.113.25.235
!{
! exchange_mode aggressive,main;
! doi ipsec_doi;
! situation identity_only;
! my_identifier address;
! certificate_type x509 "dz.pem" "dzk.pem";
! nonce_size 16;
! lifetime time 5 min; # sec,min,hour
! initial_contact on;
! proposal_check obey; # obey, strict or claim
! proposal {
! encryption_algorithm 3des;
! hash_algorithm sha1;
! authentication_method rsasig ;
! dh_group 2 ;
! }
!}
!sainfo address 195.113.19.80 any address 195.113.25.235 any
!{
! pfs_group 1;
! lifetime time 30 sec;
! encryption_algorithm 3des ;
! authentication_algorithm hmac_md5;
! compression_algorithm deflate ;
!}
!sainfo address 10.50.20.0/24 any address 10.50.21.0/24 any
!{
! pfs_group 1;
! lifetime time 5 min;
! encryption_algorithm 3des ;
! authentication_algorithm hmac_md5;
! compression_algorithm deflate ;
!}
---- racoon.conf (pro racoon) - END ------------------
Konfigurace pro protistranu se udela tak, ze se prohodi IP adresy.
Parametr certificate_type specifikuje jmeno souboru s certifikatem a
jmeno souboru s klicem. Na *protejsi strane* pak musi byt v adresari
[path certificate] klic certifikacni autority, ktera jej podepsala.
Jmeno souboru v tomto adresari je v obvyklem OpenSSL formatu, takze
<hash>.0 kde hash zjistime volanim x509 s parametrem -hash.
[2]=== Tunnel FreeBSD vs Windows 2000, dynamic, X509 ===============
Ten realizovae neumim primo, pouze jako variantu "TRANSPORT FreeBSD vs
Windows 2000, dynamic, X509" a skrz takto ustavene IPSec spojeni pak
protlacim PPTP, ktere fakticky vytvari tunnel.
[3]=== Transport FreeBSD vs Windows 2000, dynamic, X509 ============
Na strane Windows predpokladam nikoli Basic W2k, ale W2k se vsemi
dostupnymi patchy. Je mozne, ze nejsou potrebne vsechny, ale neoveroval
jsem minimalni seznam nutnych. Jiste je, ze urcite musi byt instalovany
High Encryption Patch a pravdepodobne i SP2. Instalovany musi byt take
Client Microsoft Network, nemusi vsak byt bindnuty k zadne sitove karte
a prislusny service muze byt disabled.
---- ipsec.conf (pro setkey, strana FreeBSD) --------
!flush;
!spdflush;
---- ipsec.conf (pro setkey) - END ------------------
---- racoon.conf (pro racoon, strana FreeBSD) -------
!path include "/usr/local/etc/racoon" ;
!path certificate "/usr/local/etc/racoon" ;
!padding
!{
! maximum_length 20; # maximum padding length.
! randomize off; # enable randomize length.
! strict_check off; # enable strict check.
! exclusive_tail off; # extract last one octet.
!}
!timer
!{
! counter 5; # maximum trying count to send.
! interval 20 sec; # maximum interval to resend.
! persend 1; # the number of packets per a send.
! phase1 30 sec;
! phase2 15 sec;
!}
!remote anonymous
!{
! exchange_mode main,aggressive;
! doi ipsec_doi;
! my_identifier address;
! certificate_type x509 "dz.pem" "dzk.pem";
! generate_policy on;
! nonce_size 16;
! lifetime time 1 min; # sec,min,hour
! initial_contact on;
! support_mip6 on;
! proposal_check obey; # obey, strict or claim
!
! proposal {
! encryption_algorithm 3des;
! hash_algorithm md5;
! authentication_method rsasig ;
! dh_group 2 ;
! }
!}
!
!sainfo anonymous
!{
! pfs_group 1;
! lifetime time 30 sec;
! encryption_algorithm 3des,des,cast128,blowfish ;
! authentication_algorithm hmac_sha1, hmac_md5;
! compression_algorithm deflate ;
!}
---- racoon.conf (pro racoon) - END ------------------
Konfigurace Windows neni zdaleka tak pekne vysvetlitelna.
Spustite mmc.exe.
Console->[Add/Remove Snap In]->Add
Vyberete [IP Security Policy Manager] a [Certificates] (V obou pripadech
Local Computer, u Certifikatu je jeste jedna volba, spravna je "Computer
Account").
[OK] az do zakladniho menu MMC.
Do "Console Root\Certificates (Local Computer)\Trusted Root
Certification Authorities\Certificates" date certifikaty certifikacnich
autorit klicu obou stran (pridava se pres prave tlacitko, "All
tasks->Import"), samozrejme, pokud vydala oba klice jedna autorita,
staci jen jednou.
Do "Console Root\Certificates (Local Computer)\Personal\Certificates"
date certifikat a klic generovany pro tuto stanici. Pro jistotu overite,
ze status pridaneho certifikatu je "OK"
Tim by mely byt certifikaty hotovy.
Jste je ale nutne vyrobit Polici - takze [IP Security Policy Manager], New (pravym tlacitkem), nejak ji pojmenovat NEMIT zasktnuti "Activate the default
response rule", zato zaskrtnout "Edit properties". Zalozku [General] nechat zcela byt, vytvorit novou IP Security Rule (tlacitko Add). THIS RULE
DOES NOT SPECIFY A TUNNEL, [All Network Connections], Use a Certificate from this Certificate Authority a Browse (najit Certifikat te CA, ktera podepsala klic
PROTEJSIHO stroje). Jsme v IP FILTER LISTS. Zde [Add], znovu [Add], SOurce Address je "My address", Destination je "specific DNS address"
nebo "specific IP address", protocol je Any, a mame [Finish] a po nem [Close]. Jsme zpet v "IP filter lists", kde zaskrtneme prave vyvoreny
a [Next], "Require security" (NOT Optional!) a [Next] a [Finish] a [Close]. Jsme zpet v MMC. Pravym tlacitkem na prave vytvorene Polici a aktivovat
"Assign". Od teto chvile by to melo, teoreticky, fungovat. Muzete zkusit spustit
IPsecmon, zda je navazana konexe. Podotykam, ze ta se navazuje "on demand",
takze nejprve je nutne vyvolat nejakou komunikaci s druhym koncem (pozor, primo s druhym
koncem - to co mame NENI tunnel).
------------------------------------------
Tak, a ted kdyz mame IPSec, muzeme pres nej prohnat tunnel.
Na strane FreeBSD je nutne nainstalovat mpd
---- mpd.conf (pro mpd, strana FreeBSD) -------
!default:
! load pptp0
! load pptp1
!# load debug
!
!# PPTP Server
!debug:
! log ecp ecp2 ccp ccp2 ccp3
!
!pptp0:
! new -i ng0 pptp0 pptp0
! set bundle disable multilink
! set bundle enable compression
! set bundle enable encryption
! set iface disable on-demand
! set iface enable proxy-arp
! set iface idle 0
! set ipcp ranges 192.168.3.1/32 192.168.3.2/32
! set ipcp dns 192.168.1.1
! set link disable pap
! set link enable chap
! set link keep-alive 10 60
! set ccp enable mppc
! set ccp yes mppc
! set ccp disable mpp-compress
! set ccp no mpp-compress
! set ccp disable mpp-e40
! set ccp yes mpp-e128
! set ccp enable mpp-e128
! set ccp enable mpp-stateless
! set ccp yes mpp-stateless
!
!pptp1:
! new -i ng1 pptp1 pptp1
!
! set bundle disable multilink
! set bundle enable compression
! set bundle enable encryption
! set iface disable on-demand
! set iface enable proxy-arp
! set iface idle 0
! set ipcp ranges 192.168.3.5/32 192.168.3.6/32
! set ipcp dns 192.168.1.1
! set link enable acfcomp protocomp
! set link disable pap
! set link enable chap
! set link keep-alive 10 60
! set ccp enable mppc
! set ccp yes mppc
! set ccp disable mpp-compress
! set ccp no mpp-compress
! set ccp disable mpp-e40
! set ccp yes mpp-e128
! set ccp enable mpp-e128
! set ccp enable mpp-stateless
! set ccp yes mpp-stateless
---- mpd.conf (pro mpd, strana FreeBSD) - END -
---- mpd.links (pro mpd, strana FreeBSD) -------
!pptp1:
! set link type pptp
! set pptp self 62.65.158.74
! set pptp enable incoming
! set pptp disable originate
!pptp1:
! set link type pptp
! set pptp self 62.65.158.74
! set pptp enable incoming
! set pptp disable originate
---- mpd.links (pro mpd, strana FreeBSD) - END -
---- mpd.secret (pro mpd, strana FreeBSD) -------
!joe "foobar" 192.168.1.1
!bob "\x34\"foo\n" 192.168.1.10/24
!sal "yipee" 192.168.1.254
---- mpd.secret (pro mpd, strana FreeBSD) - END -
To je konfigurace mpd umoznujici soucasne pripojeni nejvyse dvou uzivatelu. Pro
vice uzivatelu si to jiste dokazete uz rozsirit sami. V jadre musi byt pritomen modul
"netgraph", zvlastni upozorneni, z klienta musi na server dojit IP pakety typu
47 (GRE, Generic Routing Encapsulation).
Na strane Windows predpokladam nikoli Basic W2k, ale W2k se vsemi
dostupnymi patchy. Je mozne, ze nejsou potrebne vsechny, ale neoveroval
jsem minimalni seznam nutnych. Jiste je, ze urcite musi byt instalovany
High Encryption Patch a pravdepodobne i SP2. Instalovany musi byt take
Client Microsoft Network, nemusi vsak byt bindnuty k zadne sitove karte
a prislusny service muze byt disabled.
Na Windowsech se [Start]->[Settings]->[Network COnnections]->[Make New
Connection] zahaji vytvareni VPN. Spravna polozka je "Connect to a private network throught
Internet". IP adresa je ta protistrany, dalsi polozku si vyberete podle pozadavku a tim je
hotovo.
Pri pripojeni je nutne zadat jmeno a heslo, vetsi uspech lze dosahnotu
pokud pouzite jmeno a heslo je totozne s parem uvedenym v mpd.secret
Tato konfigurace aktivuje i kryptovani v ramci PPTP tunelu - takze
sifrovany tunnel je honen sifrovanym transportnim kanalem IPSecu - to je mozne
zbytecne a ma to dopad na vykon, i kdyz aj nic nepoznal (ale zase je to
paranoidni) - sifrovani tunelu lze zmenou mpd.conf zakazat.
Pri prvnim pripojovani je nutne vlezt do [Properties], zalozka [Security], vybrat
"Advanced" a [Settings]. Data Encryption = "Maximum strength ..." , Logon
security - Allow these protocols: MS-CHAP, MSCHAP v2. [OK], [OK], vyplnit jmeno a heslo a dial..
------------------------------------------------------------------
Z praktickych duvodu doporucuji rozchodit obe nezavisle veci nezavisle
- tj nejprve IPsec transport bez tunelu a pak tunel bez IPsecu a pak teprve
oboji.
Logovani IPsec na strane Windows se zapne v registry:
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\PolicyAgent\Oakley]
"EnableLogging"=dword:00000001
"Debug"=dword:000000ff
log se vytvari v %SystemRoot%\debug\oakley.log - ale format neni nikde
popsany, takze je nutna intuice a znalost ISAKMP protokolu.
O moznosti logovani PPTP tunelu na strane Windows nic nevim.
Hodne stesti a pripadne se zeptejte. Predem ale upozornuju, ze nemusim
byt schopen na dalku problem vyresit, zejmena v pripade, kdy se to proste za
stejne situace na stejny pokyn zachova jinak nez jak se to chova me tady.
Dan
====================================================================
--
FreeBSD mailing list ([email protected])
http://www.freebsd.cz/listserv/listinfo/users-l