Biztonság Road Warrior-oknak

A Unix/Linux szerverek üzemeltetése wikiből
(Változatok közti eltérés)
a
a (A hálózati kapcsolat titkosítása)
 
(egy szerkesztő 11 közbeeső változata nincs mutatva)
4. sor: 4. sor:
   
 
== Probléma ==
 
== Probléma ==
Az ember hajlamos nem kellőképpen mérlegelni asztali és hordozható számítógépei közti, azok alapvető mivoltából következő különbségeket. Ezek a különbségek konkrétan:
+
Az ember hajlamos nem kellőképpen mérlegelni asztali és hordozható számítógépei közti, jellegükből következő alapvető különbségeket. Ezek a különbségek konkrétan:
 
* hordozható géppel utazva internetezéskor esetleg megkérdőjelezhető megbízhatóságú vezeték nélküli hálózatokat veszünk igénybe, adatainkat lehallgathatják;
 
* hordozható géppel utazva internetezéskor esetleg megkérdőjelezhető megbízhatóságú vezeték nélküli hálózatokat veszünk igénybe, adatainkat lehallgathatják;
 
* a hordozható gép könnyebben elveszíthető, ellopásának veszélye jelentősebb;
 
* a hordozható gép könnyebben elveszíthető, ellopásának veszélye jelentősebb;
14. sor: 14. sor:
   
 
=== A hálózati kapcsolat titkosítása ===
 
=== A hálózati kapcsolat titkosítása ===
Ismeretlen megbízhatóságú wifi hálózatok igénybe vétele esetén valahogy meg kell oldani, hogy az átvitt adatok mégse nyílt szöveg formában, bárki számára lehallgatható módon kerüljenek átvitelre.
+
Ismeretlen megbízhatóságú wifi-hálózatok igénybe vétele esetén valahogy meg kell oldani, hogy az átvitt adatok mégse nyílt szöveg formában, bárki számára lehallgatható módon kerüljenek átvitelre.
 
Példák gyakran használt, önmagukban alapértelmezésként titkosítást nem tartalmazó protokollokra:
 
Példák gyakran használt, önmagukban alapértelmezésként titkosítást nem tartalmazó protokollokra:
 
* HTTP
 
* HTTP
22. sor: 22. sor:
 
A hálózati forgalmat tehát valamilyen módon titkosítani kell valamelyik alacsonyabb rétegben, egy titkosított csatornával kell megvédeni legalább a vezeték nélküli átviteli szakaszt.
 
A hálózati forgalmat tehát valamilyen módon titkosítani kell valamelyik alacsonyabb rétegben, egy titkosított csatornával kell megvédeni legalább a vezeték nélküli átviteli szakaszt.
 
Titkosított csatornát létrehozni két pont között azonban úgy lehet, ha mindkét oldal támogatja az alkalmazott alagutazási megoldást.
 
Titkosított csatornát létrehozni két pont között azonban úgy lehet, ha mindkét oldal támogatja az alkalmazott alagutazási megoldást.
Ennek fényében szükség lesz egy olyan "hozzáférési pontra", amely megbízhatónak vélt kapcsolattal rendelkezik az internet irányába, és a védendő gép el tudja érni valamilyen - nem feltétlenül biztonságos - hálózaton.
+
Ennek fényében szükség lesz egy olyan "hozzáférési pontra", amely megbízhatónak vélt kapcsolattal rendelkezik az Internet irányába, és a védendő gép el tudja érni valamilyen - nem feltétlenül biztonságos - hálózaton.
 
Bármilyen alagutazási megoldást is alkalmazunk, ez nem kerülhető el.
 
Bármilyen alagutazási megoldást is alkalmazunk, ez nem kerülhető el.
 
A potenciálisan felhasználható technológiák:
 
A potenciálisan felhasználható technológiák:
32. sor: 32. sor:
 
==== A javasolt elrendezés ====
 
==== A javasolt elrendezés ====
 
A következő példában az OpenVPN segítségével történő megoldás ismertetése olvasható.
 
A következő példában az OpenVPN segítségével történő megoldás ismertetése olvasható.
Első sorban azért döntöttem az OpenVPN mellett, mert könnyen konfigurálható, és több operációs rendszer támogatását élvezi, sőt, a NetworkManager-hez még beépülő modulja is van, mely része az általam használt Ubuntu Maverick Meerkat rendszernek.
+
Elsősorban azért döntöttem az OpenVPN mellett, mert könnyen konfigurálható, és több operációs rendszer támogatását élvezi, sőt, a NetworkManager-hez még beépülő modulja is van, amely része az általam használt Ubuntu Maverick Meerkat rendszernek.
Az OpenVPN további sajátossága, hogy a titkosításra az OpenSSL programkönyvtárat használja, ami azt jelenti, hogy az annál megszokott tanúsítvány rendszerrel működik.
+
Az OpenVPN további sajátossága, hogy a titkosításra az OpenSSL programkönyvtárat használja, ami azt jelenti, hogy az annál megszokott tanúsítványrendszerrel működik.
Szükség lesz tehát kliens és szerver oldali tanúsítványokra és kulcsokra, melyeket egy közös tanúsító szervezet (Certificate Authority, CA) fog aláírni.
+
Szükség lesz tehát kliens- és szerveroldali tanúsítványokra és kulcsokra, amelyeket egy közös tanúsító szervezet (Certificate Authority, CA) fog aláírni.
 
[[Image:Warrior_vpn.png|thumb|center|400px|alt=VPN tunnel|A kialakított alagút titkosított csatornát biztosít a védett kliens számára.]]
 
[[Image:Warrior_vpn.png|thumb|center|400px|alt=VPN tunnel|A kialakított alagút titkosított csatornát biztosít a védett kliens számára.]]
   
 
==== OpenVPN-szerver beállítása ====
 
==== OpenVPN-szerver beállítása ====
 
A szerver beállítása a következő lépésekből áll:
 
A szerver beállítása a következő lépésekből áll:
* openvpn csomag telepítése
+
# openvpn csomag telepítése
* CA létrehozása
+
# CA létrehozása
* szerver kulcs és tanúsítvány létrehozása
+
# szerver kulcsának és tanúsítványának létrehozása
* konfigurációs fájl létrehozása
+
# konfigurációs fájl létrehozása
  +
# indítás
   
 
Ubuntu alatt az OpenVPN-szervert a következő módon telepíthetjük:
 
Ubuntu alatt az OpenVPN-szervert a következő módon telepíthetjük:
   
 
$ sudo apt-get install openvpn
 
$ sudo apt-get install openvpn
  +
  +
Készítsük el saját CA-ánkat és hozzuk létre a szerver kulcsát és tanúsítványát.
  +
  +
server$ sudo -s
  +
server# mkdir /etc/openvpn/easy-rsa
  +
server# cp -R /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/
  +
server# cat >> /etc/openvpn/easy-rsa/vars << EOF
  +
export KEY_COUNTRY="HU"
  +
export KEY_PROVINCE="HU"
  +
export KEY_CITY="Budapest"
  +
export KEY_ORG="Valami kft."
  +
export KEY_EMAIL="me@myhost.mydomain"
  +
EOF
  +
server# chown -R root:admin /etc/openvpn/easy-rsa
  +
server# chmod g+w /etc/openvpn/easy-rsa
  +
server# exit
  +
server$ cd /etc/openvpn/easy-rsa
  +
server$ source ./vars
  +
server$ ./clean-all
  +
server$ ./build-dh
  +
server$ ./pkitool --initca
  +
server$ ./pkitool --server server
  +
server$ cd keys
  +
server$ openvpn --genkey --secret ta.key
  +
server$ sudo cp server.crt server.key ca.crt dh1024.pem ta.key ../../
  +
  +
Fontos, hogy a kulcsok és tanúsítványok a /etc/openvpn/easy-rsa/keys könyvtárban jönnek létre, és a .key fájlokra vigyázni kell.
   
 
Hozzuk létre a server.conf fájlt az /etc/openvpn könyvtárban a következő tartalommal:
 
Hozzuk létre a server.conf fájlt az /etc/openvpn könyvtárban a következő tartalommal:
62. sor: 89. sor:
 
proto udp
 
proto udp
 
 
# Az alagutazást adatkapcsolati (tap) vagy hálózati (tun) rétegbe konfigurálhatjuk.
+
# Beállíthatjuk, hogy helyi végpontként tap vagy tun virtuális eszközt használjon az OpenVPN-szerver.
  +
# tap: virtuális ethernet eszköz, netbios broadcast-ok is átjutnak rajta, samba esetén jobb lehet
  +
# tun: virtuális point-to-point eszköz
 
dev tap
 
dev tap
 
 
77. sor: 104. sor:
 
dh dh1024.pem
 
dh dh1024.pem
 
 
# Virtuális helyi hálózatunk ip tartománya.
+
# Virtuális helyi hálózatunk ip-tartománya.
 
server 10.8.0.0 255.255.255.0
 
server 10.8.0.0 255.255.255.0
 
 
115. sor: 142. sor:
 
status openvpn-status.log
 
status openvpn-status.log
 
verb 3
 
verb 3
  +
  +
Ubuntu rendszeren az OpenVPN-hez tartozó init script alapértelmezetten az /etc/openvpn könyvtár alatt található összes .conf végű konfigurációs fájlhoz indít OpenVPN példányt.
  +
Az előző lépésben kreált konfigurációs fájlhoz tartozó példány tehát automatikusan el fog indulni. Ez egyébként a /etc/default/openvpn fájlban szabályozható.
  +
  +
server$ sudo /etc/init.d/openvpn start
   
 
==== OpenVPN-kliens beállítása ====
 
==== OpenVPN-kliens beállítása ====
XXX: kulcs átvitele, konfigurációs fájl írása VAGY NetworkManager.
+
A kliens beállítása a következő lépésekből áll:
  +
# openvpn csomag telepítése
  +
# kliens kulcsának és tanúsítványának létrehozása a szerveren (!)
  +
# kliens kulcsának és tanúsítványának átvitele a kliens gépre
  +
# konfigurálás NetworkManager-ben
   
==== Tűzfal beállítások ====
+
Lehetőség lenne a szerverhez hasonlóan rendszerszolgáltatásként futtatni az OpenVPN-klienst is, de mivel az Ubuntuban a hálózati beállításokat NetworkManager-en keresztül, felhasználóként GUI-n szokás végezni, ezért itt is ezt mutatom be.
XXX: mit kell átengedni, hogy azért még működjön is a dolog.
+
  +
Ubuntu alatt az OpenVPN-klienst a következő módon telepíthetjük:
  +
  +
client$ sudo apt-get install network-manager-openvpn-gnome
  +
  +
A szerveren elvégezzük a klienshez tartozó kulcs és tanúsítvány generálását:
  +
  +
server$ cd /etc/openvpn/easy-rsa
  +
server$ source ./vars
  +
server$ ./pkitool client1
  +
  +
A kliensre a következő fájlokat kell átvinni
  +
  +
* ca.crt
  +
* client1.key
  +
* client1.crt
  +
* ta.key
  +
  +
Ezeket a fájlokat a VPN-t igénybe vevő felhasználó home könyvtárába célszerű elhelyezni.
  +
  +
Kattintsunk jobb gombbal a NetworkManager ikonján, majd válasszuk a kapcsolatok szerkesztését.
  +
A VPN fülön klikkeljünk a Hozzáadás gombra.
  +
[[Image:openvpn-client-create.png|thumb|center|400px|alt=Új VPN|Új VPN kapcsolatot hozunk létre.]]
  +
  +
A következő ablakban szükség lesz a szerverről áthozott fájlokra.
  +
[[Image:openvpn-client-edit.png|thumb|center|400px|alt=VPN kapcsolat szerkesztése|Beállítjuk a VPN főbb paramétereit.]]
  +
[[Image:openvpn-client-special.png|thumb|center|400px|alt=Speciális beállítások|Engedélyezzük a tömörítést és a TAP eszköz használatát.]]
  +
[[Image:openvpn-client-special2.png|thumb|center|400px|alt=TLS hitelesítés engedélyezése|Engedélyezzük a TLS hitelesítést.]]
  +
[[Image:openvpn-client-ready.png|thumb|center|400px|alt=A kész kapcsolat|Így kell megjelennie a VPN kapcsolatunknak a listában.]]
  +
  +
A NetworkManager-ben a VPN kapcsolatok között indíthatjuk is a client1 nevű kapcsolatot.
  +
  +
==== Tűzfalbeállítások ====
  +
  +
OpenVPN használatához egyetlen UDP- vagy TCP-kapcsolatra van szükség, amelyet a kliens kezdeményez a szerver felé.
  +
Ehhez a két oldalon a következő beállításokat kell eszközölnünk:
  +
  +
===== Szerver =====
  +
Ha az INPUT lánc policy-je nem ACCEPT:
  +
  +
server$ sudo iptables -A INPUT -p <PROTO> --dport <PORT> -j ACCEPT
  +
  +
ahol
  +
* a <PROTO> udp vagy tcp,
  +
* a <PORT> alapértelmezetten 1194.
  +
  +
===== Kliens =====
  +
Ha az OUTPUT lánc policy-je nem ACCEPT:
  +
  +
client$ sudo iptables -A OUTPUT -p <PROTO> --dport <PORT> -d <SERVER_IP> -j ACCEPT
  +
  +
ahol
  +
* a <PROTO> udp vagy tcp,
  +
* a <PORT> alapértelmezetten 1194, és
  +
* a <SERVER_IP> az OpenVPN szerver IP címe.
   
 
==== IPv6 over OpenVPN ====
 
==== IPv6 over OpenVPN ====
XXX: kényelmi szolgáltatás vagy a jövő előfutára?
+
Ha a szervernek van IPv6-kapcsolata az Internet felé, akkor joggal merülhet fel az igény, hogy azt az OpenVPN-en hozzá kapcsolódó kliensek is igénybe tudják venni.
  +
Ehhez vegyünk fel a tap0 eszköznek egy IPv6 címet a szervernek kiosztott, route-olható tartományból.
  +
A példa feltételezi, hogy a szerverünknek kiosztott route-olható tartomány a 2001:470:1f0b:58da::/64, a tényleges konfigurációban figyeljünk a korrekt paraméterek használatára.
  +
  +
server# cat >> /etc/network/interfaces << EOF
  +
  +
auto tap0
  +
iface tap0 inet6 static
  +
address 2001:470:1f0b:58da::1
  +
netmask 64
  +
EOF
  +
  +
A példában stateless IPv6 címkonfigurációt fogunk alkalmazni, ezért szükség lesz a radvd démonra:
  +
  +
server$ sudo apt-get install radvd
  +
  +
Ennek konfigurálását a következő fájl létrehozásával végezhetjük el:
   
  +
server# cat > /etc/radvd.conf << EOF
 
interface tap0
 
interface tap0
 
{
 
{
130. sor: 163. sor:
 
IgnoreIfMissing on;
 
IgnoreIfMissing on;
 
MaxRtrAdvInterval 60;
 
MaxRtrAdvInterval 60;
prefix <ipv6_addr>/<prefix_length>
+
prefix 2001:470:1f0b:58da::/64
 
{
 
{
 
AdvOnLink on;
 
AdvOnLink on;
136. sor: 169. sor:
 
};
 
};
 
};
 
};
  +
EOF
  +
  +
Ezek után a szerver újraindításakor működni fog az IPv6 hálózatunk. Addig a következő parancsokkal lehelhetünk életet bele:
  +
  +
server# /etc/init.d/openvpn stop
  +
server# ifup tap0
  +
server# /etc/init.d/radvd start
  +
server# /etc/init.d/openvpn start
   
 
=== A háttértár tartalmának titkosítása ===
 
=== A háttértár tartalmának titkosítása ===
XXX: ha a gépet megkaparintja valaki. Itt lenne egy link a meglévő [[Fájlrendszer-titkosítás,_LUKS|fájlrendszer titkosítós]] szócikkre.
+
Asztali számítógépek esetén kevéssé valószínű, hogy merevlemezen tárolt adataink biztonsága miatt kellene aggódnunk, hogy azok illetéktelen kézbe kerülnek. Az adatok kikerülése inkább hálózaton keresztül történik meg, mint a fizikai gép ellopása miatt.
XXX: egy mondat a swap titkosításáról, illetve ennek furmányosságáról, ha hibernálni is szeretnénk tudni.
+
Hordozható gépek esetén a fizikai védelem nem biztos, hogy olyan erős lesz, mint a bejárati ajtó zárja által védett asztali számítógépünké.
  +
Éppen ezért ha nem akarjuk, hogy noteszgépünk merevlemezén tárolt adataink a gép eltűnésekor illetéktelenek kezébe kerüljenek, akkor titkosítást kell alkalmazni.
  +
Linux alatt erre kíváló megoldást nyújt a [[Fájlrendszer-titkosítás,_LUKS|LUKS]].
  +
  +
Hibernáláskor a memória tartalma diszkre íródik. A memóriában pedig szerepel a merevlemez titkosításához tartozó jelszó nyílt szövegként. Tehát célszerű a swap partíciót - vagy ahova a hibernálási kép felíródik - szintén titkosítani.
  +
  +
Tipp: használjunk [[LVM]]-et, és titkosítsuk az ahhoz tartozó fizikai kötetet, továbbá a swap partíció és a home partíciónk legyen logikai kötet, mert így mindezek titkosítva lesznek. A root partíció is lehet logikai kötet, az Ubuntu támogatja a titkosított LVM kötet feloldását a boot folyamat során, erre támogatás van az initramfs-ben.
  +
  +
Felfüggesztéskor a merevlemez titkosításához tartozó jelszó a memóriában van nyílt szövegként. Egy megfelelő apparátussal rendelkező támadó ezt ki tudja nyerni akár a memória eltávolítása révén is.
  +
[http://www.tomshardware.com/news/RAM-EXPOSES-KEY-SECRET-DATA,4833.html]
   
 
=== Titkosítás alkalmazásszinten ===
 
=== Titkosítás alkalmazásszinten ===
XXX: csak felhívnám a figyelmet a HTTPS és a PGP használatára. Ha a VPN épp nem aktív és/vagy megfigyelik a VPN szerver forgalmát, akkor ez még megvédhet.
 
   
== Hiányosságok ==
+
Ha lehetőségünk van (vagyis ha a kliensprogramunk és az elérni kívánt szerver is támogatja), célszerű már az alkalmazási rétegben titkosítást használni, hiszen így a titkosított kapcsolat a lehető leghosszabb, a két fél közötti adatátviteli útvonal teljes egészét lefedi.
XXX: pro-kontra lista
+
Ha nincs VPN, akkor csak ezzel biztosítható a titkosítás.
* titkosítatlan adatforgalom tiltása - mi legyen amíg a VPN inaktív?
+
Példák:
  +
* HTTP helyett HTTPS (= HTTP + SSL)
  +
* FTP helyett SFTP vagy SCP
  +
* TELNET helyett SSH (ez csak a teljesség kedvéért szerepel a listában)
  +
* Levelezéshez GPG [http://en.wikipedia.org/wiki/GNU_Privacy_Guard]
   
== Tapasztalatok ==
+
== Hiányosságok ==
XXX: pár szóban a gyakorlati használatról.
+
* Előfordul, hogy a VPN-kapcsolat megszakad, és erről a felhasználó nem szerez tudomást, ha nem veszi észre a NetworkManager ikonjáról eltűnt lakat szimbólumot. Valamilyen figyelmeztetést kellene adni, vagy tiltani a VPN-en kívüli hálózati forgalmat. Megoldás lehet, ha az OUTPUT lánc policy-je nem ACCEPT a csomagszűrőben és csak a VPN-szerver felé engedjük a forgalmat egy szabállyal.
   
 
== Külső hivatkozások ==
 
== Külső hivatkozások ==
*[https://help.ubuntu.com/community/OpenVPN Ubuntu féle OpenVPN dokumentáció]
+
*[https://help.ubuntu.com/community/OpenVPN Ubuntu-féle OpenVPN-dokumentáció]

A lap jelenlegi, 2010. december 31., 18:10-kori változata

Írta: Áshin László, 2010.11.10.

Ez az oldal arról szól, hogy mit tehetünk biztonságunk növelése érdekében, ha noteszgépünkkel utazunk a nagyvilágban.

Tartalomjegyzék

[szerkesztés] 1 Probléma

Az ember hajlamos nem kellőképpen mérlegelni asztali és hordozható számítógépei közti, jellegükből következő alapvető különbségeket. Ezek a különbségek konkrétan:

  • hordozható géppel utazva internetezéskor esetleg megkérdőjelezhető megbízhatóságú vezeték nélküli hálózatokat veszünk igénybe, adatainkat lehallgathatják;
  • a hordozható gép könnyebben elveszíthető, ellopásának veszélye jelentősebb;
  • a hordozható gép fokozott mértékben van kitéve fizikai sérülésnek.

A felhasználók többsége ezen aspektusokba nem is gondol bele, vagy pedig lustaságból nem foglalkozik a kérdéssel, azonban egy a listában szereplő esemény bekövetkezése után gyakran már késő bármit is tenni. Tehát a hangsúlyt a megelőzésre kell fordítani.

[szerkesztés] 2 Megoldás

A felsorolt problémák megelőzésére léteznek ésszerű intézkedések. A következő alpontok ezeket ismertetik.

[szerkesztés] 2.1 A hálózati kapcsolat titkosítása

Ismeretlen megbízhatóságú wifi-hálózatok igénybe vétele esetén valahogy meg kell oldani, hogy az átvitt adatok mégse nyílt szöveg formában, bárki számára lehallgatható módon kerüljenek átvitelre. Példák gyakran használt, önmagukban alapértelmezésként titkosítást nem tartalmazó protokollokra:

  • HTTP
  • FTP
  • MSN

Persze lehetne mondani, hogy az ember HTTP helyett használjon HTTPS-t, FTP helyett SCP-t, MSN-t meg egyáltalán ne használjon, de sokszor sajnos ez nem megoldás. A hálózati forgalmat tehát valamilyen módon titkosítani kell valamelyik alacsonyabb rétegben, egy titkosított csatornával kell megvédeni legalább a vezeték nélküli átviteli szakaszt. Titkosított csatornát létrehozni két pont között azonban úgy lehet, ha mindkét oldal támogatja az alkalmazott alagutazási megoldást. Ennek fényében szükség lesz egy olyan "hozzáférési pontra", amely megbízhatónak vélt kapcsolattal rendelkezik az Internet irányába, és a védendő gép el tudja érni valamilyen - nem feltétlenül biztonságos - hálózaton. Bármilyen alagutazási megoldást is alkalmazunk, ez nem kerülhető el. A potenciálisan felhasználható technológiák:

[szerkesztés] 2.1.1 A javasolt elrendezés

A következő példában az OpenVPN segítségével történő megoldás ismertetése olvasható. Elsősorban azért döntöttem az OpenVPN mellett, mert könnyen konfigurálható, és több operációs rendszer támogatását élvezi, sőt, a NetworkManager-hez még beépülő modulja is van, amely része az általam használt Ubuntu Maverick Meerkat rendszernek. Az OpenVPN további sajátossága, hogy a titkosításra az OpenSSL programkönyvtárat használja, ami azt jelenti, hogy az annál megszokott tanúsítványrendszerrel működik. Szükség lesz tehát kliens- és szerveroldali tanúsítványokra és kulcsokra, amelyeket egy közös tanúsító szervezet (Certificate Authority, CA) fog aláírni.

VPN tunnel
A kialakított alagút titkosított csatornát biztosít a védett kliens számára.

[szerkesztés] 2.1.2 OpenVPN-szerver beállítása

A szerver beállítása a következő lépésekből áll:

  1. openvpn csomag telepítése
  2. CA létrehozása
  3. szerver kulcsának és tanúsítványának létrehozása
  4. konfigurációs fájl létrehozása
  5. indítás

Ubuntu alatt az OpenVPN-szervert a következő módon telepíthetjük:

$ sudo apt-get install openvpn

Készítsük el saját CA-ánkat és hozzuk létre a szerver kulcsát és tanúsítványát.

server$ sudo -s
server# mkdir /etc/openvpn/easy-rsa
server# cp -R /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/
server# cat >> /etc/openvpn/easy-rsa/vars << EOF
export KEY_COUNTRY="HU"
export KEY_PROVINCE="HU"
export KEY_CITY="Budapest"
export KEY_ORG="Valami kft."
export KEY_EMAIL="me@myhost.mydomain"
EOF
server# chown -R root:admin /etc/openvpn/easy-rsa
server# chmod g+w /etc/openvpn/easy-rsa
server# exit
server$ cd /etc/openvpn/easy-rsa
server$ source ./vars
server$ ./clean-all
server$ ./build-dh
server$ ./pkitool --initca
server$ ./pkitool --server server
server$ cd keys
server$ openvpn --genkey --secret ta.key
server$ sudo cp server.crt server.key ca.crt dh1024.pem ta.key ../../

Fontos, hogy a kulcsok és tanúsítványok a /etc/openvpn/easy-rsa/keys könyvtárban jönnek létre, és a .key fájlokra vigyázni kell.

Hozzuk létre a server.conf fájlt az /etc/openvpn könyvtárban a következő tartalommal:

# Szerverként konfiguráljuk ezt az OpenVPN példányt.
mode server

# A szerver az itt megadott ip címen fogja várni a kliensek csatlakozását.
local <server_ip>

# A szerver a következő udp vagy tcp porton fog figyelni.
port 1194

# Kiválaszthatjuk, hogy udp vagy tcp végezze a szállítási réteg feladatát.
proto udp

# Beállíthatjuk, hogy helyi végpontként tap vagy tun virtuális eszközt használjon az OpenVPN-szerver.
# tap: virtuális ethernet eszköz, netbios broadcast-ok is átjutnak rajta, samba esetén jobb lehet
# tun: virtuális point-to-point eszköz
dev tap

# A kiadott tanúsítványokat aláíró szervezet tanúsítványa.
ca ca.crt

# A szerver tanúsítványa.
cert server.crt

# A szerver privát kulcsa.
key server.key

# Előre konfigurált Diffie-Hellman paramétereket tartalmazó fájl.
dh dh1024.pem

# Virtuális helyi hálózatunk ip-tartománya.
server 10.8.0.0 255.255.255.0

# A kiosztott ip címek perzisztens tárolására szolgáló fájl.
ifconfig-pool-persist ipp.txt

# A kliens default route-ja lesz az OpenVPN kapcsolat.
push "redirect-gateway def1 bypass-dhcp"

# DNS szervereket állítunk be a kliensek számára.
push "dhcp-option DNS <dns_ip1>"
push "dhcp-option DNS <dns_ip2>"

# Engedélyezhetjük, hogy a kliensek egymást is elérhessék - természetesen a szerveren keresztül.
# (Alapértelmezetten ez nincs így.)
;client-to-client

# Kapcsolatfenntartó, ping jellegű üzenetek küldözgetése 10 másodpercenként,
# bontás érzékelése két perc szünet elteltével.
keepalive 10 120

# TLS autentikációs kulcs (0: szerver, 1: kliens)
tls-auth ta.key 0

# LZO tömörítés engedélyezése.
comp-lzo

# A szerver processz felhasználója és csoportja.
user nobody
group nogroup

# A privilégiumok eldobása után esetlegesen elérhetetlenné váló erőforrások elérésének tiltása.
persist-key
persist-tun

# Naplózás engedélyezése és bőbeszédűségének beállítása.
status openvpn-status.log
verb 3

Ubuntu rendszeren az OpenVPN-hez tartozó init script alapértelmezetten az /etc/openvpn könyvtár alatt található összes .conf végű konfigurációs fájlhoz indít OpenVPN példányt. Az előző lépésben kreált konfigurációs fájlhoz tartozó példány tehát automatikusan el fog indulni. Ez egyébként a /etc/default/openvpn fájlban szabályozható.

server$ sudo /etc/init.d/openvpn start

[szerkesztés] 2.1.3 OpenVPN-kliens beállítása

A kliens beállítása a következő lépésekből áll:

  1. openvpn csomag telepítése
  2. kliens kulcsának és tanúsítványának létrehozása a szerveren (!)
  3. kliens kulcsának és tanúsítványának átvitele a kliens gépre
  4. konfigurálás NetworkManager-ben

Lehetőség lenne a szerverhez hasonlóan rendszerszolgáltatásként futtatni az OpenVPN-klienst is, de mivel az Ubuntuban a hálózati beállításokat NetworkManager-en keresztül, felhasználóként GUI-n szokás végezni, ezért itt is ezt mutatom be.

Ubuntu alatt az OpenVPN-klienst a következő módon telepíthetjük:

client$ sudo apt-get install network-manager-openvpn-gnome

A szerveren elvégezzük a klienshez tartozó kulcs és tanúsítvány generálását:

server$ cd /etc/openvpn/easy-rsa
server$ source ./vars
server$ ./pkitool client1

A kliensre a következő fájlokat kell átvinni

  • ca.crt
  • client1.key
  • client1.crt
  • ta.key

Ezeket a fájlokat a VPN-t igénybe vevő felhasználó home könyvtárába célszerű elhelyezni.

Kattintsunk jobb gombbal a NetworkManager ikonján, majd válasszuk a kapcsolatok szerkesztését. A VPN fülön klikkeljünk a Hozzáadás gombra.

Fájl:openvpn-client-create.png
Új VPN kapcsolatot hozunk létre.

A következő ablakban szükség lesz a szerverről áthozott fájlokra.

Fájl:openvpn-client-edit.png
Beállítjuk a VPN főbb paramétereit.
Fájl:openvpn-client-special.png
Engedélyezzük a tömörítést és a TAP eszköz használatát.
Fájl:openvpn-client-special2.png
Engedélyezzük a TLS hitelesítést.
Fájl:openvpn-client-ready.png
Így kell megjelennie a VPN kapcsolatunknak a listában.

A NetworkManager-ben a VPN kapcsolatok között indíthatjuk is a client1 nevű kapcsolatot.

[szerkesztés] 2.1.4 Tűzfalbeállítások

OpenVPN használatához egyetlen UDP- vagy TCP-kapcsolatra van szükség, amelyet a kliens kezdeményez a szerver felé. Ehhez a két oldalon a következő beállításokat kell eszközölnünk:

[szerkesztés] 2.1.4.1 Szerver

Ha az INPUT lánc policy-je nem ACCEPT:

server$ sudo iptables -A INPUT -p <PROTO> --dport <PORT> -j ACCEPT

ahol

  • a <PROTO> udp vagy tcp,
  • a <PORT> alapértelmezetten 1194.
[szerkesztés] 2.1.4.2 Kliens

Ha az OUTPUT lánc policy-je nem ACCEPT:

client$ sudo iptables -A OUTPUT -p <PROTO> --dport <PORT> -d <SERVER_IP> -j ACCEPT

ahol

  • a <PROTO> udp vagy tcp,
  • a <PORT> alapértelmezetten 1194, és
  • a <SERVER_IP> az OpenVPN szerver IP címe.

[szerkesztés] 2.1.5 IPv6 over OpenVPN

Ha a szervernek van IPv6-kapcsolata az Internet felé, akkor joggal merülhet fel az igény, hogy azt az OpenVPN-en hozzá kapcsolódó kliensek is igénybe tudják venni. Ehhez vegyünk fel a tap0 eszköznek egy IPv6 címet a szervernek kiosztott, route-olható tartományból. A példa feltételezi, hogy a szerverünknek kiosztott route-olható tartomány a 2001:470:1f0b:58da::/64, a tényleges konfigurációban figyeljünk a korrekt paraméterek használatára.

server# cat >> /etc/network/interfaces << EOF

auto tap0
iface tap0 inet6 static
       address 2001:470:1f0b:58da::1
       netmask 64
EOF

A példában stateless IPv6 címkonfigurációt fogunk alkalmazni, ezért szükség lesz a radvd démonra:

server$ sudo apt-get install radvd

Ennek konfigurálását a következő fájl létrehozásával végezhetjük el:

server# cat > /etc/radvd.conf << EOF
interface tap0
{
  AdvSendAdvert on;
  IgnoreIfMissing on;
  MaxRtrAdvInterval 60;
  prefix 2001:470:1f0b:58da::/64
  {
    AdvOnLink on;
    AdvAutonomous on;
  };
};
EOF

Ezek után a szerver újraindításakor működni fog az IPv6 hálózatunk. Addig a következő parancsokkal lehelhetünk életet bele:

server# /etc/init.d/openvpn stop
server# ifup tap0
server# /etc/init.d/radvd start
server# /etc/init.d/openvpn start

[szerkesztés] 2.2 A háttértár tartalmának titkosítása

Asztali számítógépek esetén kevéssé valószínű, hogy merevlemezen tárolt adataink biztonsága miatt kellene aggódnunk, hogy azok illetéktelen kézbe kerülnek. Az adatok kikerülése inkább hálózaton keresztül történik meg, mint a fizikai gép ellopása miatt. Hordozható gépek esetén a fizikai védelem nem biztos, hogy olyan erős lesz, mint a bejárati ajtó zárja által védett asztali számítógépünké. Éppen ezért ha nem akarjuk, hogy noteszgépünk merevlemezén tárolt adataink a gép eltűnésekor illetéktelenek kezébe kerüljenek, akkor titkosítást kell alkalmazni. Linux alatt erre kíváló megoldást nyújt a LUKS.

Hibernáláskor a memória tartalma diszkre íródik. A memóriában pedig szerepel a merevlemez titkosításához tartozó jelszó nyílt szövegként. Tehát célszerű a swap partíciót - vagy ahova a hibernálási kép felíródik - szintén titkosítani.

Tipp: használjunk LVM-et, és titkosítsuk az ahhoz tartozó fizikai kötetet, továbbá a swap partíció és a home partíciónk legyen logikai kötet, mert így mindezek titkosítva lesznek. A root partíció is lehet logikai kötet, az Ubuntu támogatja a titkosított LVM kötet feloldását a boot folyamat során, erre támogatás van az initramfs-ben.

Felfüggesztéskor a merevlemez titkosításához tartozó jelszó a memóriában van nyílt szövegként. Egy megfelelő apparátussal rendelkező támadó ezt ki tudja nyerni akár a memória eltávolítása révén is. [1]

[szerkesztés] 2.3 Titkosítás alkalmazásszinten

Ha lehetőségünk van (vagyis ha a kliensprogramunk és az elérni kívánt szerver is támogatja), célszerű már az alkalmazási rétegben titkosítást használni, hiszen így a titkosított kapcsolat a lehető leghosszabb, a két fél közötti adatátviteli útvonal teljes egészét lefedi. Ha nincs VPN, akkor csak ezzel biztosítható a titkosítás. Példák:

  • HTTP helyett HTTPS (= HTTP + SSL)
  • FTP helyett SFTP vagy SCP
  • TELNET helyett SSH (ez csak a teljesség kedvéért szerepel a listában)
  • Levelezéshez GPG [2]

[szerkesztés] 3 Hiányosságok

  • Előfordul, hogy a VPN-kapcsolat megszakad, és erről a felhasználó nem szerez tudomást, ha nem veszi észre a NetworkManager ikonjáról eltűnt lakat szimbólumot. Valamilyen figyelmeztetést kellene adni, vagy tiltani a VPN-en kívüli hálózati forgalmat. Megoldás lehet, ha az OUTPUT lánc policy-je nem ACCEPT a csomagszűrőben és csak a VPN-szerver felé engedjük a forgalmat egy szabállyal.

[szerkesztés] 4 Külső hivatkozások

Személyes eszközök