vyuka:cviceni:y36sps:zadani-openvpn-lab

  1. zvolte si právě jednoho kamaráda s PC
  2. 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
  3. zprovozněte spojení prostřednictvím openvpn mezi vašimi dvěma PC
  4. na konci si budete pingat z obou PC navzájem na rozhraní dummy0 na druhém PC
  5. 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)
  6. 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 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.
  7. 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.

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).

  1. pingáte kamaráda přes klienta (1.5b)
  2. jste pingán kamarádem přes klienta (1.5b)
  3. pingáte kamaráda přes server (1.5b)
  4. jste pingán kamarádem přes server (1.5b)
  5. cvičící se připojí k vaší VPN podle vašeho návodu (3b)
  6. 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!

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 
  • Nainstalujte balíček openvpn
 apt-get install openvpn

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 1), 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
  • 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 serveru2), máte funkční VPN
  • 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: 3)
crl-verify crl.pem
  • 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"

1)
specifický zejména parametrem nsCertType=server, který je napsaný na certifikátu serveru
2)
v tomto případě 10.8.0.1
3)
se správnou cestou k vašemucrl.pem
  • vyuka/cviceni/y36sps/zadani-openvpn-lab.txt
  • Last modified: 2020/04/14 17:25
  • by kubr