Cześć !
Poniżej przedstawiam krotki poradnik jak skonfigurować OpenVPN na urządzeniu Ubiquiti EdgeRouter.
Poradnik składa się z następujących części:
1. Wygenerowanie certyfikatu CA
2. Wygenerowanie klucza dla serwera CA
3. Wygenerowanie klucza dla klienta który będzie się łączyć do serwera OpenVPN z własnym certyfikatem
4. Wygenerowanie pliku szyfrującego w oparciu o protokół Diffiego-Hellmana
5. Konfiguracja interfejsu vtun1 na urządzeniu Ubiquiti EdgeRouter
6. Konfiguracja protokołu SSH z poziomu Linuxa Ubiquiti EdgeRouter oraz ściągniecie plików dla klienta w celu zdalnego połączenia.
7. Test połączenia
8. Firewall
Zatem do dziela!
1. Wygenerowanie certyfikatu CA
Zaloguj się via ssh na urządzenie, następnie musimy przejść do „linuxa” naszego routera.
sudo su
Przenosimy pliki OpenVPN’a do /config/auth/ca, oraz tworzymy folder „keys”
cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0 /config/auth/ca
mkdir keys
Wydajemy następujące polecenia
root@ERL02-Skarzysko-Zielna-PL:/config/auth/ca# source vars
(Dostaniemy taki komunikat:
NOTE: If you run ./clean-all, I will be doing a rm -rf on /config/auth/ca/keys
root@ERL02-Skarzysko-Zielna-PL:/config/auth/ca# ./clean-all
Tworzymy certyfikat CA
root@ERL02-Skarzysko-Zielna-PL:/config/auth/ca# ./build-ca
Generating a 1024 bit RSA private key
.++++++
………..++++++
writing new private key to ‚ca.key’
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‚.’, the field will be left blank.
—–
Country Name (2 letter code) [US]:PL
State or Province Name (full name) [CA]:Swietokrzyskie
Locality Name (eg, city) [SanFrancisco]:Skarzysko-Kamienna
Organization Name (eg, company) [Fort-Funston]:VirtualOlivia
Organizational Unit Name (eg, section) [changeme]:VirtualOlivia
Common Name (eg, your name or your server’s hostname) [changeme]:ERL02-Skarzysko-Zielna-PL
Name [changeme]:VirtualOlivia
Email Address [mail@host.domain]: !!! twój adres e-mail !!!
2. Wygenerowanie klucza dla serwera CA
root@ERL02-Skarzysko-Zielna-PL:/config/auth/ca# ./build-key-server ERL02-Skarzysko-Zielna-PL-Server
Generating a 1024 bit RSA private key
…………..++++++
……………………………………………….++++++
writing new private key to ‚ERL02-Skarzysko-Zielna-PL-Server.key’
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‚.’, the field will be left blank.
—–
Country Name (2 letter code) [US]:PL
State or Province Name (full name) [CA]:Swietokrzyskie
Locality Name (eg, city) [SanFrancisco]:Skarzysko-Kamienna
Organization Name (eg, company) [Fort-Funston]:VirtualOlivia
Organizational Unit Name (eg, section) [changeme]:VirtualOlivia
Common Name (eg, your name or your server’s hostname) [ERL02-Skarzysko-Zielna-PL-Server]:
Name [changeme]:VirtualOlivia
Email Address [mail@host.domain]: !!! twój adres e-mail !!!
Please enter the following ‚extra’ attributes
to be sent with your certificate request
A challenge password []: !!! tutaj daj mega ściśle tajne hasło !!!
An optional company name []:VirtualOlivia
Using configuration from /config/auth/ca/openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject’s Distinguished Name is as follows
countryName :PRINTABLE:’PL’
stateOrProvinceName :PRINTABLE:’Swietokrzyskie’
localityName :PRINTABLE:’Skarzysko-Kamienna’
organizationName :PRINTABLE:’VirtualOlivia’
organizationalUnitName:PRINTABLE:’VirtualOlivia’
commonName :PRINTABLE:’ERL02-Skarzysko-Zielna-PL-Server’
name :PRINTABLE:’VirtualOlivia’
emailAddress :IA5STRING: !!! twój adres e-mail !!!
Certificate is to be certified until Nov 29 22:06:59 2024 GMT (3650 days)
Sign the certificate? [y/n]:y
Potwierdzenie wygenerowanego klucza dla naszego serwera.
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
3. Wygenerowanie klucza dla klienta który będzie się łączyć do serwera OpenVPN z własnym certyfikatem
Powtarzamy procedurę tak jak to miało miejsce w punkcie 1.
root@ERL02-Skarzysko-Zielna-PL:/config/auth/ca# source vars
(Dostaniemy taki komunikat:
NOTE: If you run ./clean-all, I will be doing a rm -rf on /config/auth/ca/keys
root@ERL02-Skarzysko-Zielna-PL:/config/auth/ca# ./build-key ERL02-Skarzysko-Zielna-PL-Client
Generating a 1024 bit RSA private key
……………………………..++++++
………………….++++++
writing new private key to ‚ERL02-Skarzysko-Zielna-PL-Client.key’
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‚.’, the field will be left blank.
—–
Country Name (2 letter code) [US]:PL
State or Province Name (full name) [CA]:Swietokrzyskie
Locality Name (eg, city) [SanFrancisco]:Skarzysko-Kamienna
Organization Name (eg, company) [Fort-Funston]:VirtualOlivia
Organizational Unit Name (eg, section) [changeme]:VirtualOlivia
Common Name (eg, your name or your server’s hostname) [ERL02-Skarzysko-Zielna-PL-Client]:
Name [changeme]:VirtualOlivia
Email Address [mail@host.domain]:!!! twój adres e-mail !!!
Please enter the following ‚extra’ attributes
to be sent with your certificate request
A challenge password []: !!! tutaj daj mega ścisłe tajne hasło !!!
An optional company name []:VirtualOlivia
Using configuration from /config/auth/ca/openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject’s Distinguished Name is as follows
countryName :PRINTABLE:’PL’
stateOrProvinceName :PRINTABLE:’Swietokrzyskie’
localityName :PRINTABLE:’Skarzysko-Kamienna’
organizationName :PRINTABLE:’VirtualOlivia’
organizationalUnitName:PRINTABLE:’VirtualOlivia’
commonName :PRINTABLE:’ERL02-Skarzysko-Zielna-PL-Client’
name :PRINTABLE:’VirtualOlivia’
emailAddress :IA5STRING:’!!! twoj adres e-mail !!!‚
Certificate is to be certified until Nov 29 22:25:56 2024 GMT (3650 days)
Sign the certificate? [y/n]:y
Ponownie potwierdzenie utworzonego klucza dla klienta.
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
4. Wygenerowanie pliku szyfrujacego w opaciu o protokół Diffiego-Hellmana
Wygenerowanie klucza DH moze zajac nawet do 5-7 min. Zatem prosze sie nie przerazac 🙂
root@ERL02-Skarzysko-Zielna-PL:/config/auth/ca# ./build-dh
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
………………..+…………………………………………..+….+…………………………………………………………..+…………………………………………………………………………………………………………..+………………+…………….+………………………………………………………………………………………..+…….+……………………………………..+……………..+.+……..+………………….+……………………………+……………………………………………………………………………………………………………………………………..+……………………………………………………………………..+……………………………………………………………………………………………………+………………………+……………………………………………………………………………………………………………………………………………………………………………………………………++*++*++*
root@ERL02-Skarzysko-Zielna-PL:/config/auth/ca#
5. Konfiguracja interfejsu vtun1 na urzadzeniu Ubiquiti EdgeRouter
Wychodzimy z root (exit). nastepnie przechodzimy do normalnego poziomu konfiguracyjnego (polecenie configure) zabieramy sie za konfiguracje naszego interfesu vtun ktory bedzie terminowac nasze polaczenia (Remote Access) na przyklad ze zdalnego laptopa, telefonu itp…
set interfaces openvpn vtun1 description „Remote Access to ERL02-Skarzysko-Zielna-PL”
set interfaces openvpn vtun1 local-port 1195
set interfaces openvpn vtun1 mode server
set interfaces openvpn vtun1 server name-server 10.0.2.1
set interfaces openvpn vtun1 server push-route 10.0.2.0/23
set interfaces openvpn vtun1 server push-route 10.254.2.0/30
set interfaces openvpn vtun1 server subnet 192.168.237.0/24
Ja sobie wczesniej utowrzone certyfikaty na urzadzeniu Ubiquiti przenioslem do stworzonego przezemnie folderu, dzieki czemu mam czytelny porzadek, i wiem co gdzie mam.
Nalezy pamietac, przy multi tunnelach OpenVPN, musimy definiowac unikalny local-port 1195, 1196. Nie mozemy skonfigurowac kilka tunneli na jednym porcie, gdyz bedzie konflikt.
Polecenie push-route oznacza jakie podsieci w celu routingu chcemy wstrzykac do naszego tunnelu. Czyli dzieki temu, bede miec dostep do lokalnych podsieci na moim ERL`u
Server subnet, jest to cala podsiec dla polaczenia tunelowego Remote Access.
Bardzo wazna informacja, jezeli chcesz aby nie tylko jeden klient mogl skorzystac z certyfikatu,
nalezy dodac opcje do vpn, definujac argument openvpn-option –duplicate-cn.
Dzieki temu wpisowi nie musimy tworzyc nowych cerrtfiaktow dla kliwntow 🙂
pwojtachnio@ERL02-Skarzysko-Zielna-PL# set interfaces openvpn vtun1 openvpn-option –duplicate-cn
set interfaces openvpn vtun1 tls ca-cert-file /config/auth/openvpn/ERL02-Skarzysko-Zielna-PL-Remote-Access/ca.crt
set interfaces openvpn vtun1 tls cert-file /config/auth/openvpn/ERL02-Skarzysko-Zielna-PL-Remote-Access/ERL02-Skarzysko-Zielna-PL-Server.crt
set interfaces openvpn vtun1 tls dh-file /config/auth/openvpn/ERL02-Skarzysko-Zielna-PL-Remote-Access/dh1024.pem
set interfaces openvpn vtun1 tls key-file /config/auth/openvpn/ERL02-Skarzysko-Zielna-PL-Remote-Access/ERL02-Skarzysko-Zielna-PL-Server.key
Wyzej opisalem jak przypisac wczesniej stworzone certyfiakty to polaczenia tunelowego.
Po przyklepaniu konfiguracji u mnie tak to wyglada:
pwojtachnio@ERL02-Skarzysko-Zielna-PL# show interfaces openvpn
+openvpn vtun1 {
+ description „Remote Access to ERL02-Skarzysko-Zielna-PL”
+ local-port 1195
+ mode server
+ server {
+ name-server 10.0.2.1
+ push-route 10.0.2.0/23
+ push-route 10.254.2.0/30
+ subnet 192.168.237.0/24
+ }
+ tls {
+ ca-cert-file /config/auth/openvpn/ERL02-Skarzysko-Zielna-PL-Remote-Access/ca.crt
+ cert-file /config/auth/openvpn/ERL02-Skarzysko-Zielna-PL-Remote-Access/ERL02-Skarzysko-Zielna-PL-Server.crt
+ dh-file /config/auth/openvpn/ERL02-Skarzysko-Zielna-PL-Remote-Access/dh1024.pem
+ key-file /config/auth/openvpn/ERL02-Skarzysko-Zielna-PL-Remote-Access/ERL02-Skarzysko-Zielna-PL-Server.key
+ }
+}
[edit]
pwojtachnio@ERL02-Skarzysko-Zielna-PL#
dajemy commit oraz save.
6. Konfiguracja protokolu SSH z poziomu linuxa Ubiquiti EdgeRouter oraz sciagniecie plikow dla klienta w celu zdalnego polaczenia.
root@ERL02-Skarzysko-Zielna-PL:/home/pwojtachnio# cd /etc/ssh/
root@ERL02-Skarzysko-Zielna-PL:/etc/ssh# mcedit sshd_config
Szukamy wartosci PermitRootLogin no i zmieniamy na PermitRootLogin yes
Zapisujemy, oraz na koniec restartujemy serwis ssh na ERL`u
root@ERL02-Skarzysko-Zielna-PL:/etc/ssh# service ssh restart
[ ok ] Restarting OpenBSD Secure Shell server: sshd.
root@ERL02-Skarzysko-Zielna-PL:/etc/ssh#
Sciagamy WinSCP oraz instalujemy. Przed logowaniem do ERL`a za posrednictwem konta root, trzeba sobie haslo ustawic. Jak to zostalo juz zrobione, sciagam certyfikaty i pliki potrzebne do zainicjowania polaczenia ze strony klienta OpenVPN.
root@ERL02-Skarzysko-Zielna-PL:/etc/ssh# passwd root
ca.crt
ERL02-Skarzysko-Zielna-PL-Client.crt
ERL02-Skarzysko-Zielna-PL-Client.key
7. Test polaczenia
Przechodizmy do folderu gdzie mamy zainstalowgo klienta OpenVPN.
C:\Program Files\OpenVPN\config
Tworze plik .ovpn z danymi ponizej:
client
dev tun1
proto udp
remote twoj publiczny adres IP Ubiquiti EdgeRouter 1195
nobind
ca ca.crt
cert ERL02-Skarzysko-Zielna-PL-Client.crt
key ERL02-Skarzysko-Zielna-PL-Client.key
verb 3
Calosc na tyle sie wydaje intuicyjna ze pominalem dokladne opisywanie co kazda kropka i przecinek znaczy. Zapisujesz plik .ovpn oraz uruchamiasz tunel.
Z poziomu ERL`a mozesz sprawdzic czy tunel wstal i czy dziala.
pwojtachnio@ERL02-Skarzysko-Zielna-PL:~$ show interfaces openvpn
Codes: S – State, L – Link, u – Up, D – Down, A – Admin Down
Interface IP Address S/L Description
——— ———- — ———–
vtun1 192.168.237.1/24 u/u Remote Access to
ERL02-Skarzysko-Zielna-PL
pwojtachnio@ERL02-Skarzysko-Zielna-PL:~$
pwojtachnio@ERL02-Skarzysko-Zielna-PL:~$ ping 192.168.237.1
PING 192.168.237.1 (192.168.237.1) 56(84) bytes of data.
64 bytes from 192.168.237.1: icmp_req=1 ttl=64 time=0.360 ms
64 bytes from 192.168.237.1: icmp_req=2 ttl=64 time=0.219 ms
64 bytes from 192.168.237.1: icmp_req=3 ttl=64 time=0.220 ms
^C
— 192.168.237.1 ping statistics —
3 packets transmitted, 3 received, 0% packet loss, time 2008ms
rtt min/avg/max/mdev = 0.219/0.266/0.360/0.067 ms
pwojtachnio@ERL02-Skarzysko-Zielna-PL:~$ show openvpn status server
OpenVPN server status on vtun1 [Remote Access to ERL02-Skarzysko-Zielna-PL]
Client CN Remote IP Tunnel IP TX byte RX byte Connected Since
————— ————— ————— ——- ——- ————————
ERL02-Skarzysko-Zielna-PL-Client 86.21.251.20 192.168.237.2 5.3K 13.5K Wed Dec 3 00:37:34 2014
pwojtachnio@ERL02-Skarzysko-Zielna-PL:~$
8. Firewall
Na koniec w zależności od konfiguracji firewalla, nie wolno zapomniec dodaj portow, oraz interfejsow do firewalla. Ja mam w opaciu o zone based firewall, zatem w zone based dodalem interfejs vtun1 oraz rulke na firewall na porcie 1195 UDP.
pwojtachnio@ERL02-Skarzysko-Zielna-PL# show zone-policy zone ZONE:WAN
default-action drop
description „ZONE:WAN Internet connection”
from ZONE:DMZ {
firewall {
name ZONE:DMZ_to_ZONE:WAN
}
}
from ZONE:Home:LAN {
firewall {
name ZONE:LAN_to_ZONE:WAN
}
}
from ZONE:MGMT {
firewall {
name ZONE:MGMT_to_ZONE:WAN
}
}
interface eth0
interface vti0
interface vtun1
[edit]
pwojtachnio@ERL02-Skarzysko-Zielna-PL#
Na koniec nie wolno zapomniec o powrocie do porzednich ustawien konfiguracji serwera ssh. Nie chcemy aby root posiadal dostep do ssh. To jest security issue 🙂
Zapraszam również do odwiedzania profilu na Facebook gdzie znajdziecie już pierwsze zdjęcia, oraz profil na YouTube gdzie również są pierwsze filmy.
www.facebook.com/VirtualOlivia
www.youtube.com/VirtualOlivia
Peace
Patryk Wojtachnio