Internet | Bezpečnost | VPN

Jak si vytvořit vlastní bezpečné VPN: Zkusili jsme slibný open source WireGuard

  • Poradíme vám, jak si vytvořit vlastní bezpečné VPN
  • Poběží na vašem serveru, takže nemusíte důvěřovat neznámému poskytovateli
  • Technologie WireGuard nabízí pokročilé zabezpečení i rekordní rychlosti

Zabezpečené připojení je stále důležitější a nelze se tak diviti tomu, že se objevilo i obrovské množství poskytovatelů VPN. Problém je, že musíte důvěřovat jejich systému a aplikaci s uzavřeným kódem a nemáte vůbec pod kontrolou, co se vlastně na daných serverech děje. Hlavní výhodou těchto systémů je možnost přepínat mezi servery v různých státech, ale to není otázka zabezpečení, ale spíše možnost jak obcházet například regionální omezení.

My se v tomto článku zaměříme na vytvoření vlastního VPN serveru čistě z bezpečnostního pohledu a postavíme si vše na vlastním řešení a s nejmodernější technologií WireGuard.

Revoluční WireGuard

Zatímco v běžném nasazení vládne poměrně dlouhou systém OpenVPN, který je sice open-source, jeho implementace je ale od roku 2001 velmi nabobtnalá a rychlost poměrně nízká. Linus Torvalds, tvůrce Linuxu, dokonce označil OpenVPN a IPSec za horor.

Snímek obrazovky 2019-02-07 v 19.04.52.jpg

WireGuard je oproti tomu nový VPN systém a protokol, který je rovněž open source, ale je mnohem úspornější (má jen asi 4 500 řádků kódu, tím pádem i bezpečnější z pohledu potenciálního množství děr), používá nejmodernější metody šifrování dat a je extrémně rychlý.

Když opět připomeneme slova Linuse Torvaldse, ten ho doslova označil za programátorské umělecké dílo, které navíc nabízí i pokročilejší zabezpečení. Lze tak předpokládat, že právě WireGuard je budoucnost pro VPN. Některé nezávislé testy ukázaly, že WireGuard je oproti OpenVPN na stejném hardware a připojení i několikanásobně rychlejší. Proto naše vlastní VPN postavíme právě na technologii WireGuard.

Výběr VPS

Abychom mohli postavit VPN, musíte někde mít server s operačním systémem s možností nainstalovat WIreGuard. Samotné VPN má naprosto minimální nároky na hardware, protože slouží jako „průtokové potrubí“ pro data.

Spousta datacenter a poskytovatelů tak nabízí různá minimalistická VPS, která mají jeden procesor (jedno jádro), typicky 512 MB nebo 1 GB operační paměti a SSD s kapacitou kolem 20 GB. To vše lze dnes získat za cenu vyšších desítek korun měsíčně.

Protože nám jde především o rychlost připojení, aby nám VPN nezpomalovalo naše stávající internetové spojení, je nutné pečlivě vybrat i dle tohoto parametru. Vyzkoušel jsem Wedos VPS On, ale ten je limitovaný na 100 Mb/s a 1 Gb/s připojení k této službě zatím neplánují. Ze zahraničních poskytovatelů je bohužel většinou vše pomalé, a to nejen kvůli latenci, ale i z pohledu rychlost stahování a nahrávání. Vyzkoušel i velikány jako Azure, Google nebo Amazon, ale vždy byla rychlost nízká, maximálně kolem pár MB/s.

Světlou výjimkou byl poskytovatel vultr.com (server ve Frankfurtu), u kterého rychlost stahování dosahovala kolem 40 MB/s (asi 320 Mb/s) a latence z mého domova v Praze slušných 13 ms. Pokud vám tedy nevadí zvýšená odezva a raději preferujete zahraniční řešení, mohu dle měření tento server doporučit.

Snímek obrazovky 2019-02-07 v 18.54.34.jpg

Pokud jde o českého poskytovatele, nakonec jsem našel a vybral Forpsi, které za 70 korun měsíčně nabízí jednojádrové VPS s 1 Gb/s připojením (2 TB traffic/měsíc) a 1 GB operační paměti, což jsem nenašel nikde jinde za stejnou či lepší cenu. Pokud víte o něčem lepším, určitě dejte vědět do komentářů.

Základem třeba Ubuntu

Na VPS si můžete nainstalovat obraz dle výběru, jasnou volbou je velmi populární Ubuntu, které je aktuálně ve verzi 18.04. Protože veškerá nastavení budeme dělat jednoduše přes terminál, můžete jednotlivé příkazy kopírovat přímo odsud.

Po inicializaci serveru, který si ideálně vytvořte v českém datacentru (u Forpsi je to CZ1) a jeho spuštění se na něj připojte přes příkaz:

ssh root@ipadresaserveru

A poté zadejte vaše heslo. Pokud jste se přihlásili, můžeme začít.

Nejdříve se vrhneme na aktualizaci samotného operačního systému a jeho základních aplikaci. K tomu slouží dva příkazy:

sudo apt-get update

sudo apt-get upgrade

Instalace WireGuard

Abychom spustili instalaci WireGuard, stačí zadat tyto příkazy:

add-apt-repository ppa:wireguard/wireguard

apt-get install wireguard-dkms wireguard-tools linux-headers-$(uname -r)

Vygenerování klíčů

Pro začátek s použitím jednoho klienta je nutné vygenerovat celkem 4 klíče. Jedná se o Server Public Key, Server Private Key, Client Public Key a Client Private Key.

Nejdříve pro server:

umask 077

wg genkey | tee server_private_key | wg pubkey > server_public_key

A tímto pro klienta:

wg genkey | tee client_private_key | wg pubkey > client_public_key

Abychom v tom měli pořádek, je ideální si někde vytvořit jednoduchý dokument, kde si vše jednoduše napíšeme a zkopírujeme. Zobrazení jednotlivých klíčů provedete pomocí těchto příkazů:

cat server_public_key

cat server_private_key

cat client_public_key

cat client_private_key

Nastavení WireGuard serveru

Nyní se pustím do nastavení serveru WireGuard. Zde bude vkládat jednoduchou šablonu, do které doplníme jen dvě položky - „PrivateKey“ (serverový private klíč) a „PublicKey (klientský public klíč). Otevřeme hlavní konfigurační soubor:

nano /etc/wireguard/wg0.conf

Zde vložte následující kód, kam doplňte pouze váš server_private_key a client_public_key:

[Interface]

Address = 10.100.100.1/24

SaveConfig = true

PrivateKey = 

ListenPort = 51820

PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE



[Peer]

PublicKey = 

AllowedIPs = 10.100.100.2/32

Soubor uložíme a zavřeme.

Přesměrování IP4 datového toku

Nyní je potřeba v Ubuntu nastavit, aby docházelo i k přesměrování datového toku tak, aby klient měl přístup k internetu, který má i server. Nejdříve otevřeme soubor:

nano /etc/sysctl.conf

Trochu níže v souboru se nachází položka net.ipv4.ip_forward=1 u které odstraníme „#“, takže bude aktivní. Soubor opět uložíme a zavřeme. Použijeme tyto příkazy pro reaktivaci:

sysctl -p

echo 1 > /proc/sys/net/ipv4/ip_forward

Spouštíme WireGuard server

Po serverové stránce už máme vše základní nastavené, takže spustíme server WireGuard a nastavíme ho tak, aby se automaticky spustil po startu Ubuntu:

chown -v root:root /etc/wireguard/wg0.conf

chmod -v 600 /etc/wireguard/wg0.conf

wg-quick up wg0

systemctl enable wg-quick@wg0.service

Nyní už máme běžící WireGuard server, který přesměrovává IP4 datový tok a je nastaven na jednoho klienta.

Nastavení klienta

WireGuard nativní aplikace už je k dispozici pro iOS, Android (přes .apk lze instalovat i na Android TV). macOS, pro Windows lze využít TunSafe. Další možnosti jsou na oficiálních stránkách WireGuard.

Nastavení u klienta zahrnuje pouze jediný soubor podobný tomu, který již máme na serveru a má koncovku .conf. Jedná se o jednoduchý textový soubor, který obsahuje tuto šablonu, do které doplníte „PrivateKey“ (klientský privátní klíč), „PublicKey“ (serverový public klíč) a do položky „Endpoint“ doplníme před :51820 ip adresu našeho serveru.

[Interface]

Address = 10.100.100.2/32

PrivateKey =



[Peer]

PublicKey =

Endpoint = :51820

AllowedIPs = 0.0.0.0/0

PersistentKeepalive = 21

Soubor uložte a použijte v dané klientské aplikaci.

Otestování a pokročilejší možnosti

Abychom otestovali, že tunel funguje v pořádku, je třeba aktivovat spojení z klientské aplikace. Například u WireGuard aplikace pro iOS je nutné ještě doplnit DNS (typicky například 1.1.1.1) a vyzkoušet, že jste na internetu skutečně přes ip adresu vašeho VPN serveru. K tomu poslouží web jako třeba www.whatsmyip.org

IMG_0063.png
Ukázka z nastavení klientské aplikace WireGuard pro iOS. Nezapomeňte na DNS

Pokud vidíte ip adresu serveru, máte vyhráno a internet by měl bez problémů fungovat. Výhodou je, že při použití této VPN jsou vaše data šifrována pokročilou technologií a data od vašeho zařízení k cílovému webu nikdo nevidí - ani váš poskytoval internetu doma nebo mobilní operátor. Skrytí dat platí i pro všechny používané aplikace. Jediným slabým článkem je v takovém případě samotné datacentrum, kde běží váš virtuální server, který je ale sám o sobě rovněž zašifrovaný.

Test rychlosti internetu na serveru provedete tímto příkazem:

curl -s https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py | python -

Pokud byste chtěli na váš WireGuard server napojit více zařízení, můžete jednoduše vygenerovat nové klientské klíče a přidat je včetně ip adres do serverového souboru /etc/wireguard/wg0.conf.

Jestliže byste chtěli celý proces ještě více automatizovat pro velký počet zařízení, kdy se vám vygeneruje i spousta pomocných souborů, můžete využít projekt WireGuard Ansible nebo široce použitelný projekt Streisand. Můžete také případně zabezpečit i DNS a nastavit IPv6.

Diskuze (20) Další článek: Google ukončí své webové notifikační centrum napříč svými službami

Témata článku: , , , , , , , , , , , , , , , , , , , , , , , , ,