Itt az OpenVPN szerver telepítését és egyszerűbb konfigurálását mutatom be.
Csapjunk is a lecsóba! Először is nem árt frissíteni az Ubuntu csomagkezelőjének a csomaglistáját, hogy a legfrissebb csomagokat tudjuk telepíteni.
sudo apt-get update
Most, hogy a lista aktuális, telepíthetjük is az összetevőket! Két csomag
szükséges, az openvpn és az easy-rsa. Az első csomag úgy érzem önmagáért beszél, az utóbbiról pedig annyit, hogy annak a segítségével fogunk majd létrehozni kulcsokat és tanúsítványokat.
sudo apt-get install openvpn easy-rsa
Kiszolgáló számára a kulcsok, aláírások létrehozása
Nem szükséges, de praktikus a home könyvtárba lépni, hogy biztosan legyen jogunk a további fájlok és a könyvtár létrehozásokhoz.
cd ~
A következő lépésben, a kulcsgeneráláshoz szükséges fájlok jönnek létre. Adjuk ki az alábbi parancsot, ahol a “certificates” egy tetszőleges könyvtárnév, bár érdemes megtartani a leírás későbbi lépései miatt.
make-cadir certificates
Ha minden jól ment, akkor létrejöttek a fájlok. Lépjünk is be a frissen létrehozott könyvtárba
cd certificates
Ezek után találunk egy vars nevű fájlt. Benne a kulcsgeneráláshoz beállítás.
Ha akarjuk szerkeszthetjük, de nem muszáj, mert a kulcsok létrehozásánál is lehet módosítani az általam felsorolt (KEY_*) beállításokat. Viszont, ha mégis szerkesztésre adnánk a fejünket, akkor azt tartsuk szem előtt, hogy üresen nem hagyhatjuk. A KEY_COUNTRY és KEY_PROVINCE nem lehet azonos szöveg. Tehát ne írjunk mindkét helyre “HU”-t 🙂
nano vars
export KEY_COUNTRY=”US”
export KEY_PROVINCE=”CA”
export KEY_CITY=”SanFrancisco”
export KEY_ORG=”Fort-Funston”
export KEY_EMAIL=”me@myhost.mydomain”
export KEY_OU=”MyOrganizationalUnit”
Az alábbi sort annak érdemes változtatnia, aki még biztonságosabb titkos kulcsot szeretne magának, de szerintem felesleges.
export KEY_SIZE=2048
A szerkesztés után aktualizálni kell a változásokat.
source vars
Itt egy kis fekete leves jön. A “whichopensslcnf” fájl 13. sorában módosítani kell a sort erről
cnf="$1/openssl.cnf"
Erre:
cnf="$1/openssl-1.0.0.cnf"
Adjuk ki ezt a parancsot és hajtsuk végre benne a fent említett módosítást. Ez azért szükséges, mert nem találja a script a megfelelő .cnf fájlt.
sudo nano whichopensslcnf
Ha esetleg kihagytuk a fent említett módosítást, vagy már volt próbálkozás a kulcsok generálására, esetleg valamiért újra kell kezdenünk az egészet, akkor futtasuk az alábbi clean-all parancsot.
./clean-all
Végre hozzáláthatunk a saját root kulcs és tanúsítvány generálásához.
Ha a vars fájlban előzőleg módosítottuk a KEY_* változókat, akkor most találkozhatunk velük az alábbi parancs futattása közben.
./build-ca
Hurrá! Ha minden jól ment, akkor létrejött egy ca.key (titkos kulcs) és a ca.crt (tanúsítvány). Ez fogja majd aláírni és hitelesíteni a kulcsokat, amiket később hozunk létre. A ca.key a rendszer legféltettebb kincse. A hivatalos ajánlat szerint egy olyan számítógépen érdemes tárolni, ami még csak hálózati kapcsolattal sem rendelkezik. A legjobb megoldás pedig az lenne, hogy az egyik gép csak egy aláíró szerepet töltene be, és egy másikon pedig a kulcsok lennének generálva, majd azokat a kulcsokat valami biztonságos (lehallgathatatlan csatornán) csatornán kellene eljuttatni, aláírni illetve visszajuttatni a kulcs generáló gépre.
A ca.crt fájlt el lehetne küldeni egy hitelesítő szervezetnek, de erről majd bővebben egy másik bejegyzésben fogok írni.
Ezek után le kell generálni a kiszolgálónak a kulcsát.
./build-key-server server
A Challenge password és a company name opcionálisan megadható.
A Challenge password esetén, ha megadunk egy jelszót, akkor minden egyes kulcs hozzáféréskor meg kell adnunk a jelszót. A company name pedig magáért beszél.
A következő két kérdésekre válaszul adjunk y betűt, mivel így fogja aláírni a kulcsot az előzőleg legenerált tanúsítvány.
Sign the certificate? [y/n]: y
1 out of 1 certificate requests certified, commit? [y/n]: y
A következő lépésben a Diffie-Hellman paramétert generáljuk le.
Bővebben itt olvashatunk róla!
Ez el tart egy darabig:
./build-dh
Az UDP port védelméhez kell még egy kulcs, amit minden félnek birtokolnia kell és valamilyen biztonságos kapcsolaton keresztül kell eljuttatni a kliensekhez.
A tls-auth irányelv kimondja, hogy HMAC aláírást ad minden SSL / TLS kézfogási csomaghoz az integritás-ellenőrzéshez. A használatához létre kell hoznia egy megosztott titkos kulcsot, amelyet a standard RSA tanúsítványon / kulcson kívül használnak:
openvpn --genkey --secret keys/ta.key
A szerverhez használatos kulcsok elkészültek és át is lehet másolni az OpenVPN könyvtárába:
sudo cp keys/{server.crt,server.key,ca.crt,dh2048.pem,ta.key} /etc/openvpn
Szerver mintakonfigurációját az OpenVpn már elkészítette, De ehhez ki kell csomagolni ide: /etc/openvpn/server.conf
gzip -d -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf > /dev/null
Szerver konfigurálása
Az előbb említett konfig fájlban eszközölnünk kell módosításokat.
Ha szeretnénk, hogy a helyi hálózaton is rá tudjunk csatlakozni, akkor ki kell venni a kommentet a ;local a.b.c.d elöl és írjuk át a vpn szerver helyi IP-címére. pl.: local 192.168.0.2
A port szám alapértelmezetten az 1194, de néhány szolgáltató szándékosan tiltja, plusz az sem hátrány, hogy ha az esetleges támadók valamikor ki szeretnének használni egy még fel nem fedezett biztonsági hibát, akkor ne kínáljuk tálcán az alapértelmezett porton a szolgáltatást.
Ilyen formában keressük: port 1194
A következő beállításokat hagyjuk egyenlőre úgy ahogy vannak:
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
keepalive 10 120
tls-auth ta.key 0
cipher AES-256-CBC
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
verb 3
explicit-exit-notify 1
Vegyük ki a kommentet mögüllük
push “redirect-gateway def1 bypass-dhcp” #A kliensek alapértelmezetten a vpn-en keresztül fognak kommunikálni.
push “dhcp-option DNS 208.67.220.220”
comp-lzo #Kommunikáció alatt felhasznált tömörítési eljárás
user nobody #A szerver jogosultságát állíthatjuk be velük
group nogroup
Kiszolgáló indítása
VPN szerviz elindítása @server-el lehet megmondani, hogy melyik config fájl alapján induljon el a szerver
sudo systemctl start openvpn@server
Meg tudjuk nézni, hogy fut-e az adott service
sudo systemctl status openvpn@server
Ha minden jó, akkor többek közt ezt kell látnunk:
Active: active (running)
Az automatikus induláshoz az alábbi parancs szükséges
sudo systemctl enable openvpn@server
Kliens kulcs(ok) generálása
Itt futassuk az alábbi parancsokat. Az utolsó parancs client helyére a kliens kulcs nevét adjuk meg. Ha több kliens kulcsot generálunk, akkor természetesen mindig más névvel kell létrehozni
cd ~/certificates && source vars && ./build-key client
A kiszolgáló kulcs generálásnál már megismert kérdésekre válaszoljunk értelemszerűen itt is.
Ne feledjük el aláírni a kliens kulcsokat is!
Sign the certificate? [y/n]: y
1 out of 1 certificate requests certified, commit? [y/n]: y
Kliens config fájl készítése
Egyszerűen készíthetünk ovpn fájlt, az alábbi scripttel
wget http://lekrinszkimark.tk/wp-content/uploads/2018/10/make_ovpn.txt -O make_ovpn.sh && chmod 775 make_ovpn.sh
Majd tudnunk kell válaszolni három kérdésre:
1. Az OpenVpn kiszolgáló külső vagy lokális IP címe. Ne feledjük el, hogy lokálisat csak akkor használhatunk, ha azt a server.conf-ban beállítottuk!
2. A kiszolgáló port számát, alapértelmezetten 1194, de ha megváltoztattuk a conf-ban, akkor azt kell itt megadni.
3.A kliens neve, ami t kulcs generálásnál megadtunk. Ezen leírás alapján: client
Tűzfalbeállítás és csomagátirányítás
Hamarosan…
Forrás: https://www.digitalocean.com/community/tutorials/how-to-set-up-an-openvpn-server-on-ubuntu-18-04