[2] OpenVPN – Konfiguracja
9 lipca 2023W 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