OpenVPN
Obsah |
Vo co go
Tenhle canc popisuje jak rozchodit OpenVPN v rezimu client/server, tedy na jeden počítač se připojuje více klientů. Jde také dělat VPN peer2peer, ale to si přečti jinde :)
Pozor!
V aktuální verzi(2.0_rc21) se při použití easy-rsa doporučované v manuálu openvpn nedal navázat tunel pomocí vygenerovaných certifikátů (je tam někde v konfiguraci zakázáno použití self signed certifikátů). Zde popsaný postup funguje spolehlivě.
POZNÁMKA
UDP mód je výkonější na špatných linkách a je vhodný pro tzv. "bridged server", ale lze ho omezit pouze na pevnou hodnotu.
TCP na špatných linkách může zachránit protokoly, které si samy nepotvrzují stav (třeba ms-rpc pro komunikaci s exchange serverem) a dá se omezit dynamicky na FW. Nelze však použít společně s "bridged server" a TCP má o něco větší režiji.
obě strany jednoho tunelu musejí logicky používat shodně UDP či TCP
Instalace
apt-get install openssl openvpn
V /etc/ssl/openssl.conf si změň: (RedHat - /usr/share/ssl/openssl.cnf)
počet dní po které certifikát platí (10let je ok :)
default_days = 3650
změnit na mírnější politiku akceptování certifikátů (pak není CA tak tvrdá na vyplnění žádostí):
policy = policy_anything
VOLITELNÉ
Dále si můžete změnit přednastavené hodnoty sekce [ CA_default ] a [ erq_distinguished_name ] při generování nových žádostí nebo klíčů pak člověk nepapouškuje dokola CZ Czech Celakovice atd..
BEZPEČNÉ
Dokumentace openvpn také doporučuje pro serverové certifikáty jejich označení. Aby bylo možno je značkovat doplňte tuto sekci:
[ server ] basicConstraints=CA:FALSE nsCertType = server nsComment = "OpenSSL Generated Server Certificate" subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer:always
Generování certifikátů
Bez peněz do hospody nelez a bez certifikátu nelez do VPN.-) Pokud nechcete mít svůj server, ale jen se k někomu připojit stačí vytvořit žádost k podpisu a tu si nechat podepsat příslušnou Certifikační autoritou.
Vytvoření certifikační autority
cd /home/CA/ mkdir certs crl newcerts private echo 01 > ./serial touch ./index.txt openssl req -new -x509 -nodes -out cacert.pem -keyout cakey.pem -days 1098
Vytvoření žádosti k podpisu
Ten kdo se chce na VPN připojovat si vygeneruje soukromý klíč a žádost o certifikát. Soukromej klíč si schová, nikomu nedá, uchává v tajnosti. Žádost o certifikát pošle certifikační autoritě, která žádost podepíše a pošle zpátky.
openssl req -new -nodes -out request.pem -keyout key.pem -days 1098
request.pem - to je žádost o certifikát key.pem - soukromý klíč
Potvrzení žádosti certifikační autoritou
openssl ca -in request.pem -out cert.pem
BEZPEČNÉ
(vytvoří označený certifikát pro server)
openssl ca -in request.pem -out cert.pem -extensions server
request.pem - žádost o certifikát cert.pem - vygenerovaný certifikát
Konfigurace
strana serveru
Ještě je potřeba vytvořit Diffie-Hellman soubor (jestli se nepletu, tak je to předpočítaná banda velkejch prvočísel - ale možná se pletu :)
openssl dhparam -out dh1024.pem 1024.
Pro stranu serveru je potřeba vygenerovat soukromej klíč a žádost o certifikát, certifikát podepsat a pak je možné použít dvojici soukromý klíč, certifikát v následujícím configu (/etc/openvpn/openvpn.conf)
UDP verze
mode server tls-server port 1194 dev tap0 user openvpn group openvpn ifconfig 10.253.1.65 255.255.255.224 ifconfig-pool 10.253.1.66 10.253.1.94 255.255.255.224 ifconfig-pool-persist /etc/openvpn/openvpn.leases 0 keepalive 10 120 ca /etc/openvpn/cacert.pem cert /etc/openvpn/cert.pem key /etc/openvpn/key.pem dh /etc/openvpn/dh1024.pem log-append /var/log/openvpn status /var/run/openvpn/vpn.status 10 persist-tun persist-key #comp-lzo verb 1
TCP verze
mode server proto tcp-server tls-server port 1194 dev tap0 user openvpn group openvpn ifconfig 10.253.1.65 255.255.255.224 ifconfig-pool 10.253.1.66 10.253.1.94 255.255.255.224 ifconfig-pool-persist /etc/openvpn/openvpn.leases 0 keepalive 10 120 ca /etc/openvpn/cacert.pem cert /etc/openvpn/cert.pem key /etc/openvpn/key.pem dh /etc/openvpn/dh1024.pem log-append /var/log/openvpn status /var/run/openvpn/vpn.status 10 persist-tun persist-key #comp-lzo verb 1
POZNÁMKA
Místo tap0 lze použít i tap (bez čísla) v tom případě je použito automaticky další volné číslo.
strana klienta
UDP verze
Stejně jako u serveru, i pro klienta je potřeba dvojice soukr. klíč, žádost o certifikát. Žádost o certifikát CA podepíše a soubory se soukr. klíčem, podepsaným certifikátem a certifikátem CA použijeme v configu:
remote vpn.czela.net tls-client dev tap pull mute 10 ca cacert.pem cert cert.pem key key.pem #comp-lzo verb 3
BEZPEČNÉ
Pokud jste generovali označené certifikáty, klientský konfig musí obsahovat tento řádek:
ns-cert-type server
TCP verze
remote vpn.czela.net proto tcp-client tls-client dev tap pull mute 10 ca cacert.pem cert cert.pem key key.pem #comp-lzo verb 3
POZNÁMKA
v některých případech je dobré vědět (hlavně pokud je jedna strana za FW, který nemúžete ovládat), že módy tls a tcp na sobě nejsou závislé, lze použít i kombinace
proto tcp-client tls-server
nebo
proto tcp-server tls-client