Co tedy je VPN? VPN je zkratka pro Virtual Private Network, neboli virtuální privátní síť, která umožňuje bezpečný přístup k internetu nebo určitým službám i z nedůvěryhodné sítě.
V zásadě je to, jako byste byli fyzicky připojeni k soukromé síti: počítače připojené do VPN mohou mezi sebou přímo komunikovat. Můžete například přistupovat ke svému bankovnímu účtu nebo provádět platby, aniž byste se obávali, že někdo zachytí provoz generovaný vaším zařízením.
OpenVPN je VPN založená na protokolech TLS (Transport Layer Security) a SSL (Secure Sockets Layer). OpenVPN používá digitální certifikáty k ověření totožnosti obou stran, následně je veškerá další komunikace mezi VPN klientem a VPN serverem šifrována, a proto je takové spojení bezpečné.
V tomto návodu vám ukážeme, jak nakonfigurovat VPN pomocí OpenVPN na Ubuntu 18.04.
K následování tohoto návodu budete potřebovat dva servery. Ten druhý slouží jako CA (certifikační autorita) a bude posuzovat platnost certifikátů.
K serveru a CA je nutné se připojit pomocí SSH. Pokud ještě nemáte SSH připojení k dispozici, doporučujeme návod na bezpečné připojení pomocí SSH protokolu.
Instalace OpenVPN
Připojte se na svůj server.
OpenVPN je k dispozici v oficiálním repozitáři Ubuntu, není tedy nutné přidávat nic jiného.
Zadejte příkaz:
sudo apt update
sudo apt install openvpn
Nyní je aplikace OpenVPN úspěšně nainstalována na váš server.
Instalace EasyRSA
Pokračujte stažením EasyRSA na svůj server a také na CA zadáním příkazu níže na obou serverech:
wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.4/EasyRSA-3.0.4.tgz
Poslední verze je ke stažení na https://github.com/OpenVPN/easy-rsa/releases
cd ~
tar xvf EasyRSA-3.0.4.tgz
Název se může lišit v závislosti na stahované verzi.
Konfigurace serveru
Dokončete konfiguraci serveru následujícím příkazem:
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
sudo gzip -d /etc/openvpn/server.conf.gz
sudo nano /etc/openvpn/server.conf
- • Najděte sekci, která odkazuje na HMAC ("tls-auth"). Pokud je řádek zakomentován, odeberte ";",
- • Najděte sekci o šifrování ("cipher"). Pokud je komentována, odeberte ";". Pod existující text přidejte řádek "auth SHA256";
- • Najděte sekci "dh" definující Diffie-Hellman parametry a odeberte "2048" z názvu (výsledkem by mělo být "dh dh.pem");
- • Najděte sekce "user" a "group" a odstraňte ";" pro odkomentování.
Konfigurace EasyRSA na CA
Po instalaci EasyRSA byl na vašem CA serveru vytvořen konfigurační soubor definující proměnné vaší CA. Zadejte příkaz:
cd ~/EasyRSA-3.0.4/
cp vars.example vars
nano vars
Odstraňte znak "#" podle pokynů na obrázku níže:
Spusťte příkaz "easyrsa" skript pro inicializaci Public Key Infrastructure (PKI):
./easyrsa init-pki
./easyrsa build-ca nopass
Pomocí tohoto příkazu budou vytvořeny dva soubory:
- • ca.crt: veřejný CA certifikát používaný servery a klienty k vzájemnému potvrzení, že jsou součástí stejné důvěryhodné sítě,
- • ca.key: soukromý klíč, který CA server používá k podepisování klíčů a certifikátů pro servery a klienty. Tento soubor musí být uložen pouze na CA serveru (který není přístupný třetím stranám). V opačném případě může být ohroženo zabezpečení sítě.
Budete vyzváni k zadání jména. Jméno nevyplňujte a stiskněte klávesu Enter.
Vyžádání certifikátu od CA
Nyní, když je CA server nakonfigurován, nechte váš server vygenerovat soukromý klíč a žádost o certifikát a odeslat je do CA serveru k podpisu:
cd ~/EasyRSA-3.0.4
./easyrsa init-pki
./easyrsa gen-req server nopass
- • server: název serveru. Pro zjednodušení ponechte „server“, v budoucnu se tím vyhnete několika změnám
Právě jste vytvořili soukromý klíč pro server a žádost o certifikát nazvanou "server.req":
sudo cp ~/EasyRSA-v3.0.6/pki/private/server.key /etc/openvpn/
Zkopírujte soubor server.req na CA server:
scp ~/EasyRSA-3.0.4/pki/reqs/server.req user@your_CA_ip:/tmp
Vygenerování a podpis certifikátu
Do složky EasyRSA na vašem CA serveru vložte právě zkopírovaný soubor a podepište jej:
cd ~/EasyRSA-3.0.4/
./easyrsa import-req /tmp/server.req server
./easyrsa sign-req server server
Zadejte “yes” a zmáčkněte Enter.
Přesuňte podepsaný certifikát a ca.crt na váš VPN Server:
scp pki/issued/server.crt user@your_server_ip:/tmp
scp pki/ca.crt user@your_server_ip:/tmp
Na vašem serveru zkopírujte zkopírované soubory do příslušných adresářů:
sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/
cd ~/EasyRSA-3.0.4/
./easyrsa gen-dh
Vygenerujte silný klíč založený na Diffie-Hellman.
openvpn --genkey --secret ta.key
Zkopírujte vytvořené soubory do složky "/etc/openvpn/".
sudo cp ~/EasyRSA-3.0.4/ta.key /etc/openvpn/
sudo cp ~/EasyRSA-3.0.4/pki/dh.pem /etc/openvpn/
Konfigurace klienta
Vytvořte složku pro ukládání certifikátů a klíčů klienta. (Tento návod popisuje postup pouze pro jednoho klienta, nazývá se „klient1“. Operace však musí být opakována pro každého klienta s použitím unikátního jména klienta).
mkdir -p ~/client-configs/keys
chmod -R 700 ~/client-configs
cd ~/EasyRSA-3.0.4/
./easyrsa gen-req client1 nopass
- • zmáčkněte Enter pro přijetí navrhovaného výchozího názvu.
cp pki/private/client1.key ~/client-configs/keys/
- • Zkopírujte klientův klíč do již dříve vytvořené složky.
scp pki/reqs/client1.req user@your_CA_IP:/tmp
- • Odešlete soubor client1.req na CA server
Importujte žádost o certifikát na váš CA server:
cd ~/EasyRSA-3.0.4/
./easyrsa import-req /tmp/client1.req client1
./easyrsa sign-req client client1
Zadejte "yes" pro autorizaci podpisu.
scp pki/issued/client1.crt utente@IP_SERVER:/tmp
Na vašem serveru zkopírujte následující soubory do příslušných složek.
mkdir -p ~/client-configs/keys
chmod -R 700 ~/client-configs
cp /tmp/client1.crt ~/client-configs/keys/
cp ~/EasyRSA-3.0.4/ta.key ~/client-configs/keys/
sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/
Nyní jsou certifikáty i klíče serveru a klienta vytvořeny.
Konfigurace IP routingu and firewallu
Povolte IP forwarding:
sudo nano /etc/sysctl.conf
- • Najděte sekci "net.ipv4.ip_forward" a odeberte "#" k odkomentování řádku.
Změňte pravidla brány firewall, aby správně směrovala připojení klientů.
ip route | grep default
- • Název uložte za "dev" (na obrázku níže je název "eth0")
sudo nano /etc/ufw/before.rules
Přidejte příkazy dle obrázku níže a nahraďte "eth0" názvem svého síťového rozhraní.
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
Uložte a ukončete.
sudo nano /etc/default/ufw
- • Změňte hodnotu parametru "DEFAULT_FORWARD_POLICY" na "ACCEPT".
sudo ufw allow 1194/udp
- • Povolte port 1194 pro UDP traffic.
sudo ufw allow OpenSSH
sudo ufw disable
sudo ufw enable
sudo systemctl start openvpn
sudo systemctl status openvpn
- • Zkontrolujte stav služby VPN.
Spouštět službu při spuštění serveru.
sudo systemctl enable openvpn
mkdir -p ~/client-configs/files
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
nano ~/client-configs/base.conf
Najděte sekci "remote" a ujistěte se, že hodnota odpovídá "remote IP_Server 1194"
- • IP_Server: Zapište IP adresu serveru.
- • 1194: dříve zvolený port
Najděte sekci "proto" a ujistěte se, že je server nastaven na UPD (řádek TCP je okomentován pomocí ";").
Najděte sekce "user" a "group" a odstraňte ";" pro odebrání komentářů.
Najděte sekce "ca.crt" - "client.crt" - "client.key" - "ta.key" a na začátku každého řádku je označte "#".
Najděte sekci "cipher" a přidejte řádek "auth SHA256" pod řádek "cipher AES-256-CBC".
Přidejte řádek „key-direction 1“ v kterémkoli bodě.
Tyto řádky můžete přidat kdykoliv. Pokud je klientem počítač se systémem Linux, nevytvářejte žádné komentáře ("no comments").
Uložte a ukončete.
Generování konfigurace pro klienty
Na vašem serveru vytvořte skript, který automaticky zkompiluje konfiguraci klienta.
nano ~/client-configs/make_config.sh
Zkopírujte a vložte následující text:
#!/bin/bash
KEY_DIR=~/client-configs/keys
OUTPUT_DIR=~/client-configs/files
BASE_CONFIG=~/client-configs/base.conf
cat ${BASE_CONFIG} \
<(echo -e '<ca>') \
${KEY_DIR}/ca.crt \
<(echo -e '</ca>\n<cert>') \
${KEY_DIR}/${1}.crt \
<(echo -e '</cert>\n<key>') \
${KEY_DIR}/${1}.key \
<(echo -e '</key>\n<tls-auth>') \
${KEY_DIR}/ta.key \
<(echo -e '</tls-auth>') \
> ${OUTPUT_DIR}/${1}.ovpn
Uložte a ukončete.
chmod 700 ~/client-configs/make_config.sh
Nyní zkuste vygenerovat „konfiguraci“ klienta.
cd ~/client-configs
sudo ./make_config.sh client1
Bude vytvořen soubor s názvem “client1.ovpn”.
Nyní přeneste tento soubor do zařízení, které chcete používat. Bude využíván softwarem VPN pro připojení.
Zneplatnění certifikátů Klienta
cd EasyRSA-3.0.4/
./easyrsa revoke client1
- • client1: jméno klienta, kterému mají být odebrána povolení.
Zadejte "yes" pro potvrzení.
./easyrsa gen-crl
scp ~/EasyRSA-3.0.4/pki/crl.pem user@IP_Server:/tmp
Generování a odeslání souboru crl.pem na server. Aktualizujte konfiguraci svého serveru pro potvrzení odvolání.
sudo cp /tmp/crl.pem /etc/openvpn
sudo nano /etc/openvpn/server.conf
Na konec souboru přidejte "crl-verify crl.pem".
Uložte a ukončete.
sudo systemctl restart openvpn@server
Restartujte váš server, aby se změny projevily.