piątek, 5 grudnia 2014

[Ubiquity] EdgeMax Lite Router - OpenVPN Remote Access

1. Wstęp
2. Wygenerowanie certyfikatu CA
3. Wygenerowanie klucza dla serwera CA
4. Wygenerowanie klucza dla klienta który będzie się łączyć do serwera OpenVPN z własnym certyfikatem
5. Wygenerowanie pliku szyfrującego w oparciu o protokół  Diffiego-Hellmana
6. Konfiguracja interfejsu vtun1 na urządzeniu Ubiquiti EdgeRouter
7. Konfiguracja protokołu SSH z poziomu Linuxa Ubiquiti EdgeRouter oraz ściągniecie plików dla klienta w celu zdalnego połączenia.
8. Test połączenia
9. Firewall

1. Wstęp
Logujemy się do naszego routera poprzez klienta SSH.



Wchodzimy w tryb powłoki systemu.

sudo su

Kopiujemy 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
cd /config/auth/ca/
mkdir keys
source vars
(Konsola zwróci nam taki komunikat):
NOTE: If you run ./clean-all, I will be doing a rm -rf on /config/auth/ca/keys

Używamy zatem komendy
./clean-all

2. Wygenerowanie certyfikatu 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]:Kujawsko-Pomorskie
Locality Name (eg, city) [SanFrancisco]:Bydgoszcz
Organization Name (eg, company) [Fort-Funston]:KlimasStudio
Organizational Unit Name (eg, section) [changeme]:Octopus
Common Name (eg, your name or your server's hostname) [changeme]:ERL05-Bydgoszcz-Gajowa-PL
Name [changeme]:Octopus
Email Address [mail@host.domain]:host@name.com.pl

3. Wygenerowanie klucza dla serwera CA
./build-key-server ERL05-Bydgoszcz-Gajowa-PL-Server

Generating a 1024 bit RSA private key
........++++++
...........++++++
writing new private key to 'ERL05-Bydgoszcz-Gajowa-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]:Kujawsko-Pomorskie
Locality Name (eg, city) [SanFrancisco]:Bydgoszcz
Organization Name (eg, company) [Fort-Funston]:KlimasStudio
Organizational Unit Name (eg, section) [changeme]:Octopus
Common Name (eg, your name or your server's hostname) [ERL05-Bydgoszcz-Gajowa-PL-Server]:
Name [changeme]:Octopus
Email Address [mail@host.domain]:host@name.com.pl

Please enter the following 'extra' attributes

to be sent with your certificate request
A challenge password []:**********
An optional company name []:KlimasStudio
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:'Kujawsko-Pomorskie'
localityName          :PRINTABLE:'Bydgoszcz'
organizationName      :PRINTABLE:'KlimasStudio'
organizationalUnitName:PRINTABLE:'Octopus'
commonName            :PRINTABLE:'ERL05-Bydgoszcz-Gajowa-PL-Server'
name                  :PRINTABLE:'Octopus'
emailAddress          :IA5STRING:'host@name.com.pl'
Certificate is to be certified until Dec  1 21:21:02 2024 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

4. Wygenerowanie klucza dla klienta który będzie się łączyć do serwera OpenVPN z własnym certyfikatem

source vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /config/auth/ca/keys

./build-key ERL05-Bydgoszcz-Gajowa-PL-Client
Generating a 1024 bit RSA private key
..................++++++
..............++++++
writing new private key to 'ERL05-Bydgoszcz-Gajowa-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]:Kujawsko-Pomorskie
Locality Name (eg, city) [SanFrancisco]:Bydgoszcz
Organization Name (eg, company) [Fort-Funston]:KlimasStudio
Organizational Unit Name (eg, section) [changeme]:Octopus
Common Name (eg, your name or your server's hostname) [ERL05-Bydgoszcz-Gajowa-PL-Client]:
Name [changeme]:Octopus
Email Address [mail@host.domain]:hostl@name.com.pl

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:**********
An optional company name []:KlimasStudio
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:'Kujawsko-Pomorskie'
localityName          :PRINTABLE:'Bydgoszcz'
organizationName      :PRINTABLE:'KlimasStudio'
organizationalUnitName:PRINTABLE:'Octopus'
commonName            :PRINTABLE:'ERL05-Bydgoszcz-Gajowa-PL-Client'
name                  :PRINTABLE:'Octopus'
emailAddress          :IA5STRING:'host@name.com.pl'
Certificate is to be certified until Dec  1 21:25:18 2024 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

5. Wygenerowanie pliku szyfrujacego w opaciu o protokół Diffiego-Hellmana
Ten proces może potrwać kilka minut 5-10.

./build-dh
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
.......................+............................................................................................................................................................................................................+....+......................................+............................................................................................................................................+.................................................................+.........................................................................................................................................................................+..................................................................................................+.............+........................................+.................................+..................................................................................................................................................................................................................................................................................................................+.......+..........................................+..............................+.....................................+...................................+...........................................................++*++*++*

6. Konfiguracja interfejsu vtun1 na urzadzeniu Ubiquiti EdgeRouterKopiujemy wygenerowane klucze z folderu /config/auth/ca/keys do /config/auth/openvpn/ERL05-Bydgoszcz-Gajowa-PL-Remote-Access.

cd /config/auth
mkdir openvpn
cd openvpn
mkdir ERL05-Bydgoszcz-Gajowa-PL-Remote-Access
cp /config/auth/ca/keys/* /config/auth/openvpn/ERL05-Bydgoszcz-Gajowa-PL-Remote-Access

Wychodzimy z trybu powłoki.
exit

Wchodzimy do konfiguracji. Ustawiamy opis tunelu, port. Ustawiamy tryb server i dodajemy wpisy o serwerze nazw, interfejsach które mają być dostępne w tunelu oraz podsieć w jakiej mają znajdować się urządzenia podłączane tunelem.

configure
set interfaces openvpn vtun1 description "ERL05-Bydgoszcz-Gajowa-PL"
set interfaces openvpn vtun1 local-port 1195
set interfaces openvpn vtun1 mode server
set interfaces openvpn vtun1 server name-server 10.10.1.12
set interfaces openvpn vtun1 server push-route 10.10.1.0/24
set interfaces openvpn vtun1 server push-route 10.10.2.0/24
set interfaces openvpn vtun1 server push-route 10.254.5.0/30
set interfaces openvpn vtun1 server subnet 192.168.5.0/24

Podajemy ścieżki do certyfikatów oraz kluczy.
set interfaces openvpn vtun1 tls ca-cert-file /config/auth/openvpn/ERL05-Bydgoszcz-Gajowa-PL-Remote-Access/ca.crt
set interfaces openvpn vtun1 tls cert-file /config/auth/openvpn/ERL05-Bydgoszcz-Gajowa-PL-Remote-Access/ERL05-Bydgoszcz-Gajowa-PL-Server.crt
set interfaces openvpn vtun1 tls dh-file /config/auth/openvpn/ERL05-Bydgoszcz-Gajowa-PL-Remote-Access/dh1024.pem
set interfaces openvpn vtun1 tls key-file /config/auth/openvpn/ERL05-Bydgoszcz-Gajowa-PL-Remote-Access/ERL05-Bydgoszcz-Gajowa-PL-Server.key

Bardzo ważne jeżeli chcemy aby z certyfikatu korzystało więcej niż jeden klient należy dodać opcje do vpn, definiując argument openvpn-option –duplicate-cn. Dzięki temu wpisowi nie musimy tworzyć nowych certyfikatów dla klientów.
set interfaces openvpn vtun1 openvpn-option –duplicate-cn  Sprawdzamy jeszcze czy wszystko się zgadza wywołujemy polecenie show interfaces openvpn.

pawel.klimko@ERL05-Bydgoszcz-Gajowa-PL# show interfaces openvpn 
 openvpn vtun1 {
     description ERL05-Bydgoszcz-Gajowa-PL
     local-port 1195
     mode server
     server {
         max-connections 5
         name-server 10.10.1.12
         push-route 10.10.1.0/24
         push-route 10.10.2.0/24
         push-route 10.254.5.0/30
         subnet 192.168.5.0/24
     }
     tls {
         ca-cert-file /config/auth/openvpn/ERL05-Bydgoszcz-Gajowa-PL-Remote-Access/ca.crt
         cert-file /config/auth/openvpn/ERL05-Bydgoszcz-Gajowa-PL-Remote-Access/ERL05-Bydgoszcz-Gajowa-PL-Server.crt
         dh-file /config/auth/openvpn/ERL05-Bydgoszcz-Gajowa-PL-Remote-Access/dh1024.pem
         key-file /config/auth/openvpn/ERL05-Bydgoszcz-Gajowa-PL-Remote-Access/ERL05-Bydgoszcz-Gajowa-PL-Server.key
     }

 }

Zatwierdzamy konfigurację i zapisujemy.
commit
save

7. Konfiguracja protokolu SSH z poziomu linuxa Ubiquiti EdgeRouter oraz sciagniecie plikow dla klienta w celu zdalnego polaczenia.

W moim przypadku udało mi się skopiować klucze beż odblokowywania konta "root". Można pominąć ten krok i odrazu się logować za pomocą swojego konta administratora. Wrazie problemów postępować jak niżej.

root@ERL05-Bydgoszcz-Gajowa-PL:# cd /etc/ssh/
nano sshd_config


Jeżeli nie posiadamy "nano" instalujemy komendą "apt-get install nano".
Szukamy wartosci PermitRootLogin i zmieniamy parametr no na yes.

Zapisujemy, oraz na koniec restartujemy serwis ssh na ERL`u
service ssh restart
[ ok ] Restarting OpenBSD Secure Shell server: sshd.


Sciagamy WinSCP oraz instalujemy. Przed logowaniem do ERL`a za posrednictwem konta root, trzeba ustawić hasło dla konta "root". 

passwd root

Teraz tylko pobieramy certyfikaty i pliki potrzebne do zainicjowania połączenia ze strony klienta OpenVPN.

Pliki które nam są potrzebne znajdują się w wcześniej utworzonym folderze 

Pliku certyfikatu oraz klucza.


Kopiujemy je np. do folderu na Pulpicie. Do pełni szczęścia brakuje nam plik profilu połączenia OpenVPN. Tworzymy plik .ovpn z danymi poniżej:

client
dev tun1
proto udp
remote klimas.ddns.net  1195
nobind
ca ca.crt
cert ERL05-Bydgoszcz-Gajowa-PL-Client.crt
key ERL05-Bydgoszcz-Gajowa-PL-Client.key
verb 3


W sekcji remote podajemy adres IP naszego routera lub jak w moim przypadku domena DDNS.

Należy pamiętać aby w sshd_config PermitRootLogin spowrotem ustawić na no i zrestartować serwis sshd service ssh restart.

8.Test połączenia

Pokaż interfejs OpenVPN:
pawel.klimko@ERL05-Bydgoszcz-Gajowa-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.5.1/24                    u/u  ERL05-Bydgoszcz-Gajowa-PL   

Ping adresu serwera OpenVPN:
pawel.klimko@ERL05-Bydgoszcz-Gajowa-PL:~$ ping 192.168.5.1
PING 192.168.5.1 (192.168.5.1) 56(84) bytes of data.
64 bytes from 192.168.5.1: icmp_req=1 ttl=64 time=0.368 ms
64 bytes from 192.168.5.1: icmp_req=2 ttl=64 time=0.259 ms
64 bytes from 192.168.5.1: icmp_req=3 ttl=64 time=0.315 ms

3 packets transmitted, 3 received, 0% packet loss, time 2007ms

rtt min/avg/max/mdev = 0.259/0.314/0.368/0.044 ms

Pokaż podłączonych klientów:
pawel.klimko@ERL05-Bydgoszcz-Gajowa-PL:~$ show openvpn status server
OpenVPN server status on vtun1 [ERL05-Bydgoszcz-Gajowa-PL]

Client CN Remote IP Tunnel IP TX byte RX byte Connected Since
--------------- --------------- --------------- ------- ------- ------------------------
ERL05-Bydgoszcz-Gajowa-PL-Client 46.77.124.35 192.168.5.2 20.5K 12.0K Fri Dec 5 18:42:54 2014



Internetowy adres IP urządzenia oraz adres w tunelu OpenVPN.

9.Firewall
Aby wszystko działało musimy dodać wyjątek w firewallu oraz interfejs naszego tunelu. Mój router jest skonfigurowany w oparciu o "zone based" czyli strefy.

pawel.klimko@ERL05-Bydgoszcz-Gajowa-PL# show zone-policy zone ZONE:WAN 
 default-action drop
 description ZONE:WAN
 from ZONE:LAN {
     firewall {
         name ZONE:LAN_to_ZONE:WAN
     }
 }
 interface eth0
 interface tun5
 interface vti5
 interface vtun1

Wystarczy zatem użyć poniższej komendy:
pawel.klimko@ERL05-Bydgoszcz-Gajowa-PL# set zone-policy zone ZONE:WAN interface vtun1 
commit
save
exit


Artykuł powstał na podstawie opisu kolegi który mnie zaraził sieciami VPN oraz wspólnie tworzymy jedną wielką prywatną sieć. Mój artykuł został opisany dla osób które zaczynają przygodę z tak zaawansowanym w konfiguracji sprzętem.


Podziękowania dla Patryka - www.virtualolivia.com

Brak komentarzy:

Prześlij komentarz