Situatie
OpenVPN este o implementare de VPN atat client cat si server pentru Linux/Windows/Mac. Pentru a folosi openVPN este necesara existenta unui server openVPN in reteaua tinta, fie gateway-ul fie un sever dedicat din “DMZ” (cu ip accesibil public si conectat la reteaua interna). La client trebuie instalat un soft de client si facute configuratii pentru adresa server, port, cehei de criptare, etc.
OpenVPN poate functiona in server cu routare tcp/ip adica interfata tip “tun” sau cu bridge catre LAN adica interfata tip “tap”. In cazul interfetei “tun” trebuie configurate reguli de firewall pentru interfata “tun+” in cazul interfetei “tap” trebuie configurat bridge intre “tap+” si interfata catre lan (reteaua interna).
Pachetele necesare pe linux sunt openvpn si easy-rsa. Pe windows e necesar pachetul openvpn diferanta server sau client o face fisierul de configurare.
https://openvpn.net/index.php/open-source/downloads.html
Versiunea curenta este 2.4.4.
In mod implicit openVPN foloseste portul 1194 / UDP. Se poate seta un alt port / TCP sau UDP.
Backup
1. configurarea cheilor de acces – se face o singura data – la instalare pe server. Se genereaza chei pentru server si – eventual – mai multe chei client. Cheile client pot fi protejate suplimentar cu parola.
Este pasul cel mai complicat si consumator de timp.
2. Configurarea fisierului /etc/openvpn/server.conf, a regulilor de firewall si setarea serviciului de openVPN sa porneasca la bootare
3. Configurarea clientului linux (sau windows)
Solutie
Pasul 1
Odata cu instalarea pachetului easy-rsa vom avea in directorul /usr/share/doc/easy-rsa sau /usr/share/doc/packeges/easy-rsa un Readme care prezinta pasii de generare chei server / client. Binarele sunt in directorul /usr/share/easy-rsa si in general se recomanda copierea lor in /etc/openvpn care este directorul principal de configurare openVPN
cp -r /usr/share/easy-rsa/ /etc/openvpn/easy-rsa
Se merge in directorul unde exista fisierul “vars” si se editeaza la sfarsitul lui variabilele: KEY_COUNTRY,
KEY_PROVINCE,
KEY_CITY, KEY_ORG
si
KEY_EMAIL
Fara a lasa vreuna neconfigurata.
# These are the default values for fields
# which will be placed in the certificate.
# Don’t leave any of these fields blank.
export KEY_COUNTRY=”RO”
export KEY_PROVINCE=”VL”
export KEY_CITY=”Rm.Valcea”
export KEY_ORG=”Home”
export KEY_EMAIL=”me@myhost.mydomain”
export KEY_OU=”OrganizatiaPreferata”
Succesiunea de comenzi ce urmaeza va genera setul de chei necesare:
** Cheile clientX.crt, clientX.key si ca.crt trebuie sa ajunga la client – de preferinta intr-o arhiva cu parola **
Filename |
Needed By |
Purpose |
Secret |
ca.crt |
server + all clients |
Root CA certificate |
NO |
ca.key |
key signing machine only |
Root CA key |
YES |
dh{n}.pem |
server only |
Diffie Hellman parameters |
NO |
server.crt |
server only |
Server Certificate |
NO |
server.key |
server only |
Server Key |
YES |
client1.crt |
client1 only |
Client1 Certificate |
NO |
client1.key |
client1 only |
Client1 Key |
YES |
client2.crt |
client2 only |
Client2 Certificate |
NO |
client2.key |
client2 only |
Client2 Key |
YES |
client3.crt |
client3 only |
Client3 Certificate |
NO |
client3.key |
client3 only |
Client3 Key |
YES |
cd /usr/openvpn/easy-rsa – directorul care contine fisierul vars
source ./vars – se incarca setarile de variabile
./clean-all – se streg eventualale chei mai vechi
./build-ca – se genereaza Cert Authority (CA)
– Singurul parametru suplimentar necesar de introdus aici este “Common Name”
Ex: OpenVPN-CA
./build-key-server server – se genereaza certificatul si cheia privata pt server cu numele “server”
./build-dh – genereaza dh.pem
Urmeaza a se genera chei pentru clienti VPN – client1, client2, client3:
./build-key client1
./build-key client2
./build-key client3
Daca se doreste parola pentru fiecare client se utilizeaza build-key-pass in loc de build-key
Ulterior se pot genera alte chei din acelasi director cu comanda ./build-key <nume> dupa ce se executa source ./vars
Se copiaza cheile generate pe server – de exemplu – in directorul /etc/openvpn/keys
mkdir /etc/openvpn/keys
cp /etc/openvpn/easy-rsa/keys/ca.crt /etc/openvpn/keys
cp /etc/openvpn/easy-rsa/keys/server.crt /etc/openvpn/keys
cp /etc/openvpn/easy-rsa/keys/server.key /etc/openvpn/keys
cp /etc/openvpn/easy-rsa/keys/dh2048.pem /etc/openvpn/keys
Pasul 2 – fisierul .conf de pe server:
O configuratie simpla este data mai jos server.conf si trebuie creata in /etc/openvpn/server.conf
(Exemple de configurare incluse in pachetul openVPN sunt date in /usr/share/doc/openvpn/examples)
=============================================
#change with your port
#port 1194
port 1337
#You can use udp or tcp
proto udp
# “dev tun” will create a routed IP tunnel.
dev tun
#Certificate Configuration
#ca certificate
ca /etc/openvpn/keys/ca.crt
#Server Certificate
cert /etc/openvpn/keys/server.crt
#Server Key and keep this is secret
key /etc/openvpn/keys/server.key
#See the size a dh key in /etc/openvpn/keys/
dh /etc/openvpn/keys/dh2048.pem
#Internal IP will get when already connect
server 192.168.200.0 255.255.255.0
#this line will redirect all traffic through our OpenVPN
push “redirect-gateway def1”
#Provide DNS servers to the client, you can use goolge DNS
push “dhcp-option DNS 8.8.8.8”
push “dhcp-option DNS 8.8.4.4”
#Enable multiple client to connect with same key
duplicate-cn
keepalive 20 60
comp-lzo
persist-key
persist-tun
daemon
#enable log
log-append /var/log/myvpn/openvpn.log
#Log Level
verb 3
=============================================
Pentru a testa configuratia se poate lansa ca root
openvpn –config server.conf (sau openvpn /etc/openvpn/server.conf)
Si apoi opri cu
killall -9 openvpn
Sau se poate porni ca serviciu:
systemctl list-unit-files|grep enabled
systemctl enable openvpn, systemctl start openvpn, sau opri cu systemctl stop openvpn
sudo service openvpn start or stop or restart
…
Pentru ca traficul VPN ↔ LAN sa functioneze trebuie setate reguli de firewall:
iptables -I INPUT -i tun+ -j ACCEPT
iptables -I FORWARD -s <local_lan_ip/24> -d 192.168.200.0/24 -j ACCEPT
iptables -I FORWARD -d <local_lan_ip/24> -s 192.168.200.0/24 -j ACCEPT
Trebuie de asemenea sa permite accesul spre internet pentru ca in fisierul server.conf am setat routa default prin VPN
(echo 1 > /proc/sys/net/ipv4/ip_forward)
iptables -t nat -A POSTROUTING -s 192.168.200.0/24 -o eth0 -j MASQUERADE
Pasul 3
La client trebuie sa ajunga clientX.key, clientX.crt si ca.crt impreuna cu fisierul de configurare client.conf
Sub windows client.conf sa renumeste client.ovpn
La “remote” se trece adresa publica a serverului openVPN spatiu PORT:
========================================
client dev tun proto udp #Server IP and Port remote 192.168.1.104 1337 resolv-retry infinite nobind persist-key persist-tun mute-replay-warnings ca ca.crt cert clientX.crt key clientX.key ns-cert-type server comp-lzo
========================================
Pentru windows trebuie ca fisierele sa fie copiate in c:ProgramFiles(86)openvpnconf si trebuie rulat ca administrator pentru ca trebuie sa aiba drepturi sa creeze interfata tun.
Pentru linux se copiaza in acelasi director cheile si client.conf si se lanseaza:
sudo openvpn –config client.conf &
Tip solutie
PermanentImpact colateral
Resurse si documentatie:Documentatia openVPN:
https://openvpn.net/index.php/open-source/documentation/howto.html
HowtoForge are mai multe tutoriale despre openVPN
https://www.howtoforge.com/tutorial/how-to-install-openvpn-on-centos-7/
De asemenea si digitalocean
https://www.digitalocean.com/community/tutorials/how-to-set-up-an-openvpn-server-on-ubuntu-16-04
Sau archlinux
https://wiki.archlinux.org/index.php/OpenVPN
Leave A Comment?