Jak postawić darmowy serwer VPN w chmurze Amazon

VPN w chmurze Amazon

W tym wpisie pokaże Tobie jak prosto założyć własny serwer VPN (w oparciu o OpenVPN Access Server) na chmurze Amazona Web Services (AWS). Jeżeli jeszcze nie korzystasz z AWS takie rozwiązanie będzie dla Ciebie darmowe przez rok, dzięki AWS Free Tier. Po roku koszty i tak będą niższe od komercyjnych VPNów! Zapraszam do lektury.

Virtual Private Network (w skrócie VPN) to, w dużym uproszczeniu, zaszyfrowany tunel za pośrednictwem którego łączysz się z siecią. Najpopularniejsze zastosowanie to dostęp do zasobów wewnętrznych, takich jak sieć firmowa, ale w kontekście tego artykułu chodzi nam o tunelu pomiędzy Tobą i Internetem. Dla Ciebie korzystanie z takiego tunelu nie wpływa w istotny sposób na funkcjonalność połączenia, chociaż może oczywiście obniżać przepustowość połączenia. Natomiast wszystkie urządzenia i osoby znajdujące się pomiędzy Tobą i serwerem VPN (tzw. endpoint’em) widzą tylko jeden strumień zaszyfrowanych danych. Wszystkie strony i usługi z których będziesz korzystał zidentyfikują Twoją lokalizację nie na podstawie Twojego IP, ale IP serwera VPN. Przydaje się to chociażby jeśli chcemy uzyskać dostęp do treści blokowanych w miejscu w którym się znajdujemy.

Tak jak wspomniałem, spróbujemy uruchomić własny serwer VPN w oparciu o open-sourcowe rozwiązanie OpenVPN (w trochę komercyjnej wersji jaką jest OpenVPN Access Server) i chmurę AWS (Amazon Web Services). A więc nawet jeżeli nie potrzebujesz pilnie własnego VPNa może to być ciekawy projekt na rozpoczęcie pracy z chmurą. Oto lista tematów które omówimy:

  • Założenie konta na Amazon Web Services
  • Postawienie maszyny wirtualnej EC2
  • Łączenie się z maszyną za pomocą SSH
  • Instalacja oprogramowania OpenVPN Access Server
  • Nawiązywanie połączenia z serwerem z różnych urządzeń

Krok 1: Konto na AWS

Pierwsza rzecz której będziesz potrzebował to konto na Amazon Web Services. Możesz je założyć tutaj – będziesz potrzebował karty kredytowej którą Amazon sprawdzi blokując $1, a sam proces aktywacji może potrwać kilka godzin. Czekając na aktywację możesz poczytać o AWS Free Tier, gdzie znajdziesz wszystkie usługi do których będziesz miał bezpłatny dostęp jako nowy użytkownik. Jeżeli wszystko przebiegnie zgodnie z planem uzyskasz dostęp do konsoli AWS która wygląda mniej więcej tak:

Konsola AWS

Pro tip – zanim przejdziesz dalej sprawdź w prawym górnym rogu konsoli swój region. Domyślnie u mnie było to US East (Ohio). Polecam przełączyć się na centrum obliczeniowe w Unii Europejskiej ze względu na jakość połączenia. Ja wybrałem Irlandię ☘️.

Krok 2: Konfiguracja i uruchomienie EC2

Elastic Compute Cloud, w skrócie EC2, to w nomenklaturze AWS po prostu maszyna wirtualna – skalowalny zasób obliczeniowy na którym możesz zainstalować jeden z przygotowanych obrazów. W chwili pisania tego artykułu darmowy tier pozwala na instalację obrazów z m.in. SUSE Enterprise Server 12, Ubuntu Server 16.04 oraz Microsoft Windows Server 2016. Możesz także sam przygotować swój obraz do instalacji na maszynie – temat rzeka. Jeśli chcesz spróbować zacznij od dokumentacji opisującej zagadnienie obrazów znanych lepiej pod skrótem AMI – Amazon Machine Images.

Wejdz w panel instancji EC2 (Services -> EC2) i kliknij przycisk Launch Instance. Zostaniesz przekierowany do kreatora instancji, który przeprowadzi Cię przez 6 kolejnych kroków. Nas interesują tylko trzy z nich:

Krok 1 w którym należy wybrać wspomniany obraz maszyny. Wybierzmy Ubuntu Server 16.04 LTS (HVM), SSD Volume Type oznaczony jako ami-5e8bb23b. Możliwe że od czasu publikacji tego artykułu wersja obrazu została zmieniona – jeśli tak wybierz dowolny obraz oparty na Ubuntu Server.

Krok 2 w którym należy wybrać typ instancji. Typ instancji określa ilość przypisanych do niej zasobów a więc również jej cenę. Ja wybieram t2.micro ponieważ tylko ta opcja jest dostępna za darmo w trakcie okresu próbnego. Z doświadczenia powiem tylko że jest to instancja która spokojnie obsłuży kilka jednoczesnych tuneli VPN.

Przeklikaj się przez krok 3, 4 oraz 5. Zatrzymajmy się chwilę na kroku 6. Tutaj skonfigurujemy grupę bezpieczeństwa, czyli zestaw reguł określających jakie protokoły i na jakich portach będą odblokowane. Domyślnie Amazon nie ogranicza reguł outbound (maszyna może wykonywać połączenia wychodzące przy użyciu każdego portu i protokołu). Natomiast inbound (a więc połączenia do maszyny) zawiera tylko jedno dopuszczenie – protokół TCP na porcie 22. Źródło w tej regule to 0.0.0.0/0 a więc „otwarte na świat” – każdy w Internecie będzie mógł połączyć się z usługą SSH działającym właśnie na tym porcie. Dodajmy jeszcze 2 reguły inbound:

  • Typ Custom TCP, port 943, źródło 0.0.0.0/0
  • Typ Custom UDP, port 1194, źródło 0.0.0.0/0

Po dodaniu tych reguł kliknij Review and Launch. W podsumowaniu procesu powinieneś zobaczyć mniej więcej coś takiego:

Podsumowanie instancji AWS

Zwróć uwagę czy reguły bezpieczeństwa się zgadzają. Jeśli wszystko jest OK można startować – kliknij Launch ?. Amazon poprosi Cię jeszcze o wskazanie pary kluczy (prywatnego i publicznego) które pozwolą nam nawiązać bezpieczne połączenie z maszyną. Wybierz opcję stworzenia nowej pary kluczy, przypisz im nazwę i kliknij Download Key Pair. W ten sposób ściągniesz plik .pem zawierający klucz prywatny – warto pamiętać że nie będziesz miał więcej tej możliwości. Dlatego ważne jest aby po ściągnięciu klucza zapisać go w bezpiecznym miejscu.

Po zakończeniu zobaczysz panel EC2 z tabelą instancji. Znajdziesz tam swoją nową maszynę która powinna od razu się uruchomić.

Dostępne instancje EC2 AWS

Pamiętaj że od tego momentu naliczane są także jej koszty. Jeżeli założyłeś nowe konto i został Tobie przydzielony dostęp do AWS Free Tier a maszyna którą właśnie stworzyłeś jest typu t2.micro to co miesiąc przysługuje Tobie 750 darmowych godzin. Jak łatwo policzyć jest to 31,5 dni a więc teoretycznie starczy na cały miesiąc. Jeżeli jednak

  • uruchomisz więcej niż jedną instancję,
  • wybierzesz inny typ instancji lub
  • nie jesteś nowym użytkownikiem

…to możesz sobie nabić spory rachunek ?. Zalecam ostrożność i częste odwiedzanie centrum billingu (kliknij w <Twoja nazwa użytkownika> -> My Billing Dashboard w prawym górnym rogu konsoli.

Krok 3: Połączenie z maszyną wirtualną

Stworzyliśmy naszą maszynę wirtualną. Upewnij się że maszyna działa – wartość którą chcemy zobaczyć w kolumnie Instance State to running, natomiast w Status Checks2/2 checks passed.

Aby zobaczyć dokładne instrukcje połączenia z maszyną kliknij przycisk Connect znajdujący się nad tabelą. Dla użytkowników Linuxa/Unixa mam dobrą wiadomość, wszystko co musisz zrobić żeby połączyć się z maszyną to wpisanie następującej komendy w terminalu:

# chmod 400 klucz.pem
# ssh -i "klucz.pem" ubuntu@host.compute.amazonaws.com

gdzie klucz.pem to dokładna nazwa pliku z kluczem który wcześniej pobrałeś a host to publiczny adres DNS Twojej maszyny.

Użytkownicy Windows mają trochę pod górę, ale Amazon wyciąga do Was rękę dostarczając bardzo wygodną dokumentację ?? Connection Documentation. W dużym skrócie będziesz potrzebował:

  • Klienta PuTTY aby połączyć się z usługą SSH
  • Aplikacji PuTTYgen aby skonwertować swój klucz prywatny (.pem) na format PuTTY (.ppk)

Szczegółowy opis obu punktów znajduje się w dokumentacji. Jeżeli uda Ci się połączyć z maszyną powinieneś zobaczyć prompt serwera Ubuntu podobny do tego:

Ubuntu Server w terminalu

Na koniec należy zadbać o aktualność naszego systemu. Jak nakazuje tradycja, bezpieczeństwo i higiena pracy, zaktualizujmy dane z repozytoriów oraz zainstalujmy najnowsze wersje pakietów:

# sudo apt-get update
# sudo apt-get upgrade

Krok 4: Instalacja serwera VPN – OpenVPN Access Server

Ważny disclaimer – w tym artykule pokazuję jak zainstalować OpenVPN Access Server. Jest to nieco prostsza droga w porównaniu do ręcznej konfiguracji – usługą można zarządzać przez przeglądarkę web, a chcąc połączyć się z VPNem serwer przygotuje dla nas skonfigurowaną aplikację kliencką. Jeżeli chcesz mieć absolutną kontrolę nad swoim serwerem i nie lubisz zabawy w konfigurację przez przeglądarkę to bardzo polecam ten artykuł na medium.com który opisuje instalację OpenVPN bez Access Server.

OpenVPN Access Server ma też swoje ograniczenia – jest oparty na open-sourcowym OpenVPN ale zestaw narędzi ułatwiających konfigurację jest produktem komercyjnym. Bez wgrania dodatkowych, płatnych, licencji serwer pracuje w trybie demonstracyjnym. Jedynym ograniczeniem tego trybu jest możliwość jednoczesnej pracy 2 urządzeń, dlatego do domowych zastosowań powinien spokojnie wystarczyć.

Od strony technicznej – OpenVPN korzysta z własnego protokołu bezpieczeństwa który wykorzystuje TSL/SSL do wymiany kluczy. Oznacza to że nie korzysta z popularnego wśród komercyjnych rozwiązań VPN protokołu IPSec. W związku z tym ma również przewagę funkcjonalną – operatorzy Internetu którzy z jakichś przyczyn chcą ograniczyć użycie VPN będą raczej celowali w wyeliminowanie użytkowników IPSec, i być może pozostawią Twojego OpenVPN’a w spokoju ?️‍♂️.

Warto tu jeszcze wspomnieć o istnieniu AWS Marketplace, czyli internetowego sklepu w którym można kupić oprogramowanie gotowe do wdrożenia w chmurze i usługi z nim powiązane. OpenVPN Access Server jest tam również obecny – można zainstalować gotowy obraz AMI (patrz wyżej) z tym systemem. Skorzystanie z tej opcji nie byłoby jednak znacznie szybsze ani bardziej przejrzyste niż ręczna instalacja usługi.

OK, dosyć teorii. Zacznijmy od pobrania na nasz serwer właściwej paczki. Wejdź na stronę OpenVPN -> VPN Solution -> Software Packages (ta ścieżka mogła się zmienić odkąd powstał ten artykuł, jeśli nie widzisz tych odnośników w menu daj znać w komentarzach poniżej).

Wybierz Ubuntu i skopiuj adres paczki odpowiedniej dla naszej maszyny. Dla mnie będzie to Ubuntu 16 amd/x86 64-bit (AWS nie wspiera systemów 32-bitowych). Stwórz na maszynie nowy folder, ściągnij tam paczkę używając wget, po czym zainstaluj ją używając dpkg:

# mkdir openvpn
# cd openvpn
# wget http://swupdate.openvpn.org/as/openvpn-as-2.5.2-Ubuntu16.amd_64.deb
# sudo dpkg -i openvpn-as-2.5.2-Ubuntu16.amd_64.deb

W rezultacie powinieneś otrzymać informację z adresami pod którymi dostępny będzie interfejs użytkownika, u mnie wygląda to tak:

+++++++++++++++++++++++++++++++++++++++++++++++
Access Server Web UIs are available here:
Admin UI: https://172.31.9.133:943/admin
Client UI: https://172.31.9.133:943/
+++++++++++++++++++++++++++++++++++++++++++++++

Myślisz sobie pewnie: gra gitara, wystarczy kopiuj-wklej do przeglądarki. Nie do końca – adresy IP które zwrócił instalator są w wewnętrznej podsieci AWS.  To znaczy że mógłbyś się z nimi połączyć z innej instancji EC2, ale nie z Internetu. Ponieważ my będziemy łączyli się z zewnątrz musimy wrócić do konsoli AWS i sprawdzić zewnętrzny adres IP naszej maszyny wirtualnej opisany jako IPv4 Public IP . Alternatywnie możesz użyć adresu DNS – Public DNS (IPv4). Na szczęście port i ścieżka (:943/admin) już się zgadzają. Zanim przejdziemy dalej ustaw jeszcze hasło dla użytkownika openvpn:

# sudo passwd openvpn

Krok 5: Konfiguracja OpenVPN Access Server

Kiedy podmienimy IP na publiczny adres maszyny i wejdziemy na wskazany Admin UI prawdopodobnie będziesz musiał/a przeklikać się przez groźnie wyglądające ostrzeżenie dotyczącym brakującego certyfikatu. W zależności od przeglądarki jakiej używasz będziesz musiał/a kliknąć „zaawansowane” i dodać wyjątek do reguł bezpieczeństwa dla tego adresu IP lub kliknąć Otwórz stronę xx.xx.xx.xx (niebezpieczną). Po zalogowaniu (pamiętaj – użytkownik to openvpn) powinieneś zobaczyć panel administratora podobny do tego:

Panel administratora OpenVPN Access Server

Jesteśmy w domu. Polecam Tobie odwiedzić wszystkie podstrony panelu, większość parametrów jest przystępnie opisana, chociaż oczywiście jak zawsze przy pracy z oprogramowaniem sieciowym wymagane będzie mocne google-fu aby zrozumieć niektóre z nich. Rzeczy które trzeba lub warto zrobić to:

Zmiana adresu IP

OpenVPN wciąż myśli że jest dostepny dla użytkowników pod wewnętrznym adresem IP Amazona. Trzeba go wyprowadzić z błędu. Wejdź w Configuration -> Network Settings i zmień wartość pierwszego pola (Hostname or IP Adress) na zewnętrzny adres IP Twojej maszyny.

Stworzenie użytkowników

Wejdź w User Management -> User Permission. Dodaj nowego użytkownika z którego będziesz korzystał łącząc się z VPNem i przypisz mu hasło. Teoretycznie możesz korzystać z VPNa używając konta openvpn ale to bardzo niehigieniczne używać na co dzień konta z uprawnieniami administratora.

Ustawienia VPN’a

Wejdź w Configuration -> VPN Settings. W obszarze Routing – dla pierwszej opcji – „Should VPN clients have access to private subnets (non-public networks on the server side)?” wybierz No. Jeżeli kiedyś dodasz nowe instancje i będziesz chciał aby dostęp do nich był tylko poprzez tunel VPN – powróć do tej opcji i zmień ją na Yes.

W obszarze DNS Settings warto zaznaczyć opcję „Have clients use specific DNS servers” aby zapobiec wyciekom DNS. W dużym skrócie – pomimo tego że cały Twój ruch będzie transmitowany szyfrowanym tunelem Twój komputer wciąż może odpytywać (jawnie) serwer DNS dostawcy internetu o adresy hostów z którymi łączy się przez tunel. O ile sama komunikacja pozostanie bezpieczna to już adresy serwerów z którymi się łączysz mogą zostać przechwycone. Inaczej mówiąc, nie będzie wiadomo o czym rozmawiasz ale będzie wiadomo z kim. Zaznaczenie tej opcji spowoduje pokazanie się dwóch kolejnych parametrów – Primary DNS Server i Secondary DNS Server. Możesz wybrać serwery DNS Google (8.8.8.8, 4.4.4.4) ja wybrałem Open DNS (208.67.222.222, 208.67.222.220).

Wybór dostępnych aplikacji klienckich

Wejdź w Configuration -> Client Settings. W obszarze Customize Client Web Server UI będziesz mógł wybrać jakie typy klientów będą dostępne dla użytkowników VPNa.

Krok 6: Konfiguracja Klienta

Czas na ukoronowanie naszych wysiłków. W tym kroku pobierzemy oprogramowanie klienckie i zaczniemy korzystać z naszego nowego VPN’a. W przeglądarce wejdź na adres interfejsu klienta, który od panelu admina różni się zwyczajnie brakiem ścieżki /admin na końcu. Zaloguj się używając stworzonego konta (nie openvpn). Zostaniemy przywitani bardzo prostym zestawem opcji odpowiadających typom aplikacji klienckich które wybraliśmy w poprzednim punkcie. U mnie wygląda to tak:

Panel użytkownika OpenVPN

Pobierz właściwego swojej obecnej platformie klienta. Na niektórych platformach konieczne będzie także pobranie profilu połączenia ale aplikacja przeprowadzi Cię przez ten proces. Tak przynajmniej było u mnie na telefonie z systemem iOS.

Podsumowanie

Jeżeli udało Ci się przebrnąć przez cały poradnik i połączyć ze swoim nowym, błyszczącym serwerem VPN – gratuluję! Jak chcesz to potrafisz ?. Jako ciekawostkę polecam wyszukać w Google frazę „what is my location” lub zbliżoną. Ja swoją maszynę postawiłem w regionie Irlandia, więc nie zdziwiłem się bardzo, gdy na swoje pytanie dostałem taką odpowiedź:

Moja lokalizacja wg Google

Odpowiedzmy sobie na koniec na kilka istotnych pytań.

Ile kosztuje taki VPN?

Otóż jak już wcześniej wspomniałem – niewiele lub zero. Jeżeli nie przekroczysz dostępnego deputatu darmowych godzin, nie uruchomisz 2 lub więcej maszyn, nie potrzebujesz licencji na więcej niż 2 jednoczesne połączenia to ta zabawa pozostanie dla Ciebie darmowa przez rok. A jak to wygląda po pierwszym roku? Dokładny cennik godzinowy poszczególnych instancji znajdziesz tutaj. Koszt maszyny t2.micro to $0.0126 w regionie Irlandia (np. Frankfurt jest nieco droższy). Oznacza to koszt miesięczny na poziomie ~$10 – czyli według dzisiejszego kursu dolara ok. 39 zł.

Po pierwszym roku możesz przełączyć się na instancję EC2 typu t2.nano dla której koszt godzinowy to $0.0067 (a więc $5 na miesiąc). W jednym z kolejnych artykułów pokażę także jak można uruchamiać taką usługę (lub dowolną inną usługę zlokalizowaną na EC2) w trybie „na żądanie”. Posłuży nam do tego AWS Lambda, czyli serverless computing, jeden z bardziej hypowanych tematów IT w ostatnich latach. Czy warto cokolwiek optymalizować kiedy mówimy o tak niskich kwotach? Raczej nie, ale będzie to fajny, praktyczny przykład zastosowania Lambdy a propozycje które na rynku pracy otrzymują specjaliści od serverless computing są absolutnie warte zapoznania się z tą technologią.

Komu nie przyda się VPN na AWS?

Jeżeli robisz rzeczy nielegalne (jak np. ściąganie i dzielenie się komercyjnymi mediami czy programami) to oczywiście lepiej skorzystać z komercyjnych VPN’ów które otwarcie deklarują że np. nie gromadzą logów a więc nie mogą przekazać ich na niczyje żądanie. Amazon nie zapewnia ochrony przed policją czy innymi instytucjami, z którymi współpracują w wymaganym przepisami zakresie.

Nie wiem jak wygląda status wykorzystania w ten sposób AWS do np. obejścia cenzury w niektórych państwach, dla bezpieczeństwa również skorzystałbym z komercyjnych rozwiązań.

Natomiast jeżeli chcesz się ochronić przed przestępstwami, utratą prywatności, wyciekiem danych czy ukryć swój prawdziwy adres IP – możesz śmiało korzystać z chmury Amazona.

Mam nadzieję że udało Ci się przejść przez ten poradnik i nawet jeżeli nie potrzebujesz VPNa, wyniosłeś z niego coś cennego. Jeśli tak – daj proszę znać w komentarzach poniżej! Do zobaczenia w następnym wpisie (edit: dwa lata trzeba było czekać ?? Zdalne repozytorium Git na AWS.)

Autor: kuba

Pracuję w IT, sprzedając oprogramowanie klasy APS/MES firmom produkcyjnym. Nie jestem software developerem ale odkąd zacząłem w Turbo Pascalu zawsze coś piszę - ostatnio w Pythonie. Lubię technologie, mocną kawę i dobre zdjęcia ?

2 odpowiedzi na “Jak postawić darmowy serwer VPN w chmurze Amazon”

Dzięki za tutorial, przydał się i wyjaśnił kilka kwestii. Oby więcej takich na blogu i czekam na obiecane rozwinięcie kwestii AWS Lambda!
Pozdrawiam

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *