Biztonság Road Warrior-oknak

A Unix/Linux szerverek üzemeltetése wikiből
A lap korábbi változatát látod, amilyen Kodest (vitalap | szerkesztései) 2010. december 7., 17:14-kor történt szerkesztése után volt.

Í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

1 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:

  • 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.

2 Megoldás

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

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:

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, mely 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. 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.

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

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 és tanúsítvány 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.

$ sudo -s
# mkdir /etc/openvpn/easy-rsa
# cp -R /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/
# 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
# chown -R root:admin /etc/openvpn/easy-rsa
# chmod g+w /etc/openvpn/easy-rsa
# exit
$ cd /etc/openvpn/easy-rsa
$ source ./vars
$ ./clean-all
$ ./build-dh
$ ./pkitool --initca
$ ./pkitool --server server
$ cd keys
$ openvpn --genkey --secret ta.key
$ sudo cp server.crt server.key ca.crt dh1024.pem ta.key ../../

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

# Az alagutazást adatkapcsolati (tap) vagy hálózati (tun) rétegbe konfigurálhatjuk.
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ó.

$ sudo /etc/init.d/openvpn start

2.1.3 OpenVPN-kliens beállítása

XXX: kulcs átvitele, konfigurációs fájl írása VAGY NetworkManager.

2.1.4 Tűzfal beállítások

XXX: mit kell átengedni, hogy azért még működjön is a dolog.

2.1.5 IPv6 over OpenVPN

XXX: kényelmi szolgáltatás vagy a jövő előfutára?

interface tap0
{
  AdvSendAdvert on;
  IgnoreIfMissing on;
  MaxRtrAdvInterval 60;
  prefix <ipv6_addr>/<prefix_length>
  {
    AdvOnLink on;
    AdvAutonomous on;
  };
};

2.2 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 szócikkre. XXX: egy mondat a swap titkosításáról, illetve ennek furmányosságáról, ha hibernálni is szeretnénk tudni.

2.3 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.

3 Hiányosságok

XXX: pro-kontra lista

  • titkosítatlan adatforgalom tiltása - mi legyen amíg a VPN inaktív?

4 Tapasztalatok

XXX: pár szóban a gyakorlati használatról.

5 Külső hivatkozások

Személyes eszközök