Kategória: Internet

Az OpenVPN az egyik legelterjedtebb VPN típus a PPtP és az L2TP mellett.

A PPtP manapság már csak történelmi jelentőséggel bír,

Wireles ("Drótnélküli") router
A routerek egy része is kezeli az OpenVPN-t. Az OenVRT az arra alkalmas eszközökön lehetővé teszi a használatát

Jellemzője, hogy nyílt forráskódú, a beállításainak a száma a csillagokéval vetekszik.
Ez a jellemzője egyfelől hatalmas előny, hiszen ha bármely használt technikai részmegoldás kompromittálódik, egyszerűen választhatunk helyette másikat (erre jó példa, hogy amikor a BlowFish cipher kompromittálódott, egy beállítással le lehetett cserélni). Ugyanez hatalmas hátrány, hiszen a jó beállítás jelentősen nagyobb felkészültséget igényel, mint a másik két említett versenyző esetén.

Az OpenVPN sokáig a BlowFish1 titkosítási eljárást favorizálta, azonban az kompromittálódott. Szerencsére a készítők nem annak az utódját a Twofish2-t választották, hanem a szabványos AESt3 kódolás családot, bár konkrét megvalósítástól függően sok más ciphert is használhatunk.
Ugyan publikáltak az AES-re több részlegesen sikeres törési eljárást, a polgári életben megfelelő biztonságot nyújt. Az ismert törési eljárások a törés nehézségét nem csökkentik a gyakorlatban elfogadható mértékűre. Ha a hozzáértők nem köveznek meg, azt mondom, hogy 1-3 bittel csökkentik az effektív kulcshosszt, ami azt jelenti, hogy 256 bit helyett „csak” 253 bit kulcsot kell törni.

Az OpenVPN több ciphert támogat, a konkrét lista azonban az adott telepítés paraméterezésétől függ. A mintaként használt LEDE rendszeren ezt a listát kapjuk az openvpn --show-ciphers utasításra:

AES-128-CBC (128 bit key, 128 bit block)
AES-128-CFB (128 bit key, 128 bit block, TLS client/server mode only)
AES-128-CFB1 (128 bit key, 128 bit block, TLS client/server mode only)
AES-128-CFB8 (128 bit key, 128 bit block, TLS client/server mode only)
AES-128-GCM (128 bit key, 128 bit block, TLS client/server mode only)
AES-128-OFB (128 bit key, 128 bit block, TLS client/server mode only)
AES-192-CBC (192 bit key, 128 bit block)
AES-192-CFB (192 bit key, 128 bit block, TLS client/server mode only)
AES-192-CFB1 (192 bit key, 128 bit block, TLS client/server mode only)
AES-192-CFB8 (192 bit key, 128 bit block, TLS client/server mode only)
AES-192-GCM (192 bit key, 128 bit block, TLS client/server mode only)
AES-192-OFB (192 bit key, 128 bit block, TLS client/server mode only)
AES-256-CBC (256 bit key, 128 bit block)
AES-256-CFB (256 bit key, 128 bit block, TLS client/server mode only)
AES-256-CFB1 (256 bit key, 128 bit block, TLS client/server mode only)
AES-256-CFB8 (256 bit key, 128 bit block, TLS client/server mode only)
AES-256-GCM (256 bit key, 128 bit block, TLS client/server mode only)
AES-256-OFB (256 bit key, 128 bit block, TLS client/server mode only)

The following ciphers have a block size of less than 128 bits,
and are therefore deprecated. Do not use unless you have to.

BF-CBC (128 bit key by default, 64 bit block)
BF-CFB (128 bit key by default, 64 bit block, TLS client/server mode only)
BF-OFB (128 bit key by default, 64 bit block, TLS client/server mode only)
CAST5-CBC (128 bit key by default, 64 bit block)
CAST5-CFB (128 bit key by default, 64 bit block, TLS client/server mode only)
CAST5-OFB (128 bit key by default, 64 bit block, TLS client/server mode only)
DES-CBC (64 bit key, 64 bit block)
DES-CFB (64 bit key, 64 bit block, TLS client/server mode only)
DES-CFB1 (64 bit key, 64 bit block, TLS client/server mode only)
DES-CFB8 (64 bit key, 64 bit block, TLS client/server mode only)
DES-EDE-CBC (128 bit key, 64 bit block)
DES-EDE-CFB (128 bit key, 64 bit block, TLS client/server mode only)
DES-EDE-OFB (128 bit key, 64 bit block, TLS client/server mode only)
DES-EDE3-CBC (192 bit key, 64 bit block)
DES-EDE3-CFB (192 bit key, 64 bit block, TLS client/server mode only)
DES-EDE3-CFB1 (192 bit key, 64 bit block, TLS client/server mode only)
DES-EDE3-CFB8 (192 bit key, 64 bit block, TLS client/server mode only)
DES-EDE3-OFB (192 bit key, 64 bit block, TLS client/server mode only)
DES-OFB (64 bit key, 64 bit block, TLS client/server mode only)
DESX-CBC (192 bit key, 64 bit block)
RC2-40-CBC (40 bit key by default, 64 bit block)
RC2-64-CBC (64 bit key by default, 64 bit block)
RC2-CBC (128 bit key by default, 64 bit block)
RC2-CFB (128 bit key by default, 64 bit block, TLS client/server mode only)
RC2-OFB (128 bit key by default, 64 bit block, TLS client/server mode only)

Tekintélyes lista, még akkor is, ha a gyakorlatban csak a piros sorok feletti rész használata a javasolt (elfogadható).

Ha ugyanezt a parancsot PC-n futó UBUNTU alatt adjuk ki, a lista jelentősen impozánsabb lesz, tartalmazni fog CAMELLIA és SEED alapú ciphereket is4

A lista tartalmaz elavult tételeket is, a régebbi rendszerekkel való kompatibilitás miatt. Ilyen például a 3DES, amit arra találtak ki amikor az 56 bites DES-t megtörték, hogy legyen valami, amíg az új szabvány elterjed (ez lett az AES). Ez a módszer manapság már elavult és lassú is.

Az Elliptic-curve (vajon hogyan mondják ezt magyarul? Elliptikus görbe?) alapú eljárások korszerűbbek, gyorsabbak és rövidebb kulcsokat igényelnek, mint az RSA.

Természetesen a TLS cipherek között is dúskálhatunk, a listát az openvpn --show-tls utasítással kérhetjük:

Available TLS Ciphers,
listed in order of preference:

TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384
TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384
TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA384
TLS-ECDHE-ECDSA-WITH-AES-256-CBC-SHA384
TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA
TLS-ECDHE-ECDSA-WITH-AES-256-CBC-SHA
TLS-DHE-RSA-WITH-AES-256-GCM-SHA384
TLS-DHE-RSA-WITH-AES-256-CBC-SHA256
TLS-DHE-RSA-WITH-AES-256-CBC-SHA
TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256
TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256
TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA256
TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA256
TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA
TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA
TLS-DHE-RSA-WITH-AES-128-GCM-SHA256
TLS-DHE-RSA-WITH-AES-128-CBC-SHA256
TLS-DHE-RSA-WITH-AES-128-CBC-SHA

Az egyes tételek azért ilyen hosszúak, mert felsorolják a kulcscsere_aláírás_WITH_Titkosítási algoritmus_Üzenet-authentikációa_algoritmus Igy egyetlen sorban leírja a teljes adatkezelési folyamatot.

Az egyes rendszereken ez a lista is jelentően eltérhet az itt bemutatottól.

Az AES titkosítás jellegzetessége miatt érdemes elgondolkodni, hogy 256 bites vagy 192 bites titkosítást használunk-e. A 4096 byte RSA kulcs erőssége hozzávetőleg a 192 bit AES kulcsnak felel meg. Itt filozófiai kérdés, hogy AES kulcshossznak 192 bitet választunk, az egyenszilárdságú tervezés elve alapján, vagy a 256-osat, mint legbiztonságosabbat.

Kisebb teljesítményű rendszereken 192 hosszúságot választom, mert valamivel kisebb terhelést jelent és egy minimális számítási teljesítménnyel rendelkező eszköz esetén ez számít.

Egy rendszer összeállításánál gondoljuk végig, hogy kell-e arra számítanunk, hogy nem saját kézben lévő eszközzel VPN kapcsolatot létesíteni. Ha nem, akkor egyszerűen tls-cipher kulcsszó után fel kell azokat a ciphereket sorolni, amire feltétlenül szükségünk van.

tls.cipher TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384:TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384

Arra oda kell figyelni, hogy legyen olyan cipher, ami kliens és szerver oldalon is szerepel (ez eltérő verziójú OpenVPN vagy SSL csomagok esetén lehet probléma).

A TLS rendszer ismert hibái miatt a tls-version-min 1.2 beállítása ajánlott. Ez biztosítja, hogy az OpenVPN ne használja a TLS 1.0 verzióját, ami ismert sebezhetőségeket tartalmaz, és az elavultnak tekinthető 1.1 verziót sem.

Természetesen a
auth none
cipher none

beállítással elérhető, hogy az OpenVPN se titkosítást, se azonosítást ne követeljen meg/szolgáltasson. Nagyon speciális esetekben, amikor biztonságos hálózaton használjuk a VPN-t, ahol csak logikai szerepe van, ez a beállítás lehet helyes, azonban a tapasztaltabbak azonnal felteszik a kérdést: ilyen feladatra miért VPN-t és miért nem VLAN-t használunk?

A man in the middle (közbeékelődéses) támadások elkerülése érdekében célszerű azonosítást beállítani.
Generáljuk le a kulcsot. (Általában ta.key néven emlegetik, de a neve tetszőleges lehet.)

openvpn --genkey --secret ta.key

Ugyanezt a kulcsot használjuk a szerveren és az összes kliensen is. (Természetesen tartsuk titokban.)
A szerveren:
tls-auth ta.key 0

A klienseken:
tls-auth ta.key 1

Valamint a szerveren:

remote-cert-tls client

A klienseken:

remote-cert-tls server

paramétert célszerű beállítani.

A kulcsok elosztása

A kulcsokat legeneráljuk. (Az Easy-Rsa csomagban jó lepésről-lépésre utasítás van hozzá.) Ha a kulcsok minősége különösen fontos, akkor vizsgáljuk meg az Easy-RSA csomagban található scripteket és utasításokat, ezután pedig a kulcsokat kissé módosított paraméterekkel generáljuk le, vagy találhatóak nagyon biztonságok kulcsok kézi generálására leírások, válasszunk egyet.

A kulcsokat mindig olyan gépen generáljuk, amelyben megbízunk, és amelynek az entrópiája magas, hogy jó véletlen számokkal lehessen dolgozni.

Egy lehetséges ellenőrzés:

cat /proc/sys/kernel/random/entropy_avail

Ha a visszaadott érték 200 alatt van, akkor nem nyert.

Egy mérés szerint egy routeren ez az érték 290, egy grafikus felülettel ellátott munkaállomáson 3306.

Ha van lehetőségünk több Linuxos/Unixos géphez is hozzáférni, akkor a legmagasabb értékkel rendelkezőn generáljuk a kulcsokat.
A virtuális gépek, illetve a router ilyen feladatra csak erősen korlátozottan alkalmas, mert az entrópia értéke viszonylag alacsony, ezért az előállított véletlen szám nem lesz eléggé kiszámíthatatlan.

A legenerált kulcsokat a megfelelő helyeken kell elhelyezni.
Legyenek a kulcsaink a következők (beszélő neveket választottam):
ca.key
ca.crt
server.key
server.crt
kliens.key
kliens.crt
dh.4096.pem
ta.key

A ca.key „megy a fiókba”. Az igazából csak akkor kell, ha újabb kulcsokat szeretnénk generálni.

A ca.crtserver.key server.crt dh.4096.pem ta.key kell a szerverre.
A ca.crt kliens.key kliens.crt ta.key kell a kliensre. Természetesen, ha egy szerverhez több kliens tartozik, akkor mindegyikhez célszerű saját kliens.key-t és kliens.crt-t generálni (kliens1.key, kliens2.key).

Most nem bonyolítanám, de ha van rá ok, akkor a szerver- és a klienskulcsokat lehet eltérő ca.key-ből származtatni.

A naiv módszer, hogy minden kulcsot mindenhova bemásolunk, nagyon komoly biztonsági kockázatokat rejt magában, ezért ne csináljunk ilyet.

Hálózati struktúra

Hálózat-hálózat kapcsolat

A kulcsok és a titkosítási algoritmusok kiválasztásával párhuzamosan a hálózati struktúra megtervezése is alapvető, hiszen azért tervezünk VPN kapcsolatot, hogy azon adatokat mozgassunk.

A hálózati struktúra megtervezése már akkor megkezdődik, amikor megszületik a döntés a VPN használatáról.

Az összekapcsolt egységek szerint:

  • Munkaállomások közötti (eszközök közötti) kapcsolat
  • Munkaállomás és hálózat közötti kapcsolat
  • Hálózatok közötti kapcsolat

Az adatáramlás módja szerint:

  • Routolt
  • Bridgelt
Kliens-hálózat kapcsolat

Az OpenVPN fejlesztői alapesetben a routolt hálózatot ajánlják (amikor az OpenVPN kapvsolatnak saját IP címe van), azonban különleges esetekre lehetővé teszik a bridge üzemmódot is. Ez utóbbit terjedelmi okokból itt nem tárgyaljuk.

A szerver alapértelmezett IP címe:

server 10.8.0.0 255.255.255.0

Ezt érdemes megváltoztatni, például így:

server 172.16.1.0 255.255.255.0

Munkaállomások közötti kapcsolat

A kékkel jelzett (viszonylag ritkán használt) helyi IP tartományt úgy kell megválasztani, hogy eltérjen az összekapcsolt hálózatokban használtaktól.

Egy gyors emléjeztető:

A helyi hálózatokra fenntartott IP tartományok:

A tömb méreteKezdőcímVégcímA kiosztható címek száma
24 bites tömb (/8 prefix)10.0.0.010.255.255.25516 777 216
20 bites tömb (/12 prefix)172.16.0.0172.31.255.2551 048 576
16 bites tömb (/16 prefix)192.168.0.0192.168.255.25565 536

A kapcsolat felépítése után már csak a routolási beállításokat kell korrekt módon elkészíteni.

Kapcsolódó cikkek

  1. Az angol nyelvű Wikipédia cikk a BlowFish cipherről[]
  2. Az angol nyelvű Wikipédia cikk a Twofish cipherről[]
  3. Az AESről szóló magyar nyelvű Wikipédia cikk[]
  4. az AES japán és koreai alternatívái.[]

Az oldal használatával elfogadja, hogy az sütiket használ További információ

A sütik használatát érdemes engedélyezni a böngészőben.
The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Bezár