===== 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)]]