Dokładne pytanie mam kilka miesięcy temu, ale dodatkowo chciałem mieć połączenie IPv6, jeśli to możliwe. Być może zainteresują Cię moje pytania dotyczące Serverfault:
Miałem tylko jedną kartę sieciową („interfejs sieciowy”) na moim serwerze do użytku. W mojej konfiguracji NetworkManager nie był wystarczający, ponieważ muszę uruchomić niestandardowy skrypt do obsługi IPv6. Dla uproszczenia użyję tutaj NetworkManagera i pomijam obsługę IPv6.
Najpierw podejmij decyzję o metodzie uwierzytelnienia. Będę używał bezpieczniejszej metody certyfikatu, która działa jak SSL: podczas uzgadniania wybierany jest wspólny sekret, który będzie używany podczas sesji. Inne metody są kluczem wspólnym; nazwa użytkownika i hasło.
serwer
1. Przygotuj się
Najpierw zainstaluj serwer openvpn. To takie proste sudo apt-get install openvpn
. Trudną częścią jest jego konfiguracja. Konfiguracja jest obecna w /etc/openvpn
.
2. Skonfiguruj uwierzytelnianie
Serwer potrzebuje certyfikatów do identyfikacji siebie i swoich klientów. Te certyfikaty są pobierane z urzędu certyfikacji (Common Authority). Utworzenia certyfikatów i powiązanych kluczy prywatnych można dokonać na dowolnym komputerze, nie trzeba tego robić na serwerze. Jeśli jesteś naprawdę paranoikiem, powinieneś to zrobić na maszynie, która nie jest podłączona do sieci i użyć karty pamięci do przesyłania certyfikatów.
Utwórz urząd certyfikacji i certyfikaty dla serwera
Ten krok należy wykonać raz, chyba że klucz prywatny Twojego urzędu certyfikacji zostanie naruszony. W takim przypadku można utworzyć ważne certyfikaty, które zostaną zaakceptowane przez serwer, co spowoduje naruszenie bezpieczeństwa.
Oficjalna dokumentacja sugeruje zrobić administrację /etc/openvpn
. Nie jestem wielkim fanem uruchamiania wszystkiego jako root, więc umieszczę to w innym katalogu.
Utwórz katalog administracyjny i skopiuj do niego pliki, uruchamiając:
mkdir ~/openvpn-admin
cd ~/openvpn-admin
cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/ ./easy-rsa
cd easy-rsa
- Edytuj ustawienia domyślne w
vars
razie potrzeby, na przykład ustawienie, KEY_SIZE=2048
ponieważ jesteś paranoikiem.
Załaduj zmienne i utwórz katalog kluczy, uruchamiając:
. vars
Jeśli pojawi się błąd No ... openssl.cnf file could be found
Further invocations will fail
, uruchom ln -s openssl-1.0.0.cnf openssl.cnf
, a następnie . vars
ponownie.
Jeśli używasz tego urzędu certyfikacji po raz pierwszy, przygotuj środowisko kluczy. Czy nie uruchomić to polecenie, jeśli chcesz zachować uprzednio utworzoną CA. W takim przypadku konieczne będzie wdrożenie nowego ca.crt
.
./clean-all
- Utwórz urząd certyfikacji, wykonując
./build-ca
. Możesz podać dowolne dane, ale pamiętaj, że informacje te będą widoczne w plikach dziennika, gdy klienci połączą się z serwerem. Spowoduje to utworzenie plików ca.key
i ca.crt
podfolderu keys
. Zachowaj ca.key
plik w tajemnicy we wszystkich okolicznościach . Niezastosowanie się do tego pozwoli każdemu z kluczem połączyć się z serwerem.
- Jeśli masz poprzedni certyfikat, który został utracony lub wygasł, musisz najpierw odwołać stary
./revoke-full server
. W przeciwnym razie pojawi się błąd bazy danych.
Utwórz certyfikat dla serwera, uruchamiając:
./build-key-server server
Gdy zostaniesz poproszony o hasło, pozostaw je puste, chyba że chcesz wprowadzić hasło przy każdym uruchomieniu serwera (niezalecane). Potwierdź podpisując certyfikat i zatwierdzając go. W katalogu pojawią się dwa nowe pliki keys
: server.key
i server.crt
.
DH i użyj przygotowania do tls-auth
Wygeneruj parametry Diffie-Hellman przy użyciu:
./build-dh
Za utwardzania wskazówki , stosowania tls-auth
. W tym celu wygeneruj klucz współdzielony za pomocą:
openvpn --genkey --secret ta.key
Plik wynikowy ( ta.key
) musi być również rozpowszechniany wśród klientów, ale nie należy go umieszczać publicznie.
Utwórz certyfikaty dla klientów
W przypadku każdego klienta należy powtórzyć następujące kroki:
Wprowadź katalog, w którym utworzono certyfikat urzędu certyfikacji i serwera:
cd ~/openvpn-admin/easy-rsa
Jeśli pominąłeś krok tworzenia urzędu certyfikacji, ponieważ już go masz, musisz najpierw załadować zmienne:
. vars
- Jeśli tworzysz nowe certyfikaty, ponieważ stare zostały utracone lub wygasły , musisz najpierw odwołać stary
./revoke-full you
. W przeciwnym razie pojawi się błąd bazy danych.
Utwórz certyfikat klienta you.key
i odpowiadający mu certyfikat you.crt
:
./build-key you
CommonName
Powinien być unikalny. Pozostaw hasło puste, jeśli używasz KDE, ponieważ nie jest ono jeszcze obsługiwane od 10.10. Podobnie jak w przypadku generowania certyfikatu serwera, potwierdź podpisanie certyfikatu i zatwierdzenie zmian.
3. Skonfiguruj usługę OpenVPN
Domyślnie OpenVPN działa jako root podczas akceptowania połączeń. Nie jest to dobry pomysł, jeśli usługa jest dostępna ze złego Internetu.
Utwórz dedykowanego użytkownika dla OpenVPN, powiedz openvpn
:
sudo useradd openvpn
Kopiowanie plików server.key
, server.crt
, ca.crt
i dh1024.pem
(lub dh2048.pem
jeśli zmieniłeś rozmiar klucza) z katalogu do kluczy /etc/openvpn
. Zgoda 400 (tylko do odczytu dla właściciela) jest w porządku.
sudo cp ~/openvpn-admin/easy-rsa/keys/{server.key,server.crt,ca.crt,dh*.pem} /etc/openvpn
sudo chmod 400 /etc/openvpn/{server.key,server.crt,ca.crt}
Skopiuj również plik ta.key
:
sudo cp ~/openvpn-admin/easy-rsa/ta.key /etc/openvpn
sudo chmod 400 /etc/openvpn/ta.key
Utwórz plik /etc/openvpn/server.conf
i umieść w nim kolejne wiersze:
proto udp
dev tap
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1"
ifconfig-pool-persist ipp.txt
keepalive 10 120
tls-auth ta.key 0
# Compress data to save bandwidth
comp-lzo
user openvpn
group openvpn
persist-key
persist-tun
# Logs are useful for debugging
log-append openvpn-log
verb 3
mute 10
Ustaw odpowiednie uprawnienia, nie musi to być tajemnica, ale wolę nie przeciekać szczegółów konfiguracji, więc:
sudo chmod 640 /etc/openvpn/server.conf
4. Kończenie serwera
Jeśli masz utworzone certyfikaty na serwerze, dobrze jest je zaszyfrować lub przenieść z serwera. W każdym razie nie trać ca.key
i server.key
. W pierwszym przypadku inni będą mogli połączyć się z twoim serwerem. W tym ostatnim możliwy jest MITM .
Klient
Oprócz adresu IP serwera administrator serwera powinien przekazać następujące pliki:
ca.crt
: do weryfikacji certyfikatów
server.crt
: do weryfikacji serwera i komunikacji z nim
ta.key
: dla wzmocnienia bezpieczeństwa
you.crt
: do identyfikacji z serwerem
you.key
: to jak twoje hasło, uprawnienia do plików powinny wynosić 400 (tylko do odczytu dla właściciela)
1. Instalacja
Zainstaluj OpenVPN i wtyczkę NetworkManager (odpowiednie dla KDE i Gnome):
sudo apt-get install openvpn network-manager-openvpn
network-manager-openvpn
jest w repozytorium wszechświata.
2. Konfiguracja
W panelu sterowania użyj następujących informacji:
- Brama: adres IP serwera
- Wpisz: „Certyfikaty (TLS)” (Gnome) lub „X.509 Certificate” (KDE)
- Certyfikat CA: ścieżka do
ca.crt
- Certyfikat użytkownika: ścieżka do
you.crt
- Klucz prywatny: ścieżka do
you.key
W zaawansowanym :
- Port bramy: automatyczny (1194) (nie trzeba go zmieniać)
- Użyj kompresji danych LZO: włączone
- Użyj połączenia TCP: wyłączone
- Użyj urządzenia TAP: włączone
- Szyfr: domyślnie
- Uwierzytelnianie HMAC: domyślne
- Użyj uwierzytelniania TLS: włączone
Określ ścieżkę do pliku kluczy ta.key
i ustaw „Kierunek klucza” na 1
.
- ( todo - sprawdzenie ) serwer wypycha bramę domyślną, aby cały ruch był przesyłany przez połączenie VPN. Podczas ostatniego sprawdzania wtyczka network-manager-openvpn tego nie zrobiła.
Jeśli nie możesz uruchomić programu NetworkManager lub nie chcesz go używać, włóż pliki ( ca.crt
, ...) /etc/openvpn
i utwórz /etc/openvpn/client.conf
plik:
client
dev tap
proto udp
# replace 1.2.3.4 by your server IP
remote 1.2.3.4 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert you.crt
key you.key
ns-cert-type server
tls-auth ta.key 1
comp-lzo
user nobody
group nogroup
verb 3
mute 20
Jeśli nie chcesz włączać tej sieci VPN podczas uruchamiania, edytuj /etc/default/openvpn
i odkomentuj następny wiersz, usuwając #
:
#AUTOSTART="none"
Aby rozpocząć to połączenie, uruchom:
sudo /etc/init.d/openvpn start client
client
należy zmienić nazwę, jeśli plik konfiguracyjny nie ma nazwy client.conf
. Przykład: jeśli nazwałeś swój plik konfiguracyjny safe.conf
, musisz uruchomić sudo /etc/init.d/openvpn start safe
.
Aby zatrzymać OpenVPN, musisz uruchomić:
sudo /etc/init.d/openvpn stop