Chcesz uzyskać bezpieczny dostęp do Internetu ze smartfonu lub laptopa po podłączeniu do niezaufanych sieci, takich jak Wi-Fi w hotelu lub w kawiarni? Virtual Private Network (VPN) pozwala na korzystanie z niezaufanych sieci prywatnie i bezpiecznie tak, gdyby były w sieci prywatnej. Ruch wychodzi z VPN serwera i kontynuuje swoją drogę do miejsca przeznaczenia.
W połączeniu z połączeniem HTTPS, ta konfiguracja pozwala zabezpieczyć bezprzewodowe loginy i transakcje. Można obejść ograniczenia geograficzne i cenzurę, a chronić swoją lokalizację i wszelkie niezaszyfrowane ruchy HTTP z sieci niezaufanej.
OpenVPN jest w pełni funkcjonalne open source Secure Socket Layer (SSL) VPN rozwiązanie, które mieści w sobie szeroki zakres konfiguracji. W tym tutorialu będziemy konfigurować serwer OpenVPN na Droplet, a następnie skonfigurujemy do niego dostęp z Windows, OS X, iOS i Android. Ten tutorial będzie utrzymywać instalację i czynności konfiguracyjnych tak proste, jak to możliwe dla tych ustawień.
- Przedstartowe sprawdzenie
- Krok #1: Instalacja OpenVPN
- Krok #2: Konfigurowanie katalogu CA
- Krok #3: Konfiguracja zmiennych CA
- Krok #4: Budowanie Certificate Authority
- Krok #5: Tworzenie certyfikatu serwera, kluczy i szyfrowanie plików
- Krok #6: Generowanie Certyfikatu klienta i parę kluczy
- Krok #7: Konfiguracja usługi OpenVPN
- Krok #8: Regulacja Configuration Networking
- Krok #9: Uruchomienie i włączenie usługi OpenVPN
- Krok #10: Tworzenie konfiguracji infrastruktury klienta
- Krok #11: Generowanie konfiguracji klienta
- Krok #12: Instalacja profilu klienta
- Linux
- iOS
- Android
- Krok #13: Testowanie połączenia VPN
- Krok #14: Odwołanie certyfikatów klienta
- Wniosek
Przedstartowe sprawdzenie
- Ten artykuł dotyczy konfiguracji serwera OpenVPN na Ubuntu 16.04.
- Będę pracować z serwerem VPS Ubuntu 16.04 i jestem zalogowany jako uzytkownik sudo. Aby utworzyć użytkownika z odpowiednimi uprawnieniami przejdź do tutorialu Wstępna konfiguracja serwera z Ubuntu 16.04.
Gdy jesteś gotowy, aby rozpocząć należy zalogować się do swojego serwera Ubuntu jako sudo użytkownik i wykonać nastepne kroki.
Krok #1: Instalacja OpenVPN
Na początek instalujemy OpenVPN na naszym serwerze. OpenVPN jest dostępny w domyślnych repozytoriach Ubuntu, więc możemy użyć apt do instalacji. Będziemy również instalować easy-rsa pakiet, który pomoże nam skonfigurować CA (centrum certyfikacji) do korzystania z naszego VPN.
Aby zaktualizować pakiety serwera i zainstalować niezbędne pakiety należy użyć polecenia:
sudo apt-get update
sudo apt-get install openvpn easy-rsa
Wymagane oprogramowanie już dostępne na serwerze i gotowe do skonfigurowania.
Krok #2: Konfigurowanie katalogu CA
OpenVPN jest TLS / SSL VPN. Oznacza to, że on wykorzystuje certyfikaty w celu szyfrowania ruchu między serwerem a klientami. W celu wydania zaufanych certyfikatów, musimy założyć własny prosty certyfikat (CA).
Aby rozpocząć, możemy skopiować easy-rsa katalog szablonów w nasz katalog domowy za pomocą polecenia make-cadir:
make-cadir ~/openvpn-ca
Przejdź do nowo utworzonego katalogu, aby rozpocząć konfigurowanie CA:
cd ~/openvpn-ca
Krok #3: Konfiguracja zmiennych CA
Aby skonfigurować zmienne naszego CA które będą używane, musimy edytować vars plik w katalogu. Otwórz ten plik w edytorze tekstu:
nano vars
Wewnątrz pliku znajdziesz kilka zmiennych, które mogą być dostosowane do określenia w jaki sposób certyfikaty zostaną utworzone. Musimy się martwić tylko o kilku z nich.
W dolnej części pliku, znajdź ustawienia domyślne, które wyznaczają obszar nowych certyfikatów. Powinno to wyglądać mniej więcej tak:
. . . export KEY_COUNTRY="US" export KEY_PROVINCE="CA" export KEY_CITY="SanFrancisco" export KEY_ORG="Fort-Funston" export KEY_EMAIL="me@myhost.mydomain" export KEY_OU="MyOrganizationalUnit" . . .
Edytuj wartości na czerwono, na jakie chcesz, ale nie zostawiaj ich puste:
. . . export KEY_COUNTRY="US" export KEY_PROVINCE="NY" export KEY_CITY="New York City" export KEY_ORG="DigitalOcean" export KEY_EMAIL="admin@example.com" export KEY_OU="Community" . . .
Dopóki tu jesteśmy, będziemy również edytować wartość KEY_NAME w tej sekcji, która wypełnia pole tematu. Aby to zrobić łatwo, będziemy nazywać go server w tym tutorialu:
export KEY_NAME="server"
Gdy skończysz, zapisz i zamknij plik.
Krok #4: Budowanie Certificate Authority
Teraz możemy używać zmiennych, ktore mamy skonfigurowane oraz easy-rsa narzędzia do budowania naszego centrumu certyfikacji (CA).
Upewnij się, że jesteś w katalogu CA, a następnie podłączamy vars plik ktory był edytowany:
cd ~/openvpn-ca
source vars
Jeśli on został podłączony poprawnie powinieneś zobaczyć następujący wynik:
NOTE: If you run ./clean-all, I will be doing a rm -rf on /home/sammy/openvpn-ca/keys
Upewnij się, że pracujesz w czystym środowisku poprzez wpisywanie:
./clean-all
Teraz możemy budować nasz główny CA wpisując:
./build-ca
To będzie inicjować proces tworzenia klucza głównego centrumu certyfikacji i certyfikat. Ponieważ wypełniliśmy plik vars, wszystkie wartości powinny być wypełniane automatycznie. Wystarczy nacisnąć ENTER przez podpowiedzi, aby potwierdzić wybór:
Generating a 2048 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]: State or Province Name (full name) [NY]: Locality Name (eg, city) [New York City]: Organization Name (eg, company) [DigitalOcean]: Organizational Unit Name (eg, section) [Community]: Common Name (eg, your name or your server's hostname) [DigitalOcean CA]: Name [server]: Email Address [admin@email.com]:
Teraz mamy centrum certyfikacji, który może być używany, aby utworzyć pozostałe pliki które są nam potrzebne.
Krok #5: Tworzenie certyfikatu serwera, kluczy i szyfrowanie plików
Następnie będziemy generować nasz certyfikat serwera oraz parę kluczy, również kilka dodatkowych plików używanych podczas procesu szyfrowania.
Zacznijmy od generowania certyfikatu serwera OpenVPN i parę kluczy. Możemy to zrobić poprzez wpisanie:
./build-key-server server
Zaakceptuj wartości domyślne, naciskając klawisz ENTER . Nie należy wprowadzać hasła połączenia dla tej konfiguracji. Pod koniec, trzeba będzie wprowadzić y na dwa pytania, aby podpisać i zrobić certyfikat:
. . . Certificate is to be certified until May 1 17:51:16 2026 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
Następnie będziemy generować kilka innych elementów. Możemy generować silne klucze Diffie-Hellman do użytku podczas wymiany kluczy, wpisując:
./build-dh
Może to potrwać kilka minut.
Następnie możemy wygenerować podpis HMAC dla wzmocnienia TLS możliwości weryfikacji integralności serwera:
openvpn --genkey --secret keys/ta.key
Krok #6: Generowanie Certyfikatu klienta i parę kluczy
Następnie możemy wygenerować certyfikat klienta i parę kluczy. Chociaż można to zrobić na komputerze klienckim, a następnie podpisać przez serwer / CA dla celów bezpieczeństwa, w tym tutorialu będziemy generować podpisany klucz na serwerze dla uproszczenia.
W tym tutorialu będziemy generować pojedynczy klucz / certyfikat klienta, ale jeśli masz więcej niż jeden klient, można powtórzyć ten proces tyle razy, ile chcesz. Korzystaj z unikalnej wartości do skryptu dla każdego klienta.
Można wrócić do tego kroku później, będziemy ponownie podawać źródło dla pliku vars. Będziemy wykorzystywać client1 jako wartość dla naszej pierwszej pary kluczy / certyfikatów do dzisiejszego tutorialu:
Aby uzyskać konto danych bez hasła dla automatycznych połączeń, należy użyć polecenie build-key w następujący sposób:
cd ~/openvpn-ca
source vars
./build-key client1
Jeśli zamiast tego chcesz utworzyć zabezpieczone hasłem konto danych, należy użyć polecenia build-key-pass:
cd ~/openvpn-ca
source vars
./build-key-pass client1
Znowu domyślnie powinno być wypełnione, tak że można po prostu naciśnij klawisz ENTER, aby kontynuować. Pozostaw pole hasła puste i wpisz y, aby wyświetlić zapytanie o tym czy podpisać i zrobić certyfikat.
Krok #7: Konfiguracja usługi OpenVPN
Następnie możemy rozpocząć konfigurowanie usługi OpenVPN korzystając z danych i plików które stworzyliśmy.
Kopiowanie plików do katalogu OpenVPN
Aby rozpocząć, musimy skopiować pliki, które potrzebujemy do katalogu konfiguracyjnego /etc/openvpn.
Możemy zacząć od wszystkich plików, które utworzyliśmy. Zostały one umieszczone w katalogu ~/openvpn-ca/keys. Musimy przenieść nasz CA certyfikat i klucz, nasz certyfikat serwera i klucz, podpis HMAC oraz plik Diffie-Hellman:
cd ~/openvpn-ca/keys
sudo cp ca.crt ca.key server.crt server.key ta.key dh2048.pem /etc/openvpn
Następnie musimy skopiować i rozpakować OpenVPN przykładowy plik konfiguracyjny do katalogu konfiguracji, dzięki czemu możemy użyć go jako podstawy dla naszej konfiguracji:
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf
Dostosowanie konfiguracji OpenVPN
Teraz kiedy nasze pliki są na swoim miejscu, możemy zmodyfikować plik konfiguracyjny serwera:
sudo nano /etc/openvpn/server.conf
Podstawowa konfiguracja
Najpierw znajdź sekcję HMAC szukając dyrektywy tls-auth. Usuń “ ; ” aby odkomentować wiersz tls-auth . Poniżej tego należy dodać key-direction parametr ustawiony na “0“:
tls-auth ta.key 0 # This file is secret
key-direction 0
Następnie znajdź sekcję szyfrów kryptograficznych, szukając wykomentowanych cipher wiersze. Szyfr AES-128-CBC oferuje dobry poziom szyfrowania i jest dobrze obsługiwany. Usuń ” ; ” aby odkomentować wiersz cipher AES-128-CBC:
cipher AES-128-CBC
Poniżej dodaj linię auth dla wyboru HMAC wiadomości opanowania algorytmu. Do tego SHA256 jest dobrym wyborem:
auth SHA256
Wreszcie, znajdź user i group ustawienia i usuń “ ; ” na początku:
user nobody group nogroup
(Opcjonalnie) Włącz zmiany DNS w celu przekierowania całego ruchu przez VPN
Ustawienia powyżej tworzą połączenie VPN pomiędzy dwoma komputerami, ale nie ma żadnego połączenia dla użycia tunelu. Jeśli chcesz korzystać z VPN, aby przekierować wszystkie ruchy, musisz zmienić ustawienia DNS na komputerach klienckich.
Aby to zrobić, odkomentuj kilka dyrektyw, które będą konfigurować klienckie komputery, aby przekierować cały ruch internetowy za pośrednictwem VPN. Znajdź redirect-gateway sekcję i usuń średnik “ ; ” od początku redirect-gateway wierszu, aby odkomentować:
push "redirect-gateway def1 bypass-dhcp"
Tuż poniżej tego, znajdź sekcję dhcp-option. Ponownie usuń “ ; ” przed wierszami, aby ich odkomentować:
push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 208.67.220.220"
To powinno pomóc klientom w rekonfiguracji ich ustawień DNS, aby korzystać z tunelu VPN jako bramy domyślnej.
(Opcjonalnie) Ustaw port i protokół
Domyślnie serwer OpenVPN wykorzystuje port 1194 i UDP do przyjmowania połączeń klienckich. Jeżeli chcesz użyć innego portu z powodu ograniczonych środowisk sieciowych, w których klienci mogą być, można zmienić ustawienie port. Jeżeli nie zarządzasz web zawartością serwera OpenVPN, port 443 jest popularnym wyborem, ponieważ zazwyczaj jest dozwolony przez reguły zapory.
# Optional!
port 443
Często protokół może być ograniczony do tego portu. Żeby to poprawić, należy zmienić proto z UDP TCP:
# Optional!
proto tcp
Jeżeli nie ma potrzeby korzystania z innego portu, najlepiej pozostawić te dwa ustawienia jako domyślne.
(Opcjonalnie) Wybierz niedomyślne dane dostępu
Jeśli wybrałeś inną nazwę dla ./build-key-server , zmodyfikuj linie cert i key, które widzisz, aby wskazać odpowiednie .crt i .key pliki. Jeżeli jest używany domyślny serwer, to muszą być ustawione poprawnie:
cert server.crt key server.key
Gdy skończysz, zapisz i zamknij plik.
Krok #8: Regulacja Configuration Networking
Następnie musimy dostosować niektóre aspekty sieciowego serwera tak, że OpenVPN zmoże poprawnie kierować ruch.
Pozwolenie IP Forwarding
Po pierwsze, musimy zezwolić serweru do przekazania ruchu. Ma to dość istotne znaczenie dla funkcjonalności którą chcemy zapewnić serweru VPN.
Możemy zmienić to ustawienie poprzez modyfikację pliku /etc/sysctl.conf:
sudo nano /etc/sysctl.conf
Wewnątrz należy zwrócić uwagę na wiersz, który wyznacza net.ipv4.ip_forward. Usunąć “ # ” od początku wierszu, aby odkomentować to ustawienie:
net.ipv4.ip_forward=1
Zapisz i zamknij plik po zakończeniu.
Aby odczytać plik i ustawić wartość dla bieżącej sesji, należy wpisać:
sudo sysctl –p
Dostosowanie zasad UFW do Masquerade Client Connections
Jeśli korzystałeś z tutorialu o wstępnej konfiguracji serwera z Ubuntu 16.04, już masz zaporę UFW. Niezależnie od tego, czy korzystasz z zapory do blokowania niechcianego ruchu (co prawie zawsze powinien zrobić), w tym tutorialu zapora jest potrzebna do manipulowania niektórych ruchów przychodzących do serwera. Musimy zmodyfikować plik z zasadami utworzenia maskowania, to iptables pojęcie, które zapewnia na bieżąco dynamiczny NAT do prawidłowego routingu połączenia klienta.
Zanim otworzyć plik konfiguracyjny zapory, aby dodać maskarady, musimy znaleźć publiczny interfejs sieciowy naszego urządzenia. Aby to zrobić, należy wpisać:
ip route | grep default
Twój interfejs publiczny będzie wyświetlany po “dev“. Na przykład, wynik ten pokazuje interfejs o nazwie wlp11s0, który jest przedstawiony poniżej:
default via 203.0.113.1 dev wlp11s0 proto static metric 600
Otwórz plik /etc/ufw/before.rules, aby dodać odpowiednią konfigurację:
sudo nano /etc/ufw/before.rules
Gdy masz interfejs związany z trasą domyślną, otwórz plik /etc/ufw/before.rules , aby dodać odpowiednią konfigurację:
sudo nano /etc/ufw/before.rules
Plik ten obsługuje konfigurację, która powinna być wprowadzona do pobrania zwykłych zasad UFW. W górnej części pliku dodaj zaznaczone poniżej wiersze. Spowoduje to ustawienie domyślne zasady dla POSTROUTING łańcucha w nat tabeli i zamaskuje każdy ruch wychodzący z sieci VPN:
#
# rules.before
#
# Rules that should be run before the ufw command line added rules. Custom
# rules should be added to one of these chains:
# ufw-before-input
# ufw-before-output
# ufw-before-forward
#
# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to eth0
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
# END OPENVPN RULES
# Don't delete these required lines, otherwise there will be errors
*filter
. . .
Zapisz i zamknij plik po zakończeniu.
Musimy umożliwić dla UFW przekazywanie pakietów domyślnie. Aby to zrobić, będziemy otwierać plik /etc/default/ufw :
sudo nano /etc/default/ufw
Wewnątrz znaleźć dyrektywę DEFAULT_FORWARD_POLICY. Będziemy zmieniać wartości od DROP do ACCEPT:
DEFAULT_FORWARD_POLICY="ACCEPT"
Zapisz i zamknij plik po zakończeniu.
Otwieranie portu OpenVPN i włączanie zmian
Następnie będziemy konfigurować zaporę, aby umożliwić ruch do OpenVPN.
Jeśli nie zmieniałeś port i protokół w pliku /etc/openvpn/serwer.conf , należy otworzyć ruch UDP na porcie 1194. Jeśli zmieniałeś port i / lub protokół, podstaw wartości wybrane tutaj.
Będziemy również dodawać port SSH, jeśli zapomniałeś dodać wcześniej:
sudo ufw allow 1194/udp
sudo ufw allow OpenSSH
Teraz możemy wyłączyć i ponownie włączyć UFW, aby załadować zmiany ze wszystkich plików które były modyfikowane:
sudo ufw disable
sudo ufw enable
Nasz serwer został skonfigurowany poprawnie dla obsługiwania ruchu OpenVPN.
Krok #9: Uruchomienie i włączenie usługi OpenVPN
Jesteśmy już gotowi, aby uruchomić usługę OpenVPN na naszym serwerze. Możemy to zrobić za pomocą systemd.
Musimy uruchomić serwer OpenVPN wskazując w naszej konfiguracji nazwę pliku jako zmienna instancyjna po systemd w bloku nazwy pliku. Nasz plik konfiguracyjny dla naszego serwera jest nazywany /etc/openvpn/server.conf, więc dodamy @server do końca nazwy naszego pliku podczas wywoływania go:
sudo systemctl start openvpn@server
Dokładnie sprawdź, czy usługa została uruchomiona pomyślnie, wpisując:
sudo systemctl status openvpn@server
Jeżeli wszystko poszło dobrze, twój wynik powinien wyglądać podobnie do tego:
● openvpn@server.service - OpenVPN connection to server
Loaded: loaded (/lib/systemd/system/openvpn@.service; disabled; vendor preset: enabled)
Active: active (running) since Tue 2016-05-03 15:30:05 EDT; 47s ago
Docs: man:openvpn(8)
https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage
https://community.openvpn.net/openvpn/wiki/HOWTO
Process: 5852 ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/%i.conf --writepid /run/openvpn/%i.pid (code=exited, sta
Main PID: 5856 (openvpn)
Tasks: 1 (limit: 512)
CGroup: /system.slice/system-openvpn.slice/openvpn@server.service
└─5856 /usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/server.conf --writepid /run/openvpn/server.pid
May 03 15:30:05 openvpn2 ovpn-server[5856]: /sbin/ip addr add dev tun0 local 10.8.0.1 peer 10.8.0.2
May 03 15:30:05 openvpn2 ovpn-server[5856]: /sbin/ip route add 10.8.0.0/24 via 10.8.0.2
May 03 15:30:05 openvpn2 ovpn-server[5856]: GID set to nogroup
May 03 15:30:05 openvpn2 ovpn-server[5856]: UID set to nobody
May 03 15:30:05 openvpn2 ovpn-server[5856]: UDPv4 link local (bound): [undef]
May 03 15:30:05 openvpn2 ovpn-server[5856]: UDPv4 link remote: [undef]
May 03 15:30:05 openvpn2 ovpn-server[5856]: MULTI: multi_init called, r=256 v=256
May 03 15:30:05 openvpn2 ovpn-server[5856]: IFCONFIG POOL: base=10.8.0.4 size=62, ipv6=0
May 03 15:30:05 openvpn2 ovpn-server[5856]: IFCONFIG POOL LIST
May 03 15:30:05 openvpn2 ovpn-server[5856]: Initialization Sequence Completed
Można również sprawdzić, czy OpenVPN tun0 interfejs jest dostępny, wpisując:
ip addr show tun0
Powinieneś zobaczyć skonfigurowany interfejs:
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 100 link/none inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0 valid_lft forever preferred_lft forever
Jeśli wszystko poszło dobrze, włącz usługę tak, aby ona była uruchamiana automatycznie podczas uruchamiania systemu:
sudo systemctl enable openvpn@server
Krok #10: Tworzenie konfiguracji infrastruktury klienta
Następnie musimy stworzyć system, który pozwoli nam na łatwe tworzenie plików konfiguracyjnych klienta.
Tworzenie konfiguracji struktury katalogów klienta
Stworzymy strukturę katalogów w domowym katalogu do przechowywania plików:
mkdir -p ~/client-configs/files
Ponieważ pliki konfiguracyjne klienta będą mieć wbudowane klienckie klucze , musimy zablokować dostęp do naszego wewnętrznego katalogu:
chmod 700 ~/client-configs/files
Tworzenie konfiguracji podstawowej
Następnie, skopiujemy przykładową konfigurację klienta do naszego katalogu, aby użyć jako naszej konfiguracji podstawowej:
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
Otwórz ten nowy plik w edytorze tekstu:
nano ~/client-configs/base.conf
Wewnątrz musimy dokonać kilku edycji.
Najpierw zlokalizuj remote dyrektywę. Wskazuje to klientu na nasz adres serwera OpenVPN. To powinien być publiczny adres IP serwera OpenVPN. Jeżeli zmieniłeś port, z którego korzysta serwer OpenVPN, zmień 1194 na port który wybrałeś:
. . .
# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
remote server_IP_address 1194
. . .
Upewnij się, że protokół odpowiada wartości którą używasz w konfiguracji serwera:
proto udp
Następnie, odkomentuj user oraz group dyrektywy usuwając ” ; “:
# Downgrade privileges after initialization (non-Windows only) user nobody group nogroup
Znajdź dyrektywy ca, cert i key, które należy zakomentowaać, ponieważ będziemy dodawać certyfikaty i klucze w pliku:
# SSL/TLS parms. # See the server config file for more # description. It's best to use # a separate .crt/.key file pair # for each client. A single ca # file can be used for all clients. #ca ca.crt #cert client.crt #key client.key
Ustawienia cipher i auth, które ustawiliśmy w pliku /etc/openvpn/server.conf :
cipher AES-128-CBC
auth SHA256
Wreszcie, należy dodać key-direction dyrektywę gdzieś w pliku. To musi być ustawione jako wartość “1” do pracy z serwerem:
key-direction 1
Na koniec dodamy kilka wykomentowanych wierszy. Chcemy je umieścić w każdym config, ale powinniśmy umożliwić ich tylko dla klientów systemu Linux, które dostarczane są z pliku /etc/openvpn/update-resolv-conf . Skrypt ten wykorzystuje narzędzie resolvconf do aktualizacji informacji DNS dla klientów Linux.
# script-security 2
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf
Jeśli klient działa na systemie Linux i posiada plik /etc/openvpn/update-resolv-conf należy odkomentować te wiersze z wygenerowanego pliku konfiguracyjnego OpenVPN.
Zapisz plik po zakończeniu.
Tworzenie konfiguracji skryptu do generowania
Następnie stworzymy prosty skrypt do kompilacji naszej konfiguracji bazowej z odpowiednimi plikami certyfikatów, kluczy i szyfrowaniem. Będzie to wygenerowane w katalogu ~/client-configs/files.
Stwórz i otwórz plik o nazwie make_config.sh w katalogu ~/client-configs:
nano ~/client-configs/make_config.sh
Wewnątrz wklej następujący skrypt:
#!/bin/bash # First argument: Client identifier KEY_DIR=~/openvpn-ca/keys OUTPUT_DIR=~/client-configs/files BASE_CONFIG=~/client-configs/base.conf cat ${BASE_CONFIG} \ <(echo -e '< ca >') \ ${KEY_DIR}/ca.crt \ <(echo -e '< /ca >\n< /cert >') \ ${KEY_DIR}/${1}.crt \ <(echo -e '< /cert >\n< /key >') \ ${KEY_DIR}/${1}.key \ <(echo -e '< /key >\n< /tls-auth >') \ ${KEY_DIR}/ta.key \ <(echo -e '< /tls-auth >') \ > ${OUTPUT_DIR}/${1}.ovpn
Zapisz i zamknij plik po zakończeniu.
Oznacz plik jako plik wykonywalny, wpisując:
chmod 700 ~/client-configs/make_config.sh
Krok #11: Generowanie konfiguracji klienta
Teraz możemy łatwo wygenerować pliki konfiguracyjne klienta.
Jeżeli korzystałeś z tutorialu, został utworzony certyfikat klienta i klucz o nazwie client1.crt i client1.key odpowiednio uruchamiając polecenie ./build-key client1 w kroku 6. Możemy wygenerować config dla tych poświadczeń, przenosząc do naszego katalogu ~/client-configs i przy użyciu skryptu zrobiliśmy:
cd ~/client-configs
./make_config.sh client1
Jeśli wszystko poszło dobrze, powinniśmy mieć client1.ovpn plik w naszym katalogu ~/client-configs/files:
ls ~/client-configs/files
client1.ovpn
Przesyłanie konfiguracji do urządzeń klienckich
Musimy przenieść plik konfiguracyjny klienta do odpowiedniego urządzenia. Na przykład, może to być lokalny komputer lub urządzenie przenośne.
Chociaż używane aplikacje do wykonania tego przenoszenia zależą od wyboru systemu operacyjnego i urządzenia, oraz czy chcesz korzystać z SFTP (SSH File Transfer Protocol) lub SCP (Secure Copy) na serwerze. Będzie to transportować VPN pliki uwierzytelniania klienta przez połączenie szyfrowane.
Oto przykład polecenia SFTP za pomocą naszego client1.ovpn. Polecenie to może być uruchamiane z komputera lokalnego (OS X lub Linux). Wystarczy umieścić .ovpn plik w katalogu domowym:
local$ sftp sammy@openvpn_server_ip:client-configs/files/client1.ovpn ~/
Krok #12: Instalacja profilu klienta
Teraz omówimy jak zainstalować profil VPN klienta w systemie Windows, OS X, iOS i Android. Żadna z tych instrukcji klienckich nie są od siebie zależne, dlatego zachęcamy wybrać instrukcję która pasuje Tobie.
Połączenie OpenVPN będzie nazwane odpowiednio do nazwy pliku .ovpn. W naszym przykładzie oznacza to, że połączenie zostanie nazwane client1.ovpn odpowiednio do pierwszego pliku klienta, który wygenerowaliśmy.
Windows
Instalacja
Aplikacja klienta OpenVPN dla systemu Windows można znaleźć na stronie OpenVPN’s Downloads. Wybierz odpowiednią wersję instalatora dla danej wersji systemu Windows.
Po zainstalowaniu OpenVPN, skopiuj .ovpn plik:
C:\Program Files\OpenVPN\config
Po uruchomieniu OpenVPN zostanie automatycznie widoczny profil co sprawia ją dostępną.
OpenVPN należy uruchamiać jako administrator za każdym razem, gdy jest używany, nawet konta administracyjne. Aby to nie robić bez konieczności, prawym przyciskiem myszy wybierz polecenie Uruchamiaj jako administrator za każdym razem korzystając z VPN, to można zaprogramować, ale musi to być zrobione z konta administracyjnego. Oznacza to również, że zwykli użytkownicy będą musieli wprowadzić hasło administratora do korzystania OpenVPN. Z drugiej strony, użytkownicy standardowe nie mogą prawidłowo połączyć się z serwerem, chyba że aplikacja OpenVPN na kliencie ma uprawnienia administratora, więc podwyższone uprawnienia nie są konieczne.
Aby ustawić aplikację OpenVPN zawsze uruchamianą jako administrator, kliknij prawym przyciskiem myszy na jego ikonę skrótu i przejdź do Właściwości . Na dole w zakładce Zgodność, kliknij przycisk Zmień ustawienia dla wszystkich użytkowników. W nowym oknie zaznacz Uruchom ten program jako administrator.
Połączenie
Za każdym razem, gdy chcesz uruchomić program GUI OpenVPN, Windows zapyta, czy chcesz zezwolić programowi na dokonanie zmian w komputerze. Kliknij Tak. Uruchamianie aplikacji klienckiej OpenVPN dodaje jedynie aplet w zasobniku systemowym tak, że VPN można łączyć i rozłączać zgodnie z potrzebami; faktycznie nie nawiązywać połączenie VPN.
Gdy OpenVPN jest uruchomiony, inicjujemy połączenie za pomocą apletu w zasobniku, a następnie klikając prawym przyciskiem myszy na ikonę apletu OpenVPN. To otwiera menu kontekstowe. Wybierz client1 w górnej części menu (to nasz client1.ovpn profil) i wybierz Połącz.
Okno stanu otworzy pokaz wyświetlania dziennika w czasie, gdy połączenie jest aktywne, komunikat pojawi się, jak tylko klient jest podłączony.
Odłączenie od sieci VPN w taki sam sposób: Przejdź do apletu w zasobniku systemowym, a następnie kliknij prawym przyciskiem myszy ikonkę apletu OpenVPN, wybierz profil klienta i kliknij przycisk Wyłącz.
OS X
Instalacja
Tunnelblick to darmowy open source OpenVPN klienta dla Mac OS X. Możesz pobrać najnowszy obraz dysku od strony Tunnelblick Downloads. Dwukrotnie kliknij pobierz .dmg plik i postępuj zgodnie z instrukcjami, aby zainstalować.
Pod koniec procesu instalacji Tunnelblick zapyta, czy masz jakieś pliki konfiguracyjne. Będzie łatwiej odpowiedzieć Nie i niech Tunnelblick zakończy instalację. Otwórz okno Findera i dwukrotnie kliknij client1.ovpn. Tunnelblick zainstaluje profil klienta. Wymagane są uprawnienia administratora.
Połączenie
Uruchom Tunnelblick klikając dwukrotnie Tunnelblick w folderze Applications. Jak tylko Tunnelblick zostanie uruchomiony, w pasku menu w górnej prawej części ekranu będzie ikonka Tunnelblick do kontroli połączeń. Kliknij na ikonkę, a następnie Połącz element menu, aby zainicjować połączenie VPN. Wybierz połączenie client1.
Linux
Instalacja
Jeśli używasz systemu Linux, istnieje wiele narzędzi, które można wykorzystać w zależności od dystrybucji. Środowisko graficzne lub menedżer okien mogą również zawierać narzędzia połączeń.
Najbardziej uniwersalnym sposobem podłączenia jest jednak to, aby po prostu korzystać z oprogramowania OpenVPN.
Na Ubuntu lub Debian można zainstalować go tak samo, jak na serwerze wpisując:
client$ sudo apt-get update
client$ sudo apt-get install openvpn
Na CentOS można można dodać repozytorium EPEL, a następnie zainstalować go, wpisując:
client$ sudo yum install epel-release
client$ sudo yum install openvpn
Konfiguracja
Sprawdź, czy Twoja dystrybucja zawiera skrypt /etc/openvpn/update-resolv-conf :
client$ ls /etc/openvpn
update-resolve-conf
Następnie edytujemy plik konfiguracyjny klienta OpenVPN, który był przekazany:
client$ nano client1.ovpn
Odkomentuj trzy wierszy, które umieściliśmy w ustawieniach DNS, jeśli Jesteś w stanie znaleźć plik update-resolv-conf:
script-security 2 up /etc/openvpn/update-resolv-conf down /etc/openvpn/update-resolv-conf
Jeśli używasz CentOS, zmień group z nogroup aby nobody dopasować do istniejących grup dystrybucji:
group nobody
Zapisz i zamknij plik.
Teraz możesz połączyć się z siecią VPN, po prostu wpisując polecenie openvpn dla pliku konfiguracyjnego klienta:
client$ sudo openvpn --config client1.ovpn
To powinno połączyć się z serwerem.
iOS
Instalacja
Z iTunes App Store wyszukaj i zainstaluj OpenVPN Connect, oficjalną aplikację kliencką iOS OpenVPN. Aby przesłać konfigurację klienta iOS na urządzenie, należy podłączyć go bezpośrednio do komputera.
Zakończenie transferu z iTunes zostaną przedstawione tutaj. Otwórz program iTunes na komputerze i kliknij na iPhone > apps. Przewiń w dół do sekcji File Sharing i kliknij aplikację OpenVPN. Puste okno sprawa OpenVPN Documents jest do wymiany plików. Przeciągnij .ovpn plik do okna OpenVPN Documents.
Teraz uruchom aplikację na iPhone OpenVPN. Tam będzie uwiadomienie, że nowy profil jest gotowy do importu. Kliknij na zielony znak plus, aby go zaimportować.
Połączenie
OpenVPN teraz jest gotowy do korzystania z nowego profilu. Rozpocząć połączenie przesuwając przycisk Connect do pozycji On. Aby odłączyć przesuń ten sam przycisk na Off.
Android
Instalacja
Otwórz Google Play Store. Wyszukaj i zainstaluj OpenVPN Connect, oficjalną aplikację kliencką Android OpenVPN.
Profil .ovpn można przesyłać poprzez podłączenie urządzenia z Androidem do komputera przez USB i kopiując plik. Ewentualnie, jeśli masz czytnik kart SD, można wyjąć kartę SD urządzenia i skopiować profil na nią, a następnie włożyć kartę z powrotem do urządzenia z systemem Android.
Uruchom aplikację OpenVPN i naciśnij przycisk menu, aby zaimportować profil.
Następnie przejdź do lokalizacji zapisanego profilu (zrzut ekranu używa /sdcard/Download/) i zaznacz swój plik. Aplikacja zauważy, że profil został zaimportowany.
Połączenie
Aby nawiązać połączenie, wystarczy dotknąć przycisk Connect. Zostaniesz zapytany, czy ufasz aplikacji OpenVPN. Wybierz OK , aby zainicjować połączenie. Aby odłączyć się od sieci VPN, wróć do aplikacji OpenVPN i wybierz Disconnect.
Krok #13: Testowanie połączenia VPN
Gdy wszystko jest zainstalowane, proste sprawdzenie potwierdzi, że wszystko działa poprawnie. Bez włączonego połączenia VPN, otwórz przeglądarkę i przejdź do DNSLeakTest.
Witryna zwróci adres IP przypisany przez dostawcę usług internetowych. Aby sprawdzić ustawienia DNS za pośrednictwem tej samej strony, kliknij na Extended Test i on pokaże Ci, jakie serwery DNS używasz.
Teraz podłącz klienta OpenVPN do swojej Droplet VPN i odśwież przeglądarkę. Zupełnie inny adres IP serwera VPN powinien się pojawić. To jest teraz, w jaki sposób pojawiają się na całym świecie. Znowu DNSLeakTest.com Extended Test sprawdzi ustawienia DNS i potwierdzi że obecnie korzystasz z DNS przesunięte przez VPN.
Krok #14: Odwołanie certyfikatów klienta
Niekiedy trzeba odwołać certyfikat klienta, aby zapobiec dalszemu dostępu do serwera OpenVPN.
Aby to zrobić, wpisz swój katalog CA i plik źródłowy vars:
cd ~/openvpn-ca
source vars
Następnie wywołujemy polecenie revoke-full używając nazwy klienta, którego chcesz anulować:
./revoke-full client3
To pokaże jakiś output, kończąc na błędzie 23. Jest to normalne i proces powinien pomyślnie generować niezbędną odwoływalną informacje, która jest przechowywana w pliku o nazwie crl.pem w podkatalogu keys.
Przenieśmy ten plik do katalogu konfiguracyjnego /etc/openvpn:
sudo cp ~/openvpn-ca/keys/crl.pem /etc/openvpn
Następnie otwórz plik konfiguracyjny serwera OpenVPN:
sudo nano /etc/openvpn/server.conf
W dolnej części pliku należy dodać opcję crl-verify , aby serwer OpenVPN sprawdzał listę odwołanych certyfikatów, które mamy utworzone za każdą próbą wykonanego połączenia:
crl-verify crl.pem
Zapisz i zamknij plik.
Wreszcie, uruchom ponownie OpenVPN dla realizacji odwołania certyfikatów:
sudo systemctl restart openvpn@server
Klient powinien być w stanie skutecznie połączyć się z serwerem przy użyciu starych danych logowania.
Aby odwołać dodatkowych klientów, należy wykonać ten proces:
- Wygenerować nową listę odwołania certyfikatów poprzez pozyskiwanie pliku vars w katalogu ~/openvpn-ca, a następnie wywołać skrypt revoke-full na imię klienta.
- Skopiuj nową listę odwołania certyfikatów do katalogu /etc/openvpn, aby zastąpić starą listę.
- Uruchom ponownie usługę OpenVPN.
- Ten proces może być używany, aby odwołać wszystkie certyfikaty, które wcześniej zostały wydane dla Twojego serwera.
Wniosek
Gratulacje! Teraz możesz bezpiecznie korzystać z Internetu, chroniącego twoją tożsamość, lokalizację i ruchu od szpiegów i cenzorzy.
Aby skonfigurować więcej klientów, wystarczy wykonać kroki 6 i 11-13 dla każdego dodatkowego urządzenia. Aby zablokować dostęp do klientów, wykonaj krok 14 .
Comments 10 komentarzy
Mariusz
Fajny artykuł. A czy można prosić o przykład konfiguracji OpnVPN na centOS nie do zachowania anonimowaści ale do połączenie dwóch sieci.
Dla następującego przypadku.
Komputer pracujący w lan 192.168.1.200 (klient VPN) łączy się do serwera OpenVPN.
Inni klienci, 5szt. na ktorych jest zainstalowane klien VPN łączy się do serwera OpenVPN
Cel: uzyskanie dostępu do zasobów klienta 192.168.1.200 (wszystkie poty lub zdefiniowane )
marq
Skrypt niestety nie jest dobrze zrobiony, trzeba go poprawic, albo wyedytywac pozniej plik klienta, inaczej nie funkcjonuje.
Lukas
Super artykuł bardzo mi pomógł podziękowania dla autora
Pablito
Dobry artykuł, chociaż jest kilka niedociągnięć. Z powodu błędu w pliku make_config.sh może wyskoczyć podobny do tego:
"Options error: Unrecognized option or missing parameter(s) in client1.ovpn:136: < (2.3.10)" błąd.
Aby się przed nim uchronić należy usunąć puste znaki (spacje) w tagach z wersji na oraz usunąć zbędne znaki '/' w niektórych z nich, tak aby utrzymać formę xml: terść .
Janek
Błąd, pomoże ktoś :/ ?
Sun Mar 25 19:11:46 2018 NOTE: --user option is not implemented on Windows
Sun Mar 25 19:11:46 2018 NOTE: --group option is not implemented on Windows
Options error: Unrecognized option or missing or extra parameter(s) in client1.ovpn:135: < (2.4.5)
Use --help for more information.
Marcin
Skrypt make_config.sh ma błędy, powinno być:
#!/bin/bash
# First argument: Client identifier
KEY_DIR=~/openvpn-ca/keys
OUTPUT_DIR=~/client-configs/files
BASE_CONFIG=~/client-configs/base.conf
cat ${BASE_CONFIG} \
<(echo -e '') \
${KEY_DIR}/ca.crt \
<(echo -e '\n') \
${KEY_DIR}/${1}.crt \
<(echo -e '\n') \
${KEY_DIR}/${1}.key \
<(echo -e '\n') \
${KEY_DIR}/ta.key \
<(echo -e '') \
> ${OUTPUT_DIR}/${1}.ovpn
Marcin
U mnie pojawia się problem;
--user option is not implemented on Windows
--group option is not implemented on Windows
Options error: Unrecognized option or missing or extra parameter(s) in client1.ovpn:128: < (2.4.4)
Use --help for more information.
Marcin
Udało mi się, faktycznie były błędy w skrypcie ale nie było to nic trudnego, prosta znajomość HTML-a wystarczyła by je wyłapać. Oto kilka rad, proponuje oczyści na początek config przez usunięcie wszystkich linieje które zaczynają się od "#" (nie ma to znaczenia dla samego działania ale wygląd to znacznie przejrzyściej).
Co należy zrobić:
Usunąć linijkę "" ( certyfikat jest otwarty w miejscu a zamknięty przez , skasować wpis od słowa "Certificate:" następna linia "Data:" .... do linijki -----BEGIN CERTIFICATE----- ( ta linka już ma zostać). Przed linijką -----BEGIN CERTIFICATE----- dodajemy a po ciągu znaków wstawiamy "-----END CERTIFICATE-----" dajemy , reszta wygląda już w porządku.
Odnośnie błędu:
--user option is not implemented on Windows
--group option is not implemented on Windows
Sugeruje za komentować to w pliku konfiguracyjnym na serwerze "\etc\openvpn\server.conf" i w pliku konfiguracyjnym na Windowsie, dla Windowsie nie ma to znaczenia, po za komentowaniu problem u mnie zniknął.
Karol
poprawka i teraz jest ok
#!/bin/bash
# First argument: Client identifier
KEY_DIR=~/openvpn-ca/keys
OUTPUT_DIR=~/client-configs/files
BASE_CONFIG=~/client-configs/base.conf
cat ${BASE_CONFIG} \
<(echo -e '') \
${KEY_DIR}/ca.crt \
<(echo -e '\n') \
${KEY_DIR}/${1}.crt \
<(echo -e '\n') \
${KEY_DIR}/${1}.key \
<(echo -e '\n') \
${KEY_DIR}/ta.key \
<(echo -e '') \
> ${OUTPUT_DIR}/${1}.ovpn
Karol
do przepuszczenia internetu trzeba dodać w configi VPN
push „route 0.0.0.0 0.0.0.0”
i iptables
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j SNAT \
–-to 93.94.184.19
i gotowe