Jak skonfigurować OpenVPN, aby móc bezpiecznie korzystać z Internetu z niezabezpieczonego punktu dostępowego?

31

Cel: Chcę mieć możliwość bezpiecznego korzystania z Internetu za pośrednictwem domowego komputera, gdy mój notebook jest podłączony do otwartego punktu dostępu / punktu dostępu.

I nie wiem, że mogę korzystać z tunelu SSH / SOCKS proxy, ale nie chcą bawić się wokół z aplikacjami (co czyni je używać, jeśli w ogóle możliwe). Chyba potrzebuję konfiguracji OpenVPN, więc szukam szczegółowego przewodnika, jak:

  1. Zainstaluj i skonfiguruj serwer OpenVPN
  2. Skonfiguruj klienta OpenVPN (NetworkManager)

Wersje Ubuntu, na których powinno działać, to 10.10 i 11.04.

htorque
źródło
To jest raczej pytanie o awarię serwera niż pytanie o Ubuntu.
Luis Alvarado,
1
@Cyrex: 1) jest, 2) prawdopodobnie nie
Lekensteyn,

Odpowiedzi:

40

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.

  1. 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
    
  2. Edytuj ustawienia domyślne w varsrazie potrzeby, na przykład ustawienie, KEY_SIZE=2048ponieważ jesteś paranoikiem.
  3. Załaduj zmienne i utwórz katalog kluczy, uruchamiając:

    . vars
    
  4. 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 . varsponownie.

  5. 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
    
  6. 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.keyi ca.crtpodfolderu keys. Zachowaj ca.keyplik w tajemnicy we wszystkich okolicznościach . Niezastosowanie się do tego pozwoli każdemu z kluczem połączyć się z serwerem.
  7. 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.
  8. 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.keyi 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:

  1. Wprowadź katalog, w którym utworzono certyfikat urzędu certyfikacji i serwera:

    cd ~/openvpn-admin/easy-rsa
    
  2. Jeśli pominąłeś krok tworzenia urzędu certyfikacji, ponieważ już go masz, musisz najpierw załadować zmienne:

    . vars
    
  3. 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.
  4. Utwórz certyfikat klienta you.keyi odpowiadający mu certyfikat you.crt:

    ./build-key you
    

    CommonNamePowinien 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.

  1. Utwórz dedykowanego użytkownika dla OpenVPN, powiedz openvpn:

    sudo useradd openvpn
    
  2. Kopiowanie plików server.key, server.crt, ca.crti dh1024.pem(lub dh2048.pemjeś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}
    
  3. Skopiuj również plik ta.key:

    sudo cp ~/openvpn-admin/easy-rsa/ta.key /etc/openvpn
    sudo chmod 400 /etc/openvpn/ta.key
    
  4. Utwórz plik /etc/openvpn/server.confi 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
    
  5. 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.keyi 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.keyi 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/openvpni utwórz /etc/openvpn/client.confplik:

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/openvpni odkomentuj następny wiersz, usuwając #:

#AUTOSTART="none"

Aby rozpocząć to połączenie, uruchom:

sudo /etc/init.d/openvpn start client

clientnależ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
Lekensteyn
źródło
1
Jaka jest konfiguracja serwera dla logowania na podstawie nazwy użytkownika / hasła, gdzie mój klient nie ma wiedzy, aby skonfigurować klienta VPN, chcę tylko, aby używał adresu IP serwera, nazwy użytkownika, hasła.
@YumYumYum Nie masz pojęcia, jak używać nazwy użytkownika / hasła, spójrz na stronę manuala openvpn ( man openvpn). Najnowsze wersje openvpn mają możliwość osadzania certyfikatów i plików kluczy, więc być może jeszcze łatwiej jest dostarczyć ten pojedynczy plik konfiguracyjny z instrukcjami dla użytkownika.
Lekensteyn,
Zauważ, że nowsze wersje Ubuntu są dostarczane z OpenSSL 1.0.1 i uruchomienie . varspowyższej komendy może wygenerować błąd, że „można znaleźć plik openssl.cnf. Dalsze wywołania zakończą się niepowodzeniem”. Musisz sudo -s; cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/; ln -s openssl-1.0.0.cnf openssl.cnf, a następnie uruchomić . varsi inne polecenia.
Dan Dascalescu
@DanDascalescu Skrypt poprawnie whichopenssllokalizuje openssl-1.0.0.cnfplik dla mnie (easy-rsa 2.3.2, OpenSSL 1.0.1e)
Lekensteyn
Bardzo pouczająca, dokładna odpowiedź. Czy możesz odpowiedzieć na to pytanie ?
JB0x2D1
8

W rzeczywistości nie musisz majstrować przy żadnych aplikacjach. Działa to „podobnie jak VPN”.

  1. Najpierw zainstaluj tsockspakiet (skarpety tymczasowe):

    sudo apt-get install tsocks
    
  2. Następnie edytuj /etc/tsocks.confi wprowadź

    server = 127.0.0.1
    server_port = 3333
    
  3. Teraz otwórz terminal i wpisz (to Cię łączy):

    ssh -ND 3333 ssh.url.to.your.home.machine
    
  4. Uruchom (przez inny terminal lub ALT-F2):

    tsocks firefox
    

Teraz Firefox przesyła całą komunikację do serwera SOCKS na komputerze utworzonym przez SSH. To dalej tuneluje się do twojej domowej maszyny, gdzie trafia do sieci. Wszystko, czego potrzebujesz na swoim komputerze domowym, to serwer SSH. Po raz pierwszy powtórz kroki 3 i 4.

To działa jak urok! Niestety, chrom nie lubi skarpet, ale hej, Firefox działa.

MarkovCh1
źródło
3
Cóż, zobacz ostatnie zdanie - nie chcę najpierw sprawdzać wszystkich moich programów, jeśli naprawdę działają one dobrze z tsocks, kiedy może to być jedno kliknięcie w aplecie NetworkManager z OpenVPN.
htorque
DOBRZE. Moja odpowiedź będzie prawdopodobnie przydatna dla osób, które chcą szybkiego rozwiązania dostępu do stron internetowych.
MarkovCh1
1

Rozwiązanie tunelowe SSH jest łatwiejsze niż myślisz. Program taki jak gSTM uruchomi / zatrzyma tunele za pomocą GUI. Następnie wystarczy otworzyć Network Proxy i zmienić go z bezpośredniego połączenia internetowego na ręczną konfigurację proxy, nacisnąć „Zastosuj w całym systemie”, a wszystkie aplikacje powinny wysyłać swoje dane tunelem - nie trzeba się nimi bawić.

Felix
źródło