Section author: Manuel Maraš, Vedran Miletić

Tuneliranje alatom OpenVPN

Za početak najbolje bi bilo ukratko pojedinačno objasniti šta to znači tuneliranje i što je to VPN te čemu služi OpenVPN. Krenimo od VPN-a. Dakle VPN kratica stoji za Virtual Private Netvork. VPN nam pruža privatnu mrežu povrh neke javne mreže kao što je Internet. Pomoću VPN-a možemo slati i primati podatke preko javne mreže no zadržavati konfiguraciju VPN-a, zadržavanjem sigurnosti i funkcionalnosti koje nam VPN pruža osiguravamo da su podatci koje šaljemo sigurni i ne izmijenjeni. OpenVPN je zaseban softvere client-server tehnologije koji je instaliran na računalima koji ga koriste.

U suštini on pomoću tunela spaja client računalo sa server računalom. Taj tunel prolazi internetom kroz razne rutere te dolazi do svog cilja odnosno servera. Najčešće se upotrebljava zbog sigurnosnih razloga jer tunel se teško može penetrirati od strane hakera te podatci koje on šalje su kriptirani sto dodatno otežava njihovo neovlašteno prikupljanje.

Tuneliranje je proces koji omogućava korisnicima da koriste neke usluge koje mreža na kojoj se nalaze ne podržava spajajući njihovih računala s nekim drugim računalom te simulirajući drugu mrežu pomoću tunela. Tuneliranje se takoder koristi kada želimo neke podatke sigurno prebaciti s jedne točke na drugu. Ako tunel prijeti bilo kakav napad na sebe on se automatski urušava te se gradi pomoću drugog skupa rutera. Bez obzira na ovu funkcionalnost podatci koje šalje su kriptirani tako da jedino računalo kojem su podatci namijenjeni može podatke dešifrirati.

Planiranje

U ovom dijelu ukratko ćemo opisati na koji način planiramo izvesti nas VPN. Koristit ćemo jedno računalo na kojemu ćemo instalirati 2 OS-a u virtual machine programu. Prvi OS koristit ćemo kao server. Na njemu ćemo omogućiti dvije mrežne kartice. Jedna u bridged modu koja prima IP preko DHCP-a s interneta, a druga u LAN segmentu koja bi služila za povezivanje računala u LAN-u s serverom. Na taj način načinili smo ruter od svog servera te pomoću njega možemo vrišti komunikaciju nekog računala kroz taj server do računala koji je povezan LAN-om s serverom. Naš drugi OS ćemo koristit za spajanje kroz server pomoću OpenVPN-a.

Sljedeći korak je kreiranje OS-a u nekom Virtal machine softweru. Taj postupak neću objašnjavati jer nije direktno povezan s OpenVPN-om.

Konfiguracija preduvjeta

Nakon instalacije CentOS-a 7 moramo konfigurirati OpenVPN server. Za pocetak bi trebali naredbom hostname vidjeti ime hosta. To činimo da svom hostu damo neko smisleno ime. To editiramo u fileu /etc/hostname pomoću nekog uređivača teksta. Nakon toga trebamo editirati i /etc/hosts file te dodati naš novi hostname u taj file.

Sljedeće što moramo napraviti na našem serveru je konfigurirati mrežne kartice. Fileovi za konfiguriranje mrežnih kartica nalaze se u /etc/sysconfig/network-scripts.

Mrežna kartica eth1 je kartica koja je postavljena u bridged mode te nam služi za povezivanje na Internet.

Mrežna kartica eth0 je namijenjena za povezivanje u LAN. Glavna razlika koju primjećujemo je BOOTPROTO koji je u bridged modu postavljen na DHCP odnosno automatsko preuzimanje IP adrese dok je kod naše eth0 kartice postavljen na static te mu je dana IP adresa 192.168.10.1.

Nakon editiranja ovih postavki možemo ugasiti network-manager jer želimo koristiti svoje postavke. To činimo naredbama systemctl stop NetworkManager te zatim systemctl disable NetworkManager. Zadnja stvar sto moramo napraviti je service network restart da restartamo mrežu.

Konfiguracija OpenVPN servera i izrada ključeva

Za instaliranje OpenVPN-a nam treba Epel repozitorij. Njega instaliramo s yum install epel-release. Još jedna stvar koju je potrebno napraviti prije konfiguracije OpenVPN-a je konfiguriranje ili gašenje firewalla. Posto za nas tutorijal ne postoji opasnost od nekakvog napada mi firewall možemo ugasiti u svrhu prezentiranja rada OpenVPN-a. Inače bi morali dopustiti slušanje te slanje podataka s OpenVPN porta koji je uobičajeno 1194. Firewall gasimo naredbama systemctl stop firewalld te zatim systemctl disable firewalld.

Nakon toga možemo instalirati OpenVPN pomoću naredbe yum install openvpn. Nakon što smo instalirali openvpn moramo prebaciti server config file u neku nasu datoteku gdje ćemo ga editirati. Ta datoteka se nalazi u /usr/share/doc/openvpn2.3.10/sample/sample-config-files datoteci. Iz ove datoteke kopiramo server.conf file u /etc/openvpn datoteku u kojoj ćemo vršiti uređivanje te datoteke. To radimo tako da zbog nekog updatea OpenVPN-a ne bismo gubili naše postavke u server datoteci /etc/openvpn/server.conf.

Datoteka server.conf ima mnogo postavki, no neke bitne za izmijeniti su:

  • push "redirect-gateway def1 bypass-dhcp", koji omogućuje da svi klijenti preusmjeravanju svoj internet promet preko VPN-a,
  • push "dhcp-option DNS 8.8.8.8" i push "dhcp-option DNS 8.8.4.4", što omogućuje korištenje googleovih DNS servera.

Za ne-Windows sustave možemo uključiti i user nobody i group nobody.

To su osnovne postavke za nas OpenVPN server. Sada možemo početi s izradom certifikata i ključeva. Prvo moramo preuzeti s yum install easy-rsa softwere za njihovu izradu. Sada ćemo naredbom:

# mkdir -p /etc/openvpn/easy-rsa/keys

kreirati direktorije koji su nam potrebni. Sljedeća naredba koju koristimo je:

# cp -rf /usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsa

za kopiranje filova iz direktorija easy-rsa u naš direktorij u kojem ćemo uređivati datoteke.

Uredit ćemo datoteku /etc/openvpn/easy-rsa/vars koja ima varijable KEY_COUNTRY, KEY_PROVINCE`, ``KEY_CITY, KEY_ORG, KEY_EMAIL, KEY_OU i KEY_NAME koje možemo mijenjati i koje se koriste u skriptama koje koristimo za izgradnju naših ključeva. Kasnije datoteku vars uključujemo pomoću naredbe source ./vars. Prvo pokrenemo skriptu ./clean-all da očistimo sve stare ključeve. Nakon toga možemo početi izgradnju ključeva s naredbom:

# ./build-ca

Ako smo dobro editirali datoteku vars samo je potrebno pritiskati enter i prihvaćati imena koja smo ranije unijeli u datoteci. Prvi ključ je ključ naziva certificate of authority.

Sljedeći ključ koji radimo je server ključ naredbom:

# ./build-key-server $(hostname)

Zadnji ključ koji nam je potreban je Diffie-Hellman ključ te ga izradimo naredbom:

# ./build-dh

Nakon izvršetka procesa trebali bi dobiti sve te ključeve u direktoriju keys.

Nakon izgradnje ključeva kopirat ćemo ključeve i certifikate dh2048.pem, server-cent7.key, server-cent7.csr i ca.crt u direktorij /etc/openvpn.

U slučaju da koristimo SELinux, potrebno je izvesti:

# restorecon -Rv /etc/openvpn

za obnavljanje sigurnosnih konteksta datoteka.

Sljedeća stvar koju moramo učiniti je urediti datoteku server.conf. Moramo promijeniti imena datoteka ključeva i certifikata na imena koja mi imamo. Sve sto nam je preostalo je pokrenuti OpenVPN server. Koristimo naredbe:

# systemctl -f enable openvpn@server.service
# systemctl start openvpn@server.service

za pokretanje te naredbu:

# systemctl status openvpn@server.service

kako bismo vidjeli status servera.

Sljedeća stvar koju moramo učiniti je urediti datoteku sysctl.conf na serveru dodavši mu liniju teksta net.ipv4.ip_forward = 1 da bi učinili nas server ruterom (što je nužno kako bi klijenti mogli pristupati internetu putem VPN-a) te naredbom sysctl -p učitamo promjene.

Ograničavanje korištenja

Također možemo dodati korisnike i password za korisnike koji se koriste našim OpenVPN-om. To činimo u datoteci /etc/pam.d/openvpn sadržaja:

auth    required        pam_unix.so      shadow  nodelay
account required        pam_unix.so

Nakon toga u datoteci server.conf moramo dodati liniju na kraj filea da bi autentifikacija korisnika radila. Linija koju dodajemo je:

plugin /usr/lib64/openvpn/plugins/openvpn-plugin-auth-pam.so openvpn

Sljedeće što dodajemo server.conf fileu je:

push "route 192.168.10.0 255.255.255.0"
client-to-client

To dodajemo da omogućimo komunikaciju korisnika unutar OpenVPN-a te dodajemo rutu između servera i LAN uređaja koji su na njega spojeni. Za kraj restartamo server te sve sta je preostalo je spojiti klijenta s serverom.

Konfiguracija klijent strane

Nakon uspostave servera moramo načiniti ključeve za klijent računala koja se spajaju na server da bismo imali sigurnu komunikaciju. To su ključevi myclient1.key, myclient1.csr i myclient1.crt. Te ključeve izgrađujemo na serveru te ih prebacujemo na klijent računalo. Ono sta trebamo napraviti je učitati datoteku vars naredbom source ./vars te zatim stvoriti ključ naredbom:

$ ./build-key myclient1

Nakon unosa svih parametara dobijemo potvrdu dali želimo izgraditi taj ključ te unosom slova y ključ se izrađuje. Ključeve koje trebamo prebaciti na klijent računalo su ca.crt, myclient1.crt i myclient1.key. Za myclient1.key moramo promijeniti dozvole naredbom chmod da bi se datoteka mogla koristiti na drugom računalu. Te ključeve trebamo prebaciti na klijentsko računalo nekim sigurnim kanalom (fizičko kopiranje datoteka, SFTP ili sl.).

Nakon što dobijemo sve potrebne ključeve moramo imati klijent postavke za OpenVPN. To radimo tako da napravimo file koji ćemo nazvati myclient.ovpn naredbom touch. U njega pišemo postavke koje su nam potrebne za konektiranje na server. Postavke koje ćemo unijeti su:

client
dev tun
remote 192.168.5.12 1194
resolv-retry infinte
nobind
persist-key
persist-tun
comp-lzo
verb 3
ca ca.crt
cert myclient1.crt
key myclient1.key
auth-user-pass

U direktoriju gdje nam je myclient.ovpn pokrećemo naredbu openvpn myclient.ovpn. Prvo što se od nas traži je unos Auth username-a i Auth password-a te nakon unosa toga dobivamo niz poruka koji nam kaže je li veza uspješno uspostavljena. Na kraju Initialization Sequence Completed nam znaci da nam je spajanje na server uspješno.

Sada u drugom terminalu možemo naredbom ifconfig vidjeti našu tunel konekciju.

tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1500
     inet 192.168.10.2  netmask 255.255.255.0  destination 192.168.10.2
     inet6 fe80::57df:89cb:7d70:e596  prefixlen 64  scopeid 0x20<link>
     unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 500  (UNSPEC)
     RX packets 107875  bytes 47533126 (45.3 MiB)
     RX errors 0  dropped 0  overruns 0  frame 0
     TX packets 87539  bytes 47935505 (45.7 MiB)
     TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Dodaj https://www.c0ffee.net/blog/openvpn-guide/

Literatura: