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 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
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 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
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 serveru2), 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: 3)
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 klientclient1
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