[2] OpenVPN – Konfiguracja

9 lipca 2023 Wyłączono przez Adam [zicherka] Nogły

W pierwszej kolejności przygotujemy katalogi pod serwer OpenVPN, czyli pliki konfiguracyjne, certyfikat CA, klucze serwera i certyfikaty klientów. Zatem do dzieła.

root@vfbsd01:~ # mkdir -p /usr/local/etc/openvpn/easy-rsa
root@vfbsd01:~ # mkdir /usr/local/etc/openvpn/server

Skopiuj przykładowe pliki konfiguracyjne OpenVPN i Easy-RSA do odpowiednich katalogów konfiguracyjnych utworzonych powyżej.

root@vfbsd01:~ # cp /usr/local/share/examples/openvpn/sample-config-files/server.conf /usr/local/etc/openvpn/server/
root@vfbsd01:~ # cp -r /usr/local/share/easy-rsa/* /usr/local/etc/openvpn/easy-rsa/

Klucze i certyfikaty

Wygeneruj lokalny urząd certyfikacji CA, klucze i pliki certyfikatów za pomocą EasyRSA.

Easy-RSA jest dostarczany ze skryptem generowania certyfikatów o nazwie [easyrsa]. Aby wygenerować pliki certyfikatów, przejdź do katalogu [/usr/local/etc/openvpn/easy-rsa/] i wykonaj poniższe czynności.

Zainicjuj infrastrukturę PKI

root@vfbsd01:~ # cd /usr/local/etc/openvpn/easy-rsa
root@vfbsd01:/usr/local/etc/openvpn/easy-rsa # easyrsa init-pki
* Notice:

  init-pki complete; you may now create a CA or requests.

  Your newly created PKI dir is:
  * /usr/local/etc/openvpn/easy-rsa/pki

* Notice:
  IMPORTANT: Easy-RSA 'vars' file has now been moved to your PKI above.

Utwórz certyfikat CA, uruchamiając poniższe polecenie. Po wyświetleniu monitu ustaw CN i hasło szyfrowania.

root@vfbsd01:/usr/local/etc/openvpn/easy-rsa # easyrsa build-ca
* Notice:
Using Easy-RSA configuration from: /usr/local/etc/openvpn/easy-rsa/pki/vars

* Notice:
Using SSL: openssl OpenSSL 1.1.1q  5 Jul 2022

Enter New CA Key Passphrase: # wpisz hasło
Re-Enter New CA Key Passphrase: # ponownie wpisz hasło
.............+++++
.......................................................................................................................................................................+++++
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.
-----

# ustaw nazwę głównego urzędu certyfikacji CA
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:CA_VPN-zicher.lab
* Notice:
CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/usr/local/etc/openvpn/easy-rsa/pki/ca.crt

Wygeneruj plik klucza i certyfikatu dla serwera i klienta.

root@vfbsd01:/usr/local/etc/openvpn/easy-rsa # easyrsa build-server-full server nopass
* Notice:
Using Easy-RSA configuration from: /usr/local/etc/openvpn/easy-rsa/pki/vars

* Notice:
Using SSL: openssl OpenSSL 1.1.1q  5 Jul 2022

Generating a RSA private key
.......................................................................................................+++++
......+++++
writing new private key to '/usr/local/etc/openvpn/easy-rsa/pki/bd41cd83/temp.37b221d6'
-----
* Notice:

Keypair and certificate request completed. Your files are:
req: /usr/local/etc/openvpn/easy-rsa/pki/reqs/server.req
key: /usr/local/etc/openvpn/easy-rsa/pki/private/server.key
Using configuration from /usr/local/etc/openvpn/easy-rsa/pki/bd41cd83/temp.6da6408d
Enter pass phrase for /usr/local/etc/openvpn/easy-rsa/pki/private/ca.key: # wpisz hasło CA
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'server'
Certificate is to be certified until Mar  3 20:06:57 2025 GMT (825 days)

Write out database with 1 new entries
Data Base Updated

* Notice:
Certificate created at: /usr/local/etc/openvpn/easy-rsa/pki/issued/server.crt

root@vfbsd01:/usr/local/etc/openvpn/easy-rsa # easyrsa build-client-full client nopass
* Notice:
Using Easy-RSA configuration from: /usr/local/etc/openvpn/easy-rsa/pki/vars

* Notice:
Using SSL: openssl OpenSSL 1.1.1q  5 Jul 2022
Generating a RSA private key
.................+++++
....................+++++
writing new private key to '/usr/local/etc/openvpn/easy-rsa/pki/e93b6b4f/temp.b109caed'
-----
* Notice:

Keypair and certificate request completed. Your files are:
req: /usr/local/etc/openvpn/easy-rsa/pki/reqs/client.req
key: /usr/local/etc/openvpn/easy-rsa/pki/private/client.key

Using configuration from /usr/local/etc/openvpn/easy-rsa/pki/e93b6b4f/temp.8a21b5cc
Enter pass phrase for /usr/local/etc/openvpn/easy-rsa/pki/private/ca.key: # wpisz hasło CA
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'client'
Certificate is to be certified until Mar  3 20:08:24 2025 GMT (825 days)

Write out database with 1 new entries
Data Base Updated

* Notice:
Certificate created at: /usr/local/etc/openvpn/easy-rsa/pki/issued/client.crt

W przypadku konieczności unieważnienia wcześniej podpisanego certyfikatu wygeneruj certyfikat unieważnienia.

root@vfbsd01:/usr/local/etc/openvpn/easy-rsa # easyrsa gen-crl
* Notice:
Using Easy-RSA configuration from: /usr/local/etc/openvpn/easy-rsa/pki/vars

* Notice:
Using SSL: openssl OpenSSL 1.1.1q  5 Jul 2022

Using configuration from /usr/local/etc/openvpn/easy-rsa/pki/e79d9f36/temp.b9f02308
Enter pass phrase for /usr/local/etc/openvpn/easy-rsa/pki/private/ca.key: # wpisz hasło CA

* Notice:

An updated CRL has been created.
CRL file: /usr/local/etc/openvpn/easy-rsa/pki/crl.pem

Wygeneruj wstępnie udostępniony klucz uwierzytelniający TLS/SSL.

root@vfbsd01:/usr/local/etc/openvpn/easy-rsa # openvpn --genkey secret /usr/local/etc/openvpn/easy-rsa/pki/ta.key

Skopiuj wszystkie klucze serwera i certyfikaty z [/usr/local/etc/openvpn/easy-rsa/pki/] do katalogu konfiguracyjnego utworzonego powyżej.

root@vfbsd01:/usr/local/etc/openvpn/easy-rsa # cp -r /usr/local/etc/openvpn/easy-rsa/pki/{ca.crt,dh.pem,ta.key,issued,private} /usr/local/etc/openvpn/server/

Konfiguracja serwera OpenVPN

Zmodyfikuj plik konfiguracyjny serwera tak, aby wyglądał jak poniżej. Ja zalecam wykasowanie wszystkiego i napisanie tego pliku od nowa.

root@vfbsd01:/usr/local/etc/openvpn/easy-rsa # mcedit /usr/local/etc/openvpn/server/server.conf
# zmodyfikuj lub stwórz nowy
port 1194
proto udp
dev tun
ca /usr/local/etc/openvpn/server/ca.crt
cert /usr/local/etc/openvpn/server/issued/server.crt
key /usr/local/etc/openvpn/server/private/server.key
dh /usr/local/etc/openvpn/server/dh.pem
topology subnet
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.4.4"
keepalive 10 120
tls-auth /usr/local/etc/openvpn/server/ta.key 0
cipher AES-256-GCM
user nobody
group nobody
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log-append  /var/log/openvpn/openvpn.log
verb 3
explicit-exit-notify 1
auth sha512
remote-cert-tls client
tun-mtu 1500
mssfix 1300

Utwórz katalog dla logów OpenVPN.

root@vfbsd01:/usr/local/etc/openvpn/easy-rsa # mkdir /var/log/openvpn/

Konfiguracja routingu

Skonfigurujemy teraz routing IPv4. Włączymy zaporę [ipfw], która jest potrzebna do [natd]. Zatem bierzmy się za edycję pliku [/etc/rc.conf].

root@vfbsd01:/usr/local/etc/openvpn/easy-rsa # mcedit /etc/rc.conf
# dodaj na końcu
firewall_enable="YES"
firewall_type="open"
gateway_enable="YES"
natd_enable="YES"
natd_interface="em1"
natd_flags="-dynamic -m"

Następnie zrestartuj serwer, aby zmiany odniosły skutek.

root@vfbsd01:/usr/local/etc/openvpn/easy-rsa # reboot -n

Po restarcie dodajmy wpis do pliku [/etc/rc.conf], aby serwer OpenVPN uruchamiał się automatycznie, z podanym plikiem konfiguracyjnym [/usr/local/etc/openvpn/server/server.conf].

root@vfbsd01:~ # mcedit /etc/rc.conf
# dodaj na końcu
openvpn_enable="YES"
openvpn_configfile="/usr/local/etc/openvpn/server/server.conf"

Uruchommy wiec w końcu serwer OpenVPN i sprawdźmy czy działa.

root@vfbsd01:~ # service openvpn start
Starting openvpn.
root@vfbsd01:~ # service openvpn status
openvpn is running as pid 2260.

Sprawdzimy teraz, czy serwer OpenVPN działa i nasłuchuje na porcie UDP 1194.

root@vfbsd01:~ # sockstat -4 -l | grep 1194
nobody   openvpn    2260  6  udp46  *:1194                *:*

Sprawdźmy także czy został utworzony interfejs tun0.

root@vfbsd01:~ # ifconfig
vmx0: flags=8863<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=4e403bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,TSO6,VLAN_HWTSO,RXCSUM_IPV6,TXCSUM_IPV6,NOMAP>
ether 00:0c:29:dc:eb:5e
inet 192.168.100.106 netmask 0xffffff00 broadcast 192.168.100.255
media: Ethernet autoselect
status: active
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
inet 127.0.0.1 netmask 0xff000000
groups: lo
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1500
options=80000<LINKSTATE>
inet 10.8.0.1 --> 10.8.0.2 netmask 0xffffff00
groups: tun
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
Opened by PID 2260

Konfiguracja klienta (Microsoft Windows 10)

Gdy mamy już uruchomiony serwer, powinniśmy skonfigurować klienta. Na komputerze z systemem Microsoft Windows 10 zainstaluj klienta OpenVPN. Link do pobrania: [https://openvpn.net/community-downloads/]. Wybieramy oczywiście interesującą nas wersję. Instalujemy oprogramowanie (tutaj nie będę opisywał tej procedury, albowiem jest ona bardzo prosta).

Po instalacji przejdź do [C:\Program Files\OpenVPN] i skopiuj plik [client.ovpn] z folderu [sample-config] do folderu [config].

Edytuj plik [C:\Program Files\OpenVPN\config\client.ovpn] i zmień wartości dla serwera oraz ścieżkę do certyfikatów klienta. W moim przypadku musiałem podać [192.168.100.106] i zdecydowałem się zachować certyfikaty w [C:\keys]. (Uwaga: użyj podwójnego ukośnika odwrotnego). Jeśli masz problemy z zapisaniem pliku w folderze [C:\Program Files], najpierw zapisz go na pulpicie, a następnie ręcznie skopiuj go do folderu [C:\Program Files\OpenVPN\config].

Zatem plik [client.ovpn] powinien wyglądać tak i znajdować się w (dla naszego konkretnego przypadku): [C:\Program Files\OpenVPN\config].

client
tls-client
pull
dev tun
proto udp
remote 192.168.100.106 1194
resolv-retry infinite
nobind
# jeśli będziesz uruchamiał klienta OpenVPN na Linuxie/Unixie/BSD odkomentuj dwie poniższe linie
;user nobody
;group nogroup
persist-key
persist-tun
key-direction 1
verb 3
tls-auth c:\\keys\\ta.key 1
ca c:\\keys\\ca.crt
cert c:\\keys\\client.crt
key c:\\keys\\client.key
auth SHA512
remote-cert-tls server
cipher AES-256-GCM
tun-mtu 1500
mssfix 1300

Po zmianie pliku konfiguracyjnego [client.ovpn], należy na komputerze klienta utworzyć katalog [C:\keys] oraz w bezpieczny sposób (scp, ftps) umieścić tam następujące pliki: [ca.crt], [client.crt], [client.key] oraz [ta.key].

Pliki te znajdują się w tych katalogach na serwerze OpenVPN:

/usr/local/etc/openvpn/server/ca.crt
/usr/local/etc/openvpn/server/issued/client.crt
/usr/local/etc/openvpn/server/private/client.key
/usr/local/etc/openvpn/server/ta.key

Następnie upewnij się, że pliki wykonywalne openvpn zawsze uruchamiają się z pełnymi uprawnieniami administratora. Przejdź do folderu [bin].

Kliknij prawym przyciskiem myszy każdy plik wykonywalny, kliknij [Właściwości] i zaznacz [Uruchom ten program jako administrator].

Program [OpenVPN GUI] tworzy ikonę w zasobniku, kliknij tę ikonę prawym przyciskiem myszy i kliknij [Połącz].

P kliknięciu [Połącz], zostanie wyświetlone okno, w którym pokazane jest negocjowanie połączenia. Jeśli nie ma błędów to znaczy, że połączenie zostało ustanowione.

Ikona OpenVPN w zasobniku zmienia kolor na zielony.

Sprawdźmy jaki adres otrzymaliśmy od serwera OpenVPN i czy możemy nawiązać z nim łączność.

Klient Linux

Aby połączyć się z serwerem VPN z systemu Linux, uruchom poniższe polecenie. Oczywiście mając skopiowane wspomniane wcześniej 4 pliki oraz plik konfiguracyjny.

user1@vfbsd02:~ $ sudo openvpn client.ovpn