Raspberry Pi – serwer VPN – cz. 2

W tym artykule zajmiemy się konfiguracją VPNu na naszym Raspberry Pi.
Do wyboru mamy kilka rozwiązań. Ja postawię na rozwiązanie otwarte, niezależne od platformy, sprawdzone, bezpieczne i zweryfikowane przez społeczność!

O czym mowa?

O OpenVPN. Jego konfiguracja nie jest niestety trywialna i potrzebna dobrego tutorialu, po drodze może pojawić się wiele problemów. Pokażę Wam jak ja to zrobiłem. Podczas przygotowań opierałem się na bardzo dobrym opracowaniu Jonaha.

Startujemy:

Opracowanie powinno zadziałać na każdej dystrybucji Linuxa opartej na jądrze Debiana.

Najpierw zmieńmy swoje domyślne hasło (jeśli jeszcze tego nie zrobiliśmy); domyślne hasło istotnie obniża nasze bezpieczeństwo (nadal trudno będzie włamać się z zewnątrz na nasza Mailnę, jednak teoretycznie – zadanie będzie łatwiejsze):

Standardowo – aktualizujemy pakiety:

Instalujemy OpenVpn:

Aby nieco ułatwić sobie dalszą pracę uruchamiamy SSH jako root, tylko SuperUżytkownik może operować na kluczach szyfrujących połączenie:

Instalujemy GITa, z którego pobierzemy podstawią konfigurację:

Pobieramy podstawową konfigurację OpenVPNa wraz z narzędziem do generowania kluczy: EasyRSA, wydajemy polecenie:

Pobieramy odpowiednią (najlepiej najnowszą wersję EasyRSA):

Kopiujemy pobraną z GITa konfigurację do folderu OpenVPNa:

Tworzymy certyfikaty

Pobraliśmy EasyRsa – możemy teraz wygenerować certyfikaty wykorzystywane do zabezpieczania naszego połączenia do VPN.

Przejdźmy do folderu z pobranym EasyRSA:

EasyRSA konfigurację przechowuje w pliku vars, edytujmy go za pomocą prostego i przyjaznego edytora konsolowego nano (jeśli ktoś chce można również użyć vi czy gedit’a).

Zmodyfikujmy w tym pliku linie zawierającą:

export EASY_RSA=”pwd”

I zastąpmy ten wpis następującym:

export EASY_RSA=”/etc/openvpn/easy-rsa”

Jeśli jesteśmy fanatykami bezpieczeństwa możemy również wydłużyć klucz szyfrujący z 1024B do 2054B, poprzez modyfikację wartości:

export KEY_SIZE

Zaczynamy tworzenie certyfikatów

Korzystamy z programów umieszczonych w folderze EasyRSA: /etc/openvpn/easy-rsa:

Podczas generowania certyfikatu zostaniemy poproszeni o podanie kilku informacji – to metadane certyfikatu, nie mają dla nas istotnego znaczenia, niemniej można poświecić chwilę i je uzupełnić.

W końcu tworzymy certyfikat naszego serwera:

Znów zostaniemy poproszeni o wprowadzenie kilku informacji.

UWAGA:

Tym razem musimy zwrócić uwagę na informacje Common Name – powinniśmy tam wpisać nazwę naszego serwera (czyli to samo co wpisaliśmy jako DOWOLNA_NAZWA SERWERA powyżej).

Pole „A challenge password” musimy pozostawić puste.

Na ostatnie dwa pytani (o podpisanie i dołączenie certyfikatu) odpowiadamy twierdząco (y).

Generujemy klucze użytkowników

Klucze to pliki, którymi użytkownik będzie uwierzytelniał się na serwerze, klucz służy również do szyfrowania połączenia dzięki czemu mamy pewność co do jego poufności. Wprowadzamy również kolejną warstwę zabezpieczającą: oprócz znajomości loginu i hasła – musimy posiadać plik certyfikatu.
A więc przechwycenie (np. poprzez podejrzenie) naszego hasła nie oznacza możliwości włamania na nasz serwer VPN – atakujący musiałby jeszcze posiadać nasz klucz.

Również odpowiadamy na zadawane przez kreator pytania i pozostawiamy parametr „A challenge password” puste.

UWAGA:

W polu: „Enter PEM pass phrase” wpisujemy hasło do naszego certyfikatu, koniecznie należy zapamiętać hasło, bez niego certyfikat będzie bezużyteczny!

Teraz musimy uszykować klucze do szyfrowania 3des:

Znów uruchamia się kreator, ważne aby podać hasło jak w poprzednim kroku!

Budujemy klucze Diffiego-Hellmana umożliwiające wymianę kluczy pomiędzy serwerem a klientem:

Trwa to trochę, na Raspberry Pi 2 ver B – około 8-10 min.

Możemy uruchomić zabezpieczenie przeciw atakom DDos poprzez:

Co teraz?

Jak na razie mamy wygenerowane klucze; teraz konfigurujemy OpenVPN. 🙂

Edytujemy główny plik konfiguracyjny:

Skorzystamy z gotowego pliku konfiguracyjnego, wystarczy skopiować i wkleić poniższy tekst:

Gdy połączymy się z VPNem nasza Mailna znajdzie się w dwóch sieciach (fizycznej i wirtualnej), musimy włączyć forwardowanie pakietów pomiędzy sieciami:

Usuwamy komentarz w linii:

Wprowadzamy zmianę:

Na końcu stworzymy regułę POSTROUTING w naszym IPtables.

Przechodzimy do folderu pre-up /etc i wpisujemy:

Dodajemy w pliku następująca zawartość:

Nadajemy plikowi uprawnienia do wykonania i zmieniamy właściciela:

Dodajemy do firewalla regułę akceptująca przychodzące pakiety na port OpenVpn:

Restartujemy nasz sprzęt:

Sprawdzamy log – jeśli jest pusty, lub nie ma w nim niczego alarmującego znaczy, że się udało:

Możemy dodatkowo sprawdzić czy serwer nasłuchuje na porcie 1194:

Za pomocą tej strony warto sprawdzić czy na naszym serwerze jest otwarty i prawidłowo przekierowany port 1194 oraz czy jest widziany w publicznej sieci.
Jeśli chcemy łączyć się z dowolnego miejsca na świecie – port musi być dostępny publicznie.


UWAGA:

W przypadku problemu i komunikatu w logu „OpenVPN – Socket bind failed on local address [AF_INET] IP:1194: Cannot assign requested address” należy zacementować linię:

w pliku

 


Co później?

Pozostało:

  • Przekierowanie na routerze portu 1194 na adres Maliny.
  • Skonfigurowanie klienta.

O konfigurowaniu klienta będzie kolejny artykuł. Dzięki pewnej sztuczce jest to dużo łatwiejsze niż konfigurowania serwera. Zapraszam do śledzenia bloga.

W razie problemów dajcie znać w komentarzach!
Powodzenia! 🙂


Artykuł w ukazuje się w ramach projektu CyberHome tworzonego w ramach akcji DajSięPoznać.


Jedno przemyślenie nt. „Raspberry Pi – serwer VPN – cz. 2

  1. Witam, wydaje mi się, że ten poradnik jest najlepszy na jaki trafiłem w internecie, ale próbuje postawić 3 raz tego VPN i niestety mi nie wychodzi. A jest to część mojej pracy inżynierskiej. Więc bardzo prosiłbym o pomoc. Mam kilka pytań, gdyż dla mnie jako totalnego nowicjusza w LINUX nie wszystko jest zrozumiałe. Będę wdzięczny jeśli poświęci mi ktoś chwile i odpowie na moje pytania:

    „Pobieramy odpowiednią (najlepiej najnowszą wersję EasyRSA):
    cd easy-rsa
    git checkout 2.2.2
    Kopiujemy pobraną z GITa konfigurację do folderu OpenVPNa: ”

    komenda git checkout 2.2.2 – > rozumiem, ze tutaj jest wszystko ok? różne komunikaty mi wyskakiwały, ale poszedłem dalej, mysle ze jakoś to tam zaliczyło.

    Lecąc na sam dół w poleceniach mamy coś takiego:

    „Usuwamy komentarz w linii:
    #net.ipv4.ip_forward=1
    Wprowadzamy zmianę:
    sysctl -p ”
    jak usunę ten komentarz to rozumiem , ze zmiana „sysctl -p” wprowadzam po wyjściu i zapisaniu pliku. I dopiero normalnie tej ścieżce której się znajduję wpisuje tą komende ?

    tamte powyższe pytania: myślę, ze intuicyjnie zrobiłem tak jak powinno być (choć proszę o odpowiedź) ale tutaj kompletnie nie wiedziałem gdzie to wpisać, i nigdzie to nie wpisałem

    „Dodajemy do firewalla regułę akceptująca przychodzące pakiety na port OpenVpn:

    sudo iptables -A INPUT -p tcp –dport 1194 -j ACCEPT”
    gdzie to dodajemy? Firewalla, ale jaki to jest plik? Jaka jest ścieżka ? Nie wiem kompletnie gdzie to mam wpisać? Gdyż jak to wpisałem to po wpisaniu wcześniej tych komend z chowmod itp to pokazało mi ,że nie ma takiej biblioteki czy tam pliku 🙁

    Bardzo proszę o pomoc, gdyż na pewno za parę dni będę próbował znowu postawić server VPN z Pana poleceniami, bo widzę, że jestem blisko, ale niestety mi się to nie udaje.

    Koniec końców pokazuje mi taki komunikat gdy już sprawdzam mój VPN

    „Options error: unrecognized option or missing parameter(s) in /etc/openvpn/server.conf:29: mode (2.3.4)
    Usse --help for more information"

    BARDZO PROSZĘ O POMOC !

Dodaj komentarz

This site uses Akismet to reduce spam. Learn how your comment data is processed.