Az OpenVPN finomhangolása
A HupWiki-ből...
Virtuális hálózati csatlakozás létesítése internetre csatlakozó kliens és szerver között
Tartalomjegyzék |
Előszó
Gondolom más is van rajtam kívül, akinek ugyan nem újdonság a VPN, vagyis a Virtual Privat Netvork, de ahogy nekem is kellett, most igen rövid idő alatt kellene eredményt produkálnia. Ilyenkor kézenfekvő megoldás a Google és a keresgélés.
Az alábbiakban már egy "kész" receptet találsz arra hogyan hozz létre Linux (Debian 3.0) és MS Windows XP MS Windows 2000 operációs rendszerek között VPN kapcsolatot
A probléma
Adott egy tűzfal amin GNU/Debian Linux 3.0 OS fut 2.4.24-es kernellel, ezen keresztül meg kell oldani, hogy a cég néhány munkatársa távolról csatlakozhasson a hálózat szervereihez és azokon munkát végezhessenek. A csatlakozáshoz MS Windows rendszereket fognak használni. Továbbá fontos, hogy akár munka közben akár a munka végeztével a belső hálózat biztonságban legyen.
Megoldási lehetőségek
Némi keresgélés után több megoldási lehetőség is adódik
- IPSec
- Meglehetősen elterjedt (a routerek is rendelkeznek ilyen vagy hasonló szolgáltatással) jól dokumentált, de Windowson beállítani rémálom
- Döbbenet, 2004.04.22 -ei a legfrissebb (befejezték a fejlesztését)
- Bár jól dokumentált
- A FreeS/WAN kódja alapján folyamatosan fejlesztett VPN megvalósítás. Beállítása hasonló (nagyrészt megegyezik) a FreeS/WAN beállításához és annak dokumentációja, illetve a sajátja alapján viszonylag könnyen konfigurálható.
- Jól dokumentált
- A legfrissebb 2.0.9 (2006. 10. 01.-én)
- Könnyen paraméterezhető
- Linux és Windows platformon is létezik és megbízható
- Vannak apróbb, potenciális biztonsági problémái, de ezek megfelelően kezelhetők
- Van belőle Debian csomag
Lépésről lépésre
- Az OpenVPN IP-IP alagutazást használ.
- Ha a kernel támogatja (ezt ellenőrizni kell, lásd lejjebb), létrehozza a tunel eszközt telepítéskor
- Működik TCP/UDP protokollokkal is de az UDP ajánlott.
- OpenSSL segítségével létrehozott kulcsokkal azonosítja a klienst a server
- A kliensek, ha szükséges egymást is láthatják (közös munka), bár ez ellenjavalt, tapasztalatom szerint nem nagyon van rá szükség.
- A kliensek bejelentkezése, kijelentkezése és munkájuk szükség esetén jól figyelemmel követhetők, illetve logolt
- A kliens oldalon is futtatható szolgáltatásként, autómatikus és kézi indítással egyaránt
OpenVPN beszerzése
Letöltheted a saját oldalukról a forráskódot, illetve a Windows installert (található itt egy GUI-val működtethető változat linkje is). A fordítás nem bonyolult, de mivel gyorsan kellett így ezzel nem foglalkoztam, de minden benne van a README-kben, tehát RTFM.
Telepítés előkészítése
Mielőtt telepíteni kezdessz néhány dolgot ellenőrizz! Létezik-e a tunnel eszköz:
ls -lah /dev/net/ | grep tun
Ha nincs ilyen készítened kell:
mknod /dev/net/tun0 c 10 200
Támogatja-e a kerneled a virtuális hálózati eszközöket, alagutakat:
modprobe -l | grep tun
(Bár ha a kernel moduláris az rizikó faktor főképp egy tűzfal esetében. Ha jól van felkészítve a tűzfalad és monolitikus kernelt használsz ez nem is ad eredményt, ebben az esetben a menuconfig segít, nézzd meg abban a Network Device Support ---> Universal TUN/TAP device driver support. Ha nem forgattál be ilyen támogatést (tunneling), fordítsd újra a kernelt. Ha moduláris kernelt használsz be kell még töltened a tun modult.
insmod tun
A tulajdonképpeni telepítés
Mostmár akár telepíthetünk is
Csomagok telepítése
Mint ahogy már ítram nem bonyolult a forgatás, de én csomagot telepítettem, tehát:
apt-get install openvpn
Így a függőségekkel együtt feltelepül és elvégzi a szükséges beállításokat. (Alapvetően innen már majdnem működőképes az OpenVPN.)
Létrehozott a telepítő a /usr/share/doc/packages/openvpn alatt egy könyvtárat amiben minden benne van ami nekünk kell, nézzük is meg, mi is van benne
ls -lahR /usr/share/doc/packages/openvpn | less
Hogy később gyorsabban dolgozhassunk (és hogy rendet tartsunk) ezt a könyvtárat másoljuk át
mkdir -p /usr/share/openvpn cp /usr/share/doc/packages/openvpn/* /usr/share/openvpn/*
mivel kell még ide néhány könyvtár és fájl azokat hozzuk létre
cd /usr/share/openvpn/easy-rsa/2.0/ mkdir keys cd keys/ echo 01 > serial touch index.txt
Találhatók itt példa configok, és jó kis shell scriptek amik oly gyorsá teszik a beállítást. Kezdődhet is a használatbavétel. Lépjünk be tehát a /usr/share/openvpn/easy-rsa/2.0 könyvtárba és itt szerkesszük úgy a vars állományt, hogy a file végén található változókba értelem szerint behelyettesíted az értékeket.
export KEY_COUNTRY="HU" export KEY_PROVANCE="" export KEY_CITY="Városom" export KEY_ORG="NIMPHAS Corp." export KEY_EMAIL="it@nimphas.com"
Azért mielőtt lecserélnéd, vagy szerkesztenéd a vars fájlt másold le mondjuk vars.old címmel. Ezeken kívül kell még néhány további fájl és könyvtár:
mkdir /var/log/openvpn touch /etc/openvpn/ipp.txt
Kell egy server konfigurációs fájl én ezt használom server.conf néven van elmentve a /etc/openvpn könyvtárban (a /usr/share/doc/packages/openvpn/sample-config könyvtárban találsz részletesebbeket is magyarázatokkal, feltétlen nézd meg őket):
port 1194 proto udp dev tun ca /etc/openvpn/ca.crt cert /etc/openvpn/server.crt key /etc/openvpn/server.key dh /etc/openvpn/dh1024.pem server 10.8.0.0 255.255.255.0 ifconfig-pool-persist /etc/openvpn/ipp.txt push "route 192.168.5.0 255.255.255.0" # A helyi hálózathoz való routolás keepalive 10 120 comp-lzo ;client-to-client # Engedélyezi, hogy a távolról felcsatlakozó kliensek "lássák egymást" persist-key persist-tun status /var/log/openvpn/openvpn-status.log verb 3 mute 20
Tanúsítványok készítése
Ha a könyvtárak és fájlok elkészültek, létrhozzuk a tanusítványokat: A felső szintű tanusítvány és kulcs generálása:
cd /usr/share/openvpn/easy-rsa/2.0 source vars ./build-ca
Diffie Hellman paraméter előállítása (ez egy igen hosszú alap értelmezés szerint 1024 bit hosszú prímszám)
./build-dh
Paranojások a KEY_SIZE értékét megnövelhetik (a vars állományban), de ez nem szükséges, nagyban nem növeli a biztonságot de az előállítás idejét igen.
(Ha az unable to write 'random state' hibaüzenetet kapod segíthet ez az oldal: http://www.openssl.org/support/faq.cgi Próbáld meg ezt a parancsot: export KEY_SIZE=1024 && export KEY_DIR=$(pwd)/keys && export KEY_CONFIG=$(pwd)/openssl.cnf && export HOME=$(pwd)/keys && export RANDFILE=$(pwd)/keys && ./build-dh)
Következhet a server kulcsok legyártása
./build-key-server server
A paraméter amit vár a fájl neve (a kiterjesztés nékül). Így mostmár a legszükségesebb tanusítványok készen vannak, ezután csak a kliensek tanusítványai vannak hátra. Tehát készítsük el ezeket is:
source vars ./pkitool --interact --inter client00
A paramétereket a ./pkitool --help elmagyarázza, amit itt használtam:
- --interact = interaktív kulcsgenerálás Ez annyit jelent, hogy a tanusítvány adatait meg kérdezi tőled, csak annyi a dolgod, hogy elolvasod a kérdést és ésszerűen válaszolsz rájuk
- --inter = belső kulcs generálása
- client00 = a létrehozandó állományok nevének az eleje
Ezt persze addig ismételjük ameddig minden kliens tanusítványait el nem készítettük. Ha megvannak át másolgathatjuk őket a helyükre, illetve a kliensek fájljait be is tömöríthetjük, hogy aztán egyszerűbb legyen bánni velük
A serveren használandó tanusítvány állományai:
ca.crt ca.key server.crt server.csr server.key
- a "server.*" csak akkor érvényes, ha a ./build-key-servernek paraméterként a servert adtad meg.
A kliens által használt tanusítvány fájljai:
ca.crt ca.key client00.crt client00.csr client00.key
Ha a ./pkitoolnak ezt adtad meg
Rendrakás
- A server tanusítványait az /etc/openvpn könyvtárba kell rakni,
- A server.conf -nak szintén ott a helye
- A kliensek tanusítványainak fájljait a /usr/share/openvpn/easy-rsa/2.0/configs/client* könyvtárakban tartom *.tgzbe tömörítve. innen scpvel könnyen átmásolhatók az állományok és egyhelyen vannak
Kliensek telepítése
Windows
Ez sem bonyolult az OpenVPN oldaláról letölthető installer szinte mindent meg csináll. Itt is kell készítenünk egy configot (client.ovpn itt a kiterjesztés csak ez lehet), valahogy így nézzen ki:
client remote xxx.xxx.xxx.xxx # a távoli server IP címe megadhatsz domaint is port 1194 proto udp ca C:\\Progra~1\\OpenVPN\\config\\ca.crt cert C:\\Progra~1\\OpenVPN\\config\\client.crt key C:\\Progra~1\\OpenVPN\\config\\client.key dev tun comp-lzo verb 3 mute 10 ns-cert-type server persist-key persist-tun
Ha elkészítetted, pl jegyzettömbel, vagy valamilyen text editoral mentsd el az OpenVPN/config könyvtárba client.ovpn névvel. Az indításhoz pedig egy kis denevér (Én ovpn.bat névvel szoktam a config könyvtárban elhelyezni):
openvpn --config C:\\Progra~1\\OpenVPN\\config\\client.ovpn
Ha lefuttatod létrejön a VPN kapcsolat ezt onnan tudod, hogy megnyílik egy parancssori ablak és egy csomó bla-bla után kiíródik a Connection Saccesfulli Completted, illetve az ablak nyitva is marad, hogy a kapcsolat megmaradjon pingelgeti a hálózatot, és hálózati csomagokat küldözget a távoli hálózatba. Ha a Windows kliensnek a munkacsoportja ugyan az mint a hálózat gépeié akkor kisvártatva a hálózati helyek között meg is jelennek a gépek ikonjai. Még annyit érdemes megtenni a kényelem kedvéért, hogy teszel parancsikont az asztalra (már arra amit a monitoron látsz ;-) ).
Linux kliens
A server beállításaitól csak anyiban különbözik, hogy itt a config más (ugyan az mint a windows kliens esetében értelem szerint a ~/.openvpn/ könyvtárba kell tenni a tanusítványhoz kapcsolódó fájlokat, az útvonalakat a helyesre megadni és csatlakozni a
openvpn --config ~/.openvpn/client.ovpn
parancsal. Annyit azért ne felejts el, hogy itt nem indul el konzol, ha látni akarod a történéseket konzolon indítsd az OpenVPNt
Ötletek
- Kimondottan rossz ötlet a tanusítványokban client1..client2..client3..stb nevezni a klienseket, egyfelöl mert van nevük, meg így jól nyomon követhető ki mikor jelentkezett be.
- Kimondottan rossz ötlet engedélyezni olyan kliensek csatlakozását, amelyeket nem védi legalább szoftveres tűzfal és vírusvédelmi program
- Kimondottan rossz ötlet mindenkinek engedélyezni a VPN használatát
- Kimondottan jó ötlet a felhasználókat nyilvántartani (e-mail, hanyas kliens, mettől-meddig érvényes a kulcsa, melyík részlegben dolgozik, mit csinál, mit használ, hálózati eszköz MAC címe)
- Kimondottan jó ötlet az iptablessel a MAC címeket szűrni, mondjuk valahogy így:
iptables -A INPUT -i tun+ -p UDP -m mac --mac-source 00:00:00:00:00:00 -j ACCEPT
- Persze a 00:00:00:00:00:00 helyére a valódi MAC cím kerüljön
- Kimondottan jó ötlet csak egy adott idő intervallumban engedélyezni a csatlakozást, ha lehet és nem ütközik akadályokba, modjuk 6:30 - 21:00 és a crond segítségével indítani és leállítani (A nyugalmad érdekében)
Egyéb...!
És akkor még valami, mire használhatók ezek a tanusítványok. Mivel a kliensek mindegyikére be kell másolni a felső szintű tanusítványt és a kliens tanusítványát, ezt elektronikus aláírásként is használhatod. A ca.crt hozzáadod a felső szintű tanusítványaidhoz és a client.crtt csatolod tanusítványként a leveleidhez (hivatalos levelezéshez) máris elektronikusan aláírtak a leveleid, ha a cégen belüli gépeken elvégzi ezt mindenki a levelezés máris bizonságosabbá tehető
Samba
Ha Samba serverhez szeretnéd, hogy hozzáférjenek a VPN-en keresztül a felhasználók, akkor azt az smb.conf állományban lehetővé kell tenned:
hosts allow = ... 10.8.0.0/24 # Ez a címtartomány amit a server.conf-ban megadtál a server 10.8.0.0 direktívánál
Végezetül
Úgy kb ennyi, ha kérdésed lenne ezzel kapcsolatban: [1]
Kapcsolódó szócikkek
Kapcsolódó linkek
OpenVPN
OpenVPN letöltés
OpenVPN FAQ
OpenVPN csomaginfok
OpenSSL
Linux 2.4 Csomagszűrő HOWTO