Fleksibilno VPN rješenje pomoću OpenVPN-a

U današnje vrijeme je korištenje VPN mreža neophodno za većinu poduzeća, bilo velikih ili manjih. VPN omogućava povezivanje više različitih lokacija ili povezivanje “road warrior” klijenata u jednu geografski rasprostranjenu mrežu preko nesigurnog Interneta umjesto tradicionalnog povezivanja pomoću dediciranih Layer2 ili Layer3 VPN usluga koje nude telekomunikacijski operateri.

Unazad 15 godina su se koristili razni VPN protokoli poput PPTP, SSTP, L2TP/IPSec, ali su svi imali određene mane. PPTP je nesiguran, SSTP ne podržava site-to-site veze, L2TP/IPSec nije fleksibilan i lako ga je blokirati.

OpenVPN je, iako mlad, izrazito fleksibilan i siguran protokol koji koristi SSL/TLS kriptografske protokole za kriptiranje podataka. Neke od prednosti ovog VPN protokola su:

  • podržava site-to-site kao i client-to-site veze
  • autentifikacija pomoću unaprijed dijeljenog ključa, certifikata ili kombinacija ključa i certifikata
  • koristi snažan SSL/TLS protokol za kriptiranje
  • podržava HMAC autentifikaciju paketa
  • može raditi preko TCP i preko UDP transportnog protokola te bilo kojeg porta
  • nema poteškoća u radu preko NAT veza

 

Primjer topologije VPN mreže pomoću OpenVPN-a

 

 

Primjer topologije VPN mreže pomoću OpenVPN-a

 

 

Na mjestima gdje su ostali VPN protokoli blokirani na vatrozidu (npr. fakulteti), OpenVPN u većini slučajeva može lako zaobići taj problem. Primjerice, OpenVPN možemo koristiti preko TCP protokola i TCP porta 443 koji odgovara HTTPS portu. TCP port 443 je samo u ekstremnim situacijama blokiran te se na njemu očekuje SSL/TLS kriptiran promet kakav će kroz OpenVPN vezu i prolaziti. U takvoj situaciji je jako teško razlikovati regularno surfanje na HTTPS stranicama od OpenVPN veze.

Sve ove mogućnosti OpenVPN protokola imaju svoju cijenu, a to je da može biti dosta kompleksan za konfiguraciju i dodaje dosta overheada prometu što u konačnici povećava latenciju paketa.

U nastavku je ukratko prikazana instalacija OpenVPN servera na Debian 8 distribuciji te konfiguracija servera i klijenta. Paketi su korišteni iz službenih repozitorija.

 

 

Pomoću apt upravitelja paketa smo instalirali sve potrebne pakete:

 

sudo apt¬get install easy¬rsa liblzo2¬2
libpkcs11¬helper1 opensc opensc¬pkcs11 openvpn

 

Kreirat ćemo novu mapu gdje ćemo prebaciti skripte iz easy‐rsa paketa pomoću kojih ćemo generirati certifikate potrebne za rad.

 

sudo mkdir /etc/openvpn/easy¬rsa

 

Nakon toga ćemo i prebaciti navedene skripte u novo kreiranu mapu.

 

sudo cp ¬r /usr/share/easy¬rsa/* /etc/openvpn/easy¬rsa/

 

U datoteci /etc/openvpn/easy¬rsa/vars se mogu upisati podaci koji će se koristiti kod kreiranja certifikata poput:

KEY_COUNTRY
KEY_PROVINCE
KEY_CITY
KEY_ORG
KEY_EMAIL
KEY_OU
KEY_NAME

Vrijednosti koje će se upisati su proizvoljne te nemaju utjecaj na rad sustava, samo osiguravaju da svi izdani certifikati imaju iste opće podatke. Jedini parametar koji ima utjecaj na rad sustava je KEY_SIZE kojim definiramo veličinu ključa. Defaultna vrijednost je 2048 bita te se ista može povećati na 4096 ili 8192 bita kako bi se povećala sigurnost komunikacije.

Sljedeći korak je generiranje svih potrebnih certifikata i Diffie Hellman parametara.

U konzolu ćemo upisati sljedeće naredbe:

 

cd /etc/openvpn/easy¬rsa
. ./vars  
./clean¬all

 

Druga naredba učitava sve varijable iz /etc/openvpn/easy¬rsa/vars datoteke kako bi se koristile u kreiranju certifikata dok treća naredba briše sve certifikate unutar easyrsa mape.

Nakon toga je potrebne kreirati Certificate Authority s kojim ćemo potpisivati sve daljnje certifikate:

 

./build¬-ca

 

Nakon toga ćemo generirati ključ za naš OpenVPN server:

 

./build¬-key-¬server OpenVPN_server

 

Posljednji korak koji je potreban za server je kreiranje Diffie Hellman parametara sa naredbom:

 

./build¬-dh

 

Sada kada su sve potrebne datoteke za server kreirane, možemo kreirati klijentske certifikate:

 

./build¬-key OpenVPN_korisnik

 

Sa ovime smo generirali sve potrebne ključeve te možemo kreirati potrebnu konfiguraciju za OpenVPN proces. Radi jednostavnosti administracije ćemo kreirane ključeve prebaciti u mapu /etc/openvpn/keys:

 

mkdir /etc/openvpn/keys
cp /etc/openvpn/easy‐rsa/keys/* /etc/openvpn/keys/

 

Konfiguracijska datoteka za OpenVPN je /etc/openvpn/server.conf te je u nastavku sadržaj te datoteke koja se koristila u ovom primjeru.

 

port 443  
proto tcp  
dev tun  
 
ca /etc/openvpn/keys/ca.crt  
cert /etc/openvpn/keys/OpenVPN_server.crt  
key /etc/openvpn/keys/OpenVPN_server.key  
dh /etc/openvpn/keys/dh2048.pem  
 
server 10.8.0.0 255.255.255.0  
client¬-to-¬client  
keepalive 5 120  
 
cipher AES¬-256-¬CBC  
comp¬-lzo  
 
max¬-clients 20  
user nobody  
group nogroup  
chroot /etc/openvpn/  
 
persist-¬key  
persist¬-tun  
 
verb 4  
mute 20

 

Detaljnije objašnjenje pojedinih dijelova konfiguracije postoji na Wikiu od OpenVPN organizacije te u primjeru konfiguracije koji se nalazi na putanji:

 

/usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz

Nakon što smo podesili konfiguraciju i pripremili sve potrebne certifikate i datoteke, OpenVPN server je spreman za pokretanje:

 

/etc/init.d/openvpn start

 

Klijentska konfiguracija koju ćemo koristiti je:

 

client
dev tun
proto tcp
remote IP_SERVERA 443
resolv-¬retry infinite
 
nobind
user nobody
group nogroup  
 
persist-¬key
persist¬-tun
mute¬-replay-¬warnings
 
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/OpenVPN_korisnik.crt
key /etc/openvpn/keys/OpenVPN_korisnik.key
 
cipher AES¬-256-¬CBC
 
comp¬-lzo
verb 4
mute 20

 

Ovisno o operativnom sustavu klijenta, konfiguracijska datoteka može biti na različitim lokacijama. Linux klijenti traže konfiguracijsku datoteku u istoj mapi kao i server, /etc/openvpn, sa ekstenzijom .conf. Windows klijenti nisu vezani uz točnu putanju konfiguracijske datoteke, već se oni vežu uz ekstenziju datoteke .ovpn. Oba operativna sustava koriste istu konfiguraciju, razlika je samo u ekstenziji.