Jaki VPN wybrać – to często pojawiające się pytanie wśród osób, które chciałyby zadbać o swoją prywatność korzystając z Internetu. Dostawcy płatnych usług VPN zapewniają nas, że własną piersią będą bronić naszej prywatności, nie będą nas śledzić i nikomu nie udostępnią logów z naszej aktywności. Często jednak okazuje się, że rzeczywistość jest zgoła inna, a logi na żądanie organów ścigania udostępniają nawet ci, którzy zarzekali się, że w ogóle tych logów nie przechowują. Polecam w tym temacie świetny webinar Adama Haertle z Z3S, który rozprawia się z obietnicami dostawców VPN.
Mając na uwadze powyższe postanowiłem pokazać Wam w jaki sposób można uruchomić własny serwer VPN, nad którym to my będziemy mieli kontrolę. Tytułowe 5 min. zajmie nam instalacja i konfiguracja serwera VPN bazującego na Linuksie i oprogramowaniu OpenVPN. Musimy jednak mieć już jakiś serwer linuksowy działający w chmurze. Jeśli takowego nie posiadacie, poniżej podpowiem również jak sobie z tym poradzić.
Jaki serwer do VPN?
Możecie skorzystać z dowolnego dostawcy usług chmurowych, który pozwoli Wam w prosty sposób uruchomić serwer z Linuksem. Osobiście polecam Amazon AWS, ponieważ jako nowy klient dostajemy na rok darmową pulę zasobów do wykorzystania (tzw. free tier). W jej ramach możemy wykorzystać 750 godzin pracy serwera typu t2.micro miesięcznie (czyli może on pracować 24 godz. na dobę jeśli nie uruchamiamy innych serwerów). Maszyna typu t2.micro posiada 1 procesor oraz 1GB RAM-u, co w zupełności wystarczy na nasze potrzeby. Uruchamiając ją możemy wybrać jeden z wielu obrazów systemu. Osobiście preferuję Debiana lub Ubuntu. Po upływie roku koszt pracy maszyny t2.micro będzie wynosił około 1 centa na godzinę, czyli w dużym przybliżeniu 1zł / dzień. Możemy go zoptymalizować wyłączając np. serwer na noc lub włączając go tylko wybierając się w podróż, podczas której będziemy używać VPN-a. Możemy też założyć nowe konto w AWS korzystając z innego maila i karty 🙂
Jaki system do OpenVPN?
Sposób instalacji, który opisuję poniżej najlepiej sprawdzi się na systemach z rodziny Debian i Ubuntu, ale powinien też zadziałać dla Fedory i CentOS-a. Ja własną instalację przeprowadziłem na Kali Linux, ponieważ taki serwer miałem już uruchomiony w AWS i wymagało to tylko jednej drobnej poprawki, o czym wspomnę niżej.
Instalacja i konfiguracja OpenVPN
OpenVPN w każdej chyba popularnej dystrybucji Linuksa dostępny jest do instalacji z pakietów lub nawet preinstalowany w systemie. Jeśli go nie mamy, to w przypadku Debiana / Ubuntu / Kali wystarczy jedno polecenie:
apt-get install openvpn
Nieco więcej zachodu wymaga konfiguracja serwera oraz wygenerowanie kluczy dzięki którym będziemy się mogli logować z użyciem certyfikatu, bez podawania loginu i hasła. Na szczęście z pomocą przychodzi nam tutaj gotowy skrypt, który wykona całą pracę za nas. Musimy go jedynie pobrać z Githuba, zapisać:
wget https://git.io/vpn -O openvpn.sh
a następnie nadać atrybut wykonywalności i uruchomić jako root:
chmod a+x openvpn.sh
sudo ./openvpn.sh
W pierwszej fazie skrypt zapyta nas o kilka parametrów, które w większości przypadków wystarczy zatwierdzić z wartością domyślną wciskając enter:
Welcome to this OpenVPN road warrior installer!
This server is behind NAT. What is the public IPv4 address or hostname?
Public IPv4 address / hostname [x.x.x.x]:
Which protocol should OpenVPN use?
1) UDP (recommended)
2) TCP
Protocol [1]: 1
What port should OpenVPN listen to?
Port [1194]:
Select a DNS server for the clients:
1) Current system resolvers
2) Google
3) 1.1.1.1
4) OpenDNS
5) Quad9
6) AdGuard
DNS server [1]: 2
Enter a name for the first client:
Name [client]: kuba
OpenVPN installation is ready to begin.
Press any key to continue...
Uwaga: jeśli uruchamiacie skrypt na Kali Linux, musicie na chwilę zmienić zawartość pliku /etc/debian_version tak, by w jego pierwszej linii pojawiła się wartość „9”. Skrypt sprawdza po prostu czy używana wersja Debiana jest wyższa od 9 i nie wie, że Kali Linux ten wymóg spełnia.
Po potwierdzeniu, że chcemy kontynuować skrypt pobierze pakiet easy-rsa, przy pomocy którego wygeneruje klucze i certyfikaty, a następnie stworzy pliki konfiguracyjne dla serwera i klienta. Całą operację zakończy informując gdzie został zapisany plik konfiguracyjny klienta:
Finished!
The client configuration is available in: /root/kuba.ovpn
New clients can be added by running this script again.
Powyższy plik musimy przekopiować na swój komputer aby móc go zaimportować podczas konfiguracji klienta. Pozostałe pliki konfiguracyjne i klucze umieszczone zostaną w katalogu /etc/openvpn/server. Pozostaje nam więc tylko uruchomienie serwera OpenVPN:
sudo service openvpn start
Skrypt konfiguracyjny domyślnie dodaje do reguł w lokalnej zaporze (iptables lub firewalld) zgodę na połączenia przychodzące na port i protokół wskazany podczas instalacji (domyślnie UDP/1194). My musimy dodatkowo zadbać o to, aby ta sama reguła została zdefiniowana na poziomie zapory u naszego dostawcy chmury (o ile takowa występuje). W przypadku AWS-a odpowiednią regułę musimy dodać w zakładce Network & Security -> Security Groups:
Instalacja i konfiguracja klienta OpenVPN
Jeśli korzystacie z user friendly Linuksa, takiego jak np. Ubuntu, jedyne co musicie zrobić to wejść w ustawienia sieci i dodać nowy profil VPN:
A następnie zaimportować plik z konfiguracją klienta, który został wygenerowany podczas konfiguracji serwera:
I to wszystko 🙂
W przypadku Windowsa dodatkowo konieczne będzie pobranie i zainstalowanie klienta OpenVPN ze strony: https://openvpn.net/community-downloads/ . Instalacja nie wymaga żadnego komentarza – typowe next, next, next, done. Po uruchomieniu klienta (na pulpicie powinien się pojawić skrót do OpenVPN GUI) w zasobniku systemowym ujrzymy ikonę OpenVPN:
Klikając ją prawym przyciskiem myszy za pierwszym razem będziemy musieli wybrać pozycję „Import>” i wskazać plik klienta wygenerowany podczas konfiguracji serwera. A gdy już przeprowadzimy import, w tym samym miejscu będziemy mogli uruchomić nasz VPN wybierając „Połącz”.
Sugeruję jeszcze wejść w ustawienia klienta i zmienić domyślną wartość parametru „Pokaż powiadomienie” na „Przy połączeniu/rozłączeniu”. Dzięki temu będziemy wiedzieć kiedy nasze połączenie VPN zostanie zerwane.
A jaki VPN jest najlepszy? – działający
Na koniec warto jeszcze się upewnić, że nasz VPN działa. Po zestawieniu połączenia wejdźmy więc na jakąś stronę weryfikującą adres IP, z którego została ona odwiedzona. Np. https://showmyip.com
Adres IP powinien być zgodny z adresem naszego serwera VPN. W powyższym przykładzie widzimy, że połączenie zostało zidentyfikowane jako wychodzące z Niemiec, a adres IP należy do dostawcy Amazon Technologies.
Zastrzeżenie
Pamiętajcie, że tego typu VPN pozwoli Wam ukryć swoją aktywność przed dostawcą łącza, z którego usług korzystacie w domu, w firmie, czy podczas podróży i łączenia się z hot spotami. Pozwoli też ominąć pewne restrykcje związane z geolokalizacją. Nie zagwarantuje Wam jednak 100% anonimowości. Adres IP waszego serwera w chmurze będzie bowiem powiązany z Waszym kontem klienta u danego dostawcy. Za to konto płacicie zapewne imienną kartą kredytową. Sam VPN (dowolny) to za mało by zapewnić sobie pełną anonimowość i poufność w Internecie.
Natomiast dużą przewagą własnego VPN-a jest to, że połączenia z niego nie będą blokowane przez usługodawców (bądź dyktatorów), którzy nie lubią klientów kryjących się za VPN-em. Serwery znanych dostawców VPN można bowiem zablokować. Gdyby przyszło Wam zwiedzać Rosję bądź Chiny możecie się o tym przekonać na własnej skórze. Połączenia z własnego serwera raczej nikt Wam nie zablokuje. Co więcej, zawsze będziecie mogli wyjaśnić, że łączycie się tylko ze swoją infrastrukturą chmurową – OpenVPN to popularny klient stosowany przez wielu dostawców.
Zostaw e-mail aby otrzymać powiadomienia o nowościach oraz dostęp do wszystkich bonusowych materiałów przygotowanych wyłącznie dla subskrybentów.
Podobny skrypt jest tez dla wireguarda ktory jest lzejszy i szybszy niz openvpn, mozna o tym tez wspomniec. Angristan chyba jest jego autorem.
Dodawanie nowych userow QR codem tez jest ciekawe (np klient na telefonie)
A można na AWS wybrać Polskę jako kraj serveru w chmurze? (tak żeby mieć polskie ip)
AWS nie ma niestety regionu w PL. Ale w wielu innych europejskich miastach tak.
1. Wpisany na stałe w skrypcie dh.pem nie jest tu jakąś tylną furtką? Ja zawsze zmieniam po kilka bajtów w losowych miejscach.
2. Należy zwrócić uwagę na ip przyznawane dla końcówek tunelu. Jest ok, o ile nie będziemy używać więcej niż jednego w tym samym czasie. Warto zmieniać przy każdej instalacji na inne podsieci.