===== OpenVPN ===== ===== Zadání ===== - zvolte si právě jednoho kamaráda s PC - na svém PC nakonfigurujte rozhraní dummy0 s IP adresou 1.2.X.10/24, kde X je poslední oktet IP adresy vašeho PC - zprovozněte spojení prostřednictvím openvpn mezi vašimi dvěma PC - na konci si budete pingat z obou PC navzájem na rozhraní dummy0 na druhém PC - na každém PC poběží 1x OpenVPN server a 1x OpenVPN klient. Po připojení do VPN se klientovi automaticky nastaví správná cesta (route) - autentizaci budete řešit pomocí SSL certifikátu a navíc sdíleného statického klíče (viz howto). Funkčnost tohoto prokážete tak, že si stáhnete [[csr|tuto]] žádost, podepíšete jí a nakopírujete na PC cvičícího společně s konfiguračním souborem a instrukcemi, jak se má připojit z Ubuntu (které dobře znáte) na váš server. Cvičící přirozeně bude pingat IP vašeho dummy interface, aniž by musel změnit konfiguraci na svém PC. - po úspěšném připojení cvičícího (potvrdí on) revokujete jeho klientský certifikát a výsledkem bude, že se k VPN sice připojí (na úrovni IP), ale neautentizuje k použití VPN. ===== Bodování ===== Na splnění tohoto zadání máte 2 cvičení. Kdo zmákne celý úkol za 1 cvičení, obdrží bonusový úkol za dalších 10 bodů (bude upřesněno). - pingáte kamaráda přes klienta (1.5b) - jste pingán kamarádem přes klienta (1.5b) - pingáte kamaráda přes server (1.5b) - jste pingán kamarádem přes server (1.5b) - cvičící se připojí k vaší VPN podle vašeho návodu (3b) - cvičící se nepřipojí po revokaci (1b) Bonus za hotovo na 1 cvičení: 2b + bonus level (další openvpn cvičení) Na poslední 2 položky máte pouze jediný pokus! ===== Nápověda ===== * {{:vyuka:cviceni:y36sps:openvpn.pdf|Situace - PDF}} * {{:vyuka:cviceni:y36sps:openvpn.odp|Situace - ODP (OpenOffice, s "animací")}} ==== Dummy interface ==== dummy0 je virtuální rozhraní, které fyzicky není, ale lokálně jich můžete vytvořit neomezený počet a každému dát ip adresu. V Debianu (ubuntu) je nutné nahrát do jádra modul: modprobe dummy A pak už jen konfigurovat ipčka, např. ifconfig dummy0 1.2.3.4 netmask 255.255.255.0 ==== Instalace ==== * Nainstalujte balíček ''openvpn'' apt-get install openvpn ==== Vygenerování certifikátů ==== **Tuto část nepotřebujete, protože máte v zadání použití vlastní CA. Tento návod necháváme jako ilustraci.** * z ''/usr/share/doc/openvpn/examples/easy-rsa/2.0'' zkopírujte toolkit pro správu certifikátů do /etc/openvpn cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0 /etc/openvpn/easy-rsa * Upravte soubor ''/etc/openvpn/easy-rsa/vars'' podle vašich požadavků, zejména informace o generovaných certifikátech * Načtěte proměnné prostředí ze souboru ''vars'' cd /etc/openvpn/easy-rsa/ . vars * Inicializujte úložiště certifikátů (vyvoří se adresář keys a v něm registr vydaných certifikátů, serial apod..) ./clean-all * Vygenerujte si parametry pro Diffie-Hellman výměnu klíčů ./build-dh * Vygenerujte si certifikát certifikační autority, jako common name zvolte své jméno ./build-ca * Vygenerujte klíče a certifikát pro server ((specifický zejména parametrem nsCertType=server, který je napsaný na certifikátu serveru)), tento klíč se bude jmenovat "server" ./build-key-server server * Vygenerujte si dva klientské certifikáty ./build-key client1 ./build-key client2 * Vygenerujte si klíč pro autentizaci sdíleným klíčem openvpn --genkey --secret keys/ta.key ==== Konfigurace ==== * Nyní máte vytvořenou certifikační autoritu pro vaší VPN, jeden serverový klíč a dva klientské klíče. Dále máte vygenerovaný sdílený klíč pro všechny klienty VPN. Sdílený klíč se generuje proto, že autentizace sdíleným klíčem je méně náročná a slouží jako filtr proto, aby se útočník nemohl pokusit zahltit server příliš velkým počtem pokusů o TLS autentizaci. K té dojde až po úspěšné autentizaci sdíleným klíčem * Zkopírujte si ukázkový konfigurační soubor serveru do ''/etc/openvpn/'' cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn cd /etc/openvpn/ gunzip server.conf.gz * Projděte si rozbalený soubor a zkuste si ho nakonfigurovat. Důležité je * Použít tap interface * nastavit cesty k certifikátu CA a serveru, k privátnímu klíči serveru a sdílenému klíči (ta.key) * Nastavit si IP rozsah pro novou VPN * Příklad: port 1194 proto udp dev tap ca ca.crt cert server.crt key server.key # This file should be kept secret dh dh1024.pem server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt client-config-dir ccd ;push "redirect-gateway def1 bypass-dhcp" keepalive 10 120 tls-auth ta.key 0 # This file is secret comp-lzo user nobody group nogroup persist-key persist-tun status openvpn-status.log verb 3 * Nyní nakonfigurujte klienta pro vaší VPN na počítači kamaráda. Konfiguraci uložte do ''/etc/openvpn/jmeno.conf'' * Ukázková konfigurace, ze které můžete vycházet: client dev tap proto udp remote my-server-1 1194 resolv-retry infinite nobind user nobody group nogroup persist-key persist-tun ca ca.crt cert client.crt key client.key ns-cert-type server tls-auth ta.key 1 comp-lzo verb 3 * VPN můžete startovat a zastavovat pomocí příkazů: # start /etc/init.d/openvpn start jmeno # stop /etc/init.d/openvpn stop jmeno * V případě problémů, hledejte hlášky od VPN v log souboru ''/var/log/syslog'' * Pokud Vám funguje ping na VPN adresu vašeho serveru((v tomto případě ''10.8.0.1'')), máte funkční VPN ==== Revokace klientského certifikátu ==== * Rozhodli jsme se, že client1 již nemá mít dále přístup k naší VPN a chceme mu zablokovat přístup. To se dosáhne revokací jeho certifikátu a konfigurací serveru, ať kontroluje seznam revokovaných certifikátů * revokujte certifikát pro client1 cd /etc/openvpn/easy-rsa . vars ./revoke-full client1 * Pokud dostanete hlášku podobnou této, znamená to, že certifikát byl úspěšně revokován. error 23 at 0 depth lookup:certificate revoked * V adresáři keys vznikl soubor ''crl.pem'', který obsahuje seznam revokovaných certifikátů, ten teď musíme předat VPN serveru ať může odmítat spojení s revokovanými certifikáty * Toho se dá dosáhnout přidáním takovéhoto řádku do konfigurace serveru: ((se správnou cestou k vašemu''crl.pem'')) crl-verify crl.pem ==== Per-client konfigurace ==== * Pokud potřebujete použít pro každého klienta trochu odlišnou konfiguraci, je možné toto nakonfigurovat pro VPN server. * Můžete to chtít, pokud třeba konfigurujete statické IP adresy pro klienty VPN nebo potřebujete nastavit speciální pravidla pro routování v závislosti na tom, který klient se připojuje * Načtení specifické konfigurace pro klienty zabezpečuje direktiva v konfiguraci serveru: client-config-dir ccd * Vytvořte si adresář ''/etc/openvpn/ccd'' a v něm pro každého klienta, pro kterého potřebujete upravit konfiguraci vytvořte soubor se stejným názvem jako Common Name certifikátu klienta. Pokud například vyžadujete, aby klient ''client1'' vždy po připojení k VPN přesměroval veškerou komunikaci do internetu přes tuto VPN, vytvořte soubor ''/etc/openvpn/ccd/client1'' s tímto obsahem: push "redirect-gateway" ==== Další zdroje ==== * Další detaily k možnostem konfigurace OpenVPN naleznete v oficiálním HOWTO: http://openvpn.net/index.php/open-source/documentation/howto.html * [[https://www.root.cz/clanky/openvpn-vpn-jednoduse/|OpenVPN – VPN jednoduše (Radek Hladík)]] * [[https://www.root.cz/clanky/nasazujeme-openvpn-snadno-a-rychle-navod/|Nasazujeme OpenVPN snadno a rychle (Petr Krčmář)]] * [[https://www.root.cz/clanky/openvpn-pro-mirne-pokrocile/|OpenVPN pro mírně pokročilé (Dan Ohnesorg)]] * [[https://www.root.cz/zpravicky/jak-na-openvpn-server/|Jak na OpenVPN server (Jan Fikar)]] * [[https://www.youtube.com/watch?v=uUbgt9FLrvk|LinuxDays 2016 - Tinc VPN - jak snadno najít toho pravého (Michal Halenka)]] * [[https://www.youtube.com/watch?v=xebLlFG2XlY|WireGuard (Jan Baier)]] * [[https://www.youtube.com/watch?v=KZC_XcG4lmo|LinuxDays 2017 - IPv6 tunely pomocí OpenVPN (Ondřej Caletka)]]