Ať už chcete přistupovat k internetu bezpečně a bezpečně, když jste připojeni k nedůvěryhodné veřejné síti Wi-Fi, obejít obsah s geografickým omezením nebo umožnit svým spolupracovníkům, aby se při práci na dálku bezpečně připojili k vaší firemní síti, nejlepším řešením je použití VPN.
Síť VPN vám umožňuje připojit se ke vzdáleným serverům VPN, díky čemuž je vaše připojení šifrované a zabezpečené a můžete anonymně procházet web tím, že vaše data o provozu uchová v soukromí.
Existuje mnoho komerčních poskytovatelů VPN, ze kterých si můžete vybrat, ale nikdy si nemůžete být skutečně jisti, že poskytovatel vaši aktivitu nezaznamenává. Nejbezpečnější možností je nastavit si vlastní VPN server.
Tento tutoriál vás provede procesem nastavení vašeho vlastního serveru VPN instalací a konfigurací OpenVPN na Ubuntu 18.04. Ukážeme si také, jak generovat klientské certifikáty a vytvářet konfigurační soubory
OpenVPN je plně funkční řešení VPN s otevřeným zdrojovým kódem Secure Socket Layer (SSL). Implementuje zabezpečené síťové rozšíření OSI vrstvy 2 nebo 3 pomocí protokolu SSL/TLS.
Předpoklady #
K dokončení tohoto kurzu budete potřebovat:
- Sudo přístup k serveru Ubuntu 18.04 pro hostování vaší instance OpenVPN.
- Server by měl mít nakonfigurován základní firewall UFW.
- Samostatný vyhrazený počítač, který bude sloužit jako vaše CA (certifikační autorita). Pokud nechcete pro svůj CA používat vyhrazený počítač, můžete si vytvořit CA na svém OpenVPN serveru nebo na místním počítači. Jakmile dokončíte vytváření CA, doporučujeme přesunout adresář CA někam do zabezpečeného prostředí nebo offline.
Tento tutoriál předpokládá, že CA je na samostatném počítači Ubuntu 18.04. Stejné kroky (s malými úpravami) budou platit, pokud svůj server používáte jako CA.
Důvodem, proč používáme samostatný počítač CA, je zabránit útočníkům proniknout na server. Pokud se útočníkovi podaří získat přístup k soukromému klíči CA, mohl by jej použít k podepsání nových certifikátů, které mu umožní přístup k serveru VPN.
Budování CA s EasyRSA #
Při nastavování nového serveru OpenVPN je prvním krokem vytvoření infrastruktury veřejného klíče (PKI). K tomu budeme muset vytvořit následující:
- Certifikát certifikační autority (CA) a soukromý klíč.
- Samostatný pár certifikátu a soukromého klíče pro server vydaný naším CA.
- Samostatný pár certifikátu a soukromého klíče pro každého klienta vydaný naším CA.
Jak je uvedeno v předpokladech z bezpečnostních důvodů, vybudujeme CA na samostatném počítači.
K vytvoření CA, žádostí o certifikáty a podepisování certifikátů použijeme nástroj CLI s názvem EasyRSA.
Na svém počítači CA proveďte následující kroky .
-
Nejprve si stáhněte nejnovější verzi EasyRSA z repozitáře projektu Github pomocí následujícího wgetcommand:
cd && wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.5/EasyRSA-nix-3.0.5.tgz
-
Po dokončení stahování rozbalte archiv pomocí:
tar xzf EasyRSA-nix-3.0.5.tgz
-
Přepněte se do adresáře EasyRSA a vytvořte konfigurační soubor s názvem
vars
zkopírovánímvars.example
soubor:cd ~/EasyRSA-3.0.5/
cp vars.example vars
-
Otevřete soubor a odkomentujte a aktualizujte následující položky, aby odpovídaly vašim informacím.
~/EasyRSA-3.0.5/varsnano ~/EasyRSA-3.0.5/vars
set_var EASYRSA_REQ_COUNTRY "US" set_var EASYRSA_REQ_PROVINCE "Pennsylvania" set_var EASYRSA_REQ_CITY "Pittsburgh" set_var EASYRSA_REQ_ORG "Linuxize" set_var EASYRSA_REQ_EMAIL "[email protected]" set_var EASYRSA_REQ_OU "Community"
-
Před vygenerováním páru klíčů CA musíme nejprve inicializovat nové PKI pomocí:
./easyrsa init-pki
init-pki complete; you may now create a CA or requests. Your newly created PKI dir is: /home/causer/EasyRSA-3.0.5/pki
-
Dalším krokem je sestavení CA:
./easyrsa build-ca
Pokud nechcete být vyzváni k zadání hesla při každém podepisování certifikátů, spusťte
build-ca
pomocí příkazunopass
možnost:./easyrsa build-ca nopass
.... Enter PEM pass phrase: Verifying - Enter PEM pass phrase: ----- ... ----- Common Name (eg: your user, host, or server name) [Easy-RSA CA]: CA creation complete and you may now import and sign cert requests. Your new CA certificate file for publishing is at: /home/causer/EasyRSA-3.0.5/pki/ca.crt
Budete požádáni o nastavení hesla pro klíč CA a zadání běžného názvu vaší CA.
Po dokončení skript vytvoří dva soubory — veřejný certifikát CA
ca.crt
a soukromý klíč CAca.key
.Nyní, když je vytvořena certifikační autorita (CA), můžete ji použít k podepisování žádostí o certifikát pro jeden nebo více serverů a klientů OpenVPN.
Instalace OpenVPN a EasyRSA #
Naším dalším krokem je instalace balíčku OpenVPN, který je k dispozici v repozitářích Ubuntu, a stažení nejnovější verze EasyRSA.
Následující kroky se provádějí na serveru OpenVPN .
-
Instalace OpenVPN je docela přímočará, stačí spustit následující příkazy na serveru OpenVPN :
sudo apt update
sudo apt install openvpn
-
Stáhněte si nejnovější verzi EasyRSA:
cd && wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.5/EasyRSA-nix-3.0.5.tgz
Po dokončení stahování zadejte následující příkaz pro rozbalení archivu:
tar xzf EasyRSA-nix-3.0.5.tgz
Přestože jsme již inicializovali PKI na počítači CA, musíme také vytvořit nové PKI na serveru OpenVPN. Chcete-li to provést, použijte stejné příkazy jako dříve:
cd ~/EasyRSA-3.0.5/
./easyrsa init-pki
Pokud vás stále zajímá, proč potřebujeme dvě instalace EasyRSA, je to proto, že tuto instanci EasyRSA použijeme ke generování požadavků na certifikát, které budou podepsány pomocí instance EasyRSA na počítači CA .
Může to znít složitě a trochu matoucí, ale jakmile si přečtete celý tutoriál, uvidíte, že to opravdu není složité.
Vytváření klíčů Diffie-Hellman a HMAC #
V této části vygenerujeme silný klíč Diffie-Hellman, který bude použit během výměny klíčů, a soubor podpisu HMAC pro přidání další vrstvy zabezpečení do připojení.
-
Nejprve přejděte do adresáře EasyRSA na vašem serveru OpenVPN .
cd ~/EasyRSA-3.0.5/
-
Vygenerujte klíč Diffie-Hellman:
./easyrsa gen-dh
Skript vygeneruje 2048bitové parametry DH. To může nějakou dobu trvat, zvláště na serverech s malými prostředky. Po dokončení se na obrazovce vytiskne následující zpráva:
DH parameters of size 2048 created at /home/serveruser/EasyRSA-3.0.5/pki/dh.pem
Zkopírujte
dh.pem
soubor do/etc/openvpn
adresář:sudo cp ~/EasyRSA-3.0.5/pki/dh.pem /etc/openvpn/
-
Vygenerujte podpis HMAC:
openvpn --genkey --secret ta.key
Po dokončení zkopírujte
ta.key
soubor do/etc/openvpn
adresář:sudo cp ~/EasyRSA-3.0.5/ta.key /etc/openvpn/
Vytváření certifikátu serveru a soukromého klíče #
Tato část popisuje, jak vygenerovat soukromý klíč a žádost o certifikát pro server OpenVPN.
-
Přejděte do adresáře EasyRSA na vašem serveru OpenVPN a vygenerujte nový soukromý klíč pro server a soubor žádosti o certifikát:
cd ~/EasyRSA-3.0.5/
./easyrsa gen-req server1 nopass
Používáme
nopass
argument, protože chceme spustit server OpenVPN bez zadání hesla. Také v tomto příkladu používámeserver1
jako identifikátor názvu serveru (entity). Pokud pro svůj server zvolíte jiný název, nezapomeňte upravit níže uvedené pokyny, kde se název serveru používá.Příkaz vytvoří dva soubory, soukromý klíč (
server1.key
) a soubor žádosti o certifikát (server1.req
).----- Common Name (eg: your user, host, or server name) [server1]: Keypair and certificate request completed. Your files are: req: /home/serveruser/EasyRSA-3.0.5/pki/reqs/server1.req key: /home/serveruser/EasyRSA-3.0.5/pki/private/server1.key
-
Zkopírujte soukromý klíč do
/etc/openvpn
adresář:sudo cp ~/EasyRSA-3.0.5/pki/private/server1.key /etc/openvpn/
-
Přeneste soubor žádosti o certifikát do počítače CA:
scp ~/EasyRSA-3.0.5/pki/reqs/server1.req causer@your_ca_ip:/tmp
V tomto příkladu používáme
scp
k přenosu souboru můžete také použítrsync
přes ssh nebo jinou zabezpečenou metodu. -
Přihlaste se ke svému počítači CA , přepněte do adresáře EasyRSA a importujte soubor žádosti o certifikát:
cd ~/EasyRSA-3.0.5
./easyrsa import-req /tmp/server1.req server1
První argument je cesta k souboru žádosti o certifikát a druhý je krátký název serveru (entity). V našem případě je název serveru
server1
.The request has been successfully imported with a short name of: server1 You may now use this name to perform signing operations on this request.
Tento příkaz pouze zkopíruje soubor požadavku do
pki/reqs
adresář. -
Ještě v adresáři EasyRSA na počítači CA spusťte následující příkaz k podepsání požadavku:
cd ~/EasyRSA-3.0.5
./easyrsa sign-req server server1
První argument může být buď
server
neboclient
a druhý je krátký název serveru (entity).Budete vyzváni k ověření, že požadavek pochází z důvěryhodného zdroje. Zadejte
yes
a stiskněteenter
pro potvrzení:You are about to sign the following certificate. Please check over the details shown below for accuracy. Note that this request has not been cryptographically verified. Please be sure it came from a trusted source or that you have verified the request checksum with the sender. Request subject, to be signed as a server certificate for 1080 days: subject= commonName = server1 Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes ...
Pokud je váš klíč CA chráněn heslem, budete vyzváni k zadání hesla. Po ověření skript vygeneruje certifikát SSL a vytiskne k němu úplnou cestu.
... Certificate is to be certified until Sep 17 10:54:48 2021 GMT (1080 days) Write out database with 1 new entries Data Base Updated Certificate created at: /home/causer/EasyRSA-3.0.5/pki/issued/server1.crt
-
Dalším krokem je přenos podepsaného certifikátu
server1.crt
aca.crt
soubory zpět na váš server OpenVPN. Opět můžete použítscp
,rsync
nebo jakoukoli jinou zabezpečenou metodou:scp ~/EasyRSA-3.0.5/pki/issued/server1.crt serveruser@your_server_ip:/tmp
scp ~/EasyRSA-3.0.5/pki/ca.crt serveruser@your_server_ip:/tmp
-
Přihlaste se ke svému serveru OpenVPN a přesuňte soubor
server1.crt
aca.crt
soubory do/etc/openvpn/
adresář:sudo mv /tmp/{server1,ca}.crt /etc/openvpn/
Po dokončení kroků uvedených v této části byste měli mít na svém serveru OpenVPN následující nové soubory :
/etc/openvpn/ca.crt
/etc/openvpn/dh.pem
/etc/openvpn/ta.key
/etc/openvpn/server1.crt
/etc/openvpn/server1.key
Konfigurace služby OpenVPN #
Nyní, když máte certifikát serveru podepsaný vaší CA a přenesený na váš server OpenVPN , je čas nakonfigurovat službu OpenVPN.
Jako výchozí bod použijeme vzorový konfigurační soubor dodaný s instalačním balíčkem OpenVPN a poté do něj přidáme vlastní možnosti konfigurace.
Začněte rozbalením konfiguračního souboru do /etc/openvpn/
adresář:
sudo sh -c "gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server1.conf"
Otevřete soubor pomocí svého oblíbeného textového editoru:
sudo nano /etc/openvpn/server1.conf
-
Najděte direktivy Certificate, Key a DH parametrů a změňte názvy souborů:
/etc/openvpn/server1.confcert server1.crt key server1.key dh dh.pem
-
Chcete-li přesměrovat klientský provoz přes VPN, vyhledejte
/etc/openvpn/server1.confredirect-gateway
a odkomentujte jej adhcp-option
možnosti:push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 208.67.220.220"
Ve výchozím nastavení se používají překladače OpenDNS. Můžete to změnit a použít CloudFlare, Google nebo jakýkoli jiný překladač DNS, který chcete.
-
Najděte
/etc/openvpn/server1.confuser
agroup
direktivy a odkomentujte tato nastavení odstraněním „;
” na začátku každého řádku:user nobody group nogroup
-
Připojte následující řádek na konec souboru. Tato direktiva změní algoritmus ověřování zpráv (HMAC) z SHA1 na SHA256
/etc/openvpn/server1.confauth SHA256
Jakmile budete hotovi, konfigurační soubor serveru (bez komentářů) by měl vypadat nějak takto:
/etc/openvpn/server1.confport 1194
proto udp
dev tun
ca ca.crt
cert server1.crt
key server1.key # This file should be kept secret
dh dh.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
keepalive 10 120
tls-auth ta.key 0 # This file is secret
cipher AES-256-CBC
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
verb 3
explicit-exit-notify 1
auth SHA256
Spouštění služby OpenVPN #
V tomto tutoriálu jsme použili server1.conf
jako konfigurační soubor. Chcete-li spustit službu OpenVPN s touto konfigurací, musíme zadat název konfiguračního souboru za názvem souboru jednotky systemd:
Na vašem serveru OpenVPN spusťte následující příkaz pro spuštění služby OpenVPN:
sudo systemctl start openvpn@server1
Ověřte, zda byla služba úspěšně spuštěna zadáním:
sudo systemctl status openvpn@server1
Pokud je služba aktivní a běží, výstup bude vypadat nějak takto:
● [email protected] - OpenVPN connection to server1
Loaded: loaded (/lib/systemd/system/[email protected]; disabled; vendor preset: enabled)
Active: active (running) since Mon 2018-10-08 20:11:57 UTC; 6min ago
Docs: man:openvpn(8)
https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
https://community.openvpn.net/openvpn/wiki/HOWTO
Main PID: 26739 (openvpn)
Status: "Initialization Sequence Completed"
Povolte automatické spouštění služby při spouštění pomocí:
sudo systemctl enable openvpn@server1
Created symlink /etc/systemd/system/multi-user.target.wants/[email protected] → /lib/systemd/system/[email protected].
Pokud se nepodaří spustit službu OpenVPN, zkontrolujte protokoly pomocí sudo journalctl -u openvpn@server1
OpenVPN Server vytvoří nové zařízení tun tun0
. Chcete-li zkontrolovat, zda je zařízení dostupné, použijte následující příkaz ip:
ip a show tun0
Výstup by měl vypadat nějak takto:
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq state UNKNOWN group default qlen 100
link/none
inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
valid_lft forever preferred_lft forever
inet6 fe80::1627:9a20:bca8:e6a5/64 scope link stable-privacy
valid_lft forever preferred_lft forever
V tomto okamžiku je váš server OpenVPN nakonfigurován a běží správně.
Konfigurace brány firewall a sítě serveru #
Abychom mohli správně předávat síťové pakety, musíme povolit předávání IP.
Následující kroky se provádějí na serveru OpenVPN .
Otevřete /etc/sysctl.conf
soubor a přidejte nebo odkomentujte řádek, který zní net.ipv4.ip_forward = 1
:
sudo nano /etc/sysctl.conf
/etc/sysctl.conf# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1
Až budete hotovi, uložte a zavřete soubor.
Použijte nová nastavení spuštěním následujícího příkazu:
sudo sysctl -p
net.ipv4.ip_forward = 1
Pokud jste dodrželi předpoklady, měli byste již mít na svém serveru UFW firewall spuštěný.
Nyní musíme přidat pravidla brány firewall, abychom umožnili maskování. To umožní provozu opustit VPN a vašim klientům VPN poskytne přístup k internetu.
Před přidáním pravidel musíte znát veřejné síťové rozhraní vašeho Ubuntu OpenVPN Server. Rozhraní můžete snadno najít spuštěním následujícího příkazu:
ip -o -4 route show to default | awk '{print $5}'
V našem případě se rozhraní jmenuje ens3
jak je znázorněno na výstupu níže. Vaše rozhraní bude mít pravděpodobně jiný název.
ens3
Ve výchozím nastavení jsou při použití UFW předané pakety zahazovány. Budeme to muset změnit a dát našemu firewallu pokyn, aby povolil přeposílání paketů.
Otevřete konfigurační soubor UFW, vyhledejte DEFAULT_FORWARD_POLICY
a změňte hodnotu z DROP
ACCEPT
:
sudo nano /etc/default/ufw
/etc/default/ufw...
# Set the default forward policy to ACCEPT, DROP or REJECT. Please note that
# if you change this you will most likely want to adjust your rules
DEFAULT_FORWARD_POLICY="ACCEPT"
...
Dále musíme nastavit výchozí politiku pro POSTROUTING
řetěz v nat stole a nastavte pravidlo maškarády.
Chcete-li tak učinit, otevřete /etc/ufw/before.rules
soubor a připojte řádky zvýrazněné žlutě, jak je znázorněno níže.
sudo nano /etc/ufw/before.rules
Nezapomeňte nahradit ens3
v -A POSTROUTING
řádek, který odpovídá názvu rozhraní veřejné sítě, které jste našli v předchozím příkazu. Vložte řádky za poslední řádek začínající COMMIT
.
...
# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT
#NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Forward traffic through ens3 - Change to public network interface
-A POSTROUTING -s 10.8.0.0/16 -o ens3 -j MASQUERADE
# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT
Až budete hotovi, uložte a zavřete soubor.
Potřebujeme také otevřít UDP provoz na portu 1194
což je výchozí port OpenVPN. Chcete-li tak učinit, spusťte následující příkaz:
sudo ufw allow 1194/udp
V případě, že jste zapomněli otevřít port SSH, abyste se vyhnuli uzamčení, spusťte následující příkaz k otevření portu:
sudo ufw allow OpenSSH
Nakonec znovu načtěte pravidla UFW vypnutím a opětovným povolením UFW:
sudo ufw disable
sudo ufw enable
Chcete-li ověřit změny, spusťte následující příkaz pro seznam pravidel POSTROUTING:
sudo iptables -nvL POSTROUTING -t nat
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 MASQUERADE all -- * ens3 10.8.0.0/16 0.0.0.0/0
Vytvoření klientské konfigurační infrastruktury #
V tomto tutoriálu vytvoříme samostatný certifikát SSL a vygenerujeme jiný konfigurační soubor pro každého klienta VPN.
Klientský soukromý klíč a žádost o certifikát lze vygenerovat na klientském počítači nebo na serveru. Pro jednoduchost vygenerujeme žádost o certifikát na serveru a poté ji odešleme CA k podpisu.
Celý proces generování klientského certifikátu a konfiguračního souboru je následující:
- Vygenerujte soukromý klíč a žádost o certifikát na serveru OpenVPN.
- Odešlete požadavek na počítač CA, který má být podepsán.
- Zkopírujte podepsaný certifikát SSL na server OpenVPN a vygenerujte konfigurační soubor.
- Odešlete konfigurační soubor do počítače klienta VPN.
Začněte vytvořením sady adresářů pro uložení souborů klientů:
mkdir -p ~/openvpn-clients/{configs,base,files}
base
adresář bude ukládat základní soubory a konfiguraci, které budou sdíleny mezi všemi klientskými soubory.configs
adresář bude ukládat vygenerovanou konfiguraci klienta.files
adresář bude uchovávat pár certifikát/klíč specifický pro klienta.
Zkopírujte ca.crt
a ta.key
soubory do ~/openvpn-clients/base
adresář:
cp ~/EasyRSA-3.0.5/ta.key ~/openvpn-clients/base/
cp /etc/openvpn/ca.crt ~/openvpn-clients/base/
Poté zkopírujte ukázkový konfigurační soubor klienta VPN do souboru client-~/openvpn-clients/base
adresář. Tento soubor použijeme jako základní konfiguraci:
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/openvpn-clients/base/
Nyní musíme soubor upravit tak, aby odpovídal nastavení a konfiguraci našeho serveru. Otevřete konfigurační soubor pomocí textového editoru:
nano ~/openvpn-clients/base/client.conf
-
Najděte vzdálenou direktivu a změňte výchozí zástupný symbol s veřejnou IP adresou vašeho OpenVPN serveru:
~/openvpn-clients/base/client.conf# The hostname/IP and port of the server. # You can have multiple remote entries # to load balance between the servers. remote YOUR_SERVER_IP 1194
-
Najděte a okomentujte
~/openvpn-clients/base/client.confca
,cert
akey
směrnice. Certifikáty a klíče budou přidány do konfiguračního souboru:# SSL/TLS parms. # See the server config file for more # description. It's best to use # a separate .crt/.key file pair # for each client. A single ca # file can be used for all clients. # ca ca.crt # cert client.crt # key client.key
-
Připojte na konec souboru následující řádek, aby odpovídal nastavení serveru:
~/openvpn-clients/base/client.confauth SHA256
Jakmile budete hotovi, konfigurační soubor serveru by měl vypadat nějak takto:
~/openvpn-clients/base/client.confclient
dev tun
proto udp
remote YOUR_SERVER_IP 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-CBC
verb 3
auth SHA256
key-direction 1
Dále vytvořte jednoduchý bash skript, který sloučí základní konfiguraci a soubory s klientským certifikátem a klíčem, a uloží vygenerovanou konfiguraci do ~/openvpn-clients/configs
adresář.
Otevřete textový editor a vytvořte následující skript:
nano ~/openvpn-clients/gen_config.sh
~/openvpn-clients/gen_config.sh#!/bin/bash
FILES_DIR=$HOME/openvpn-clients/files
BASE_DIR=$HOME/openvpn-clients/base
CONFIGS_DIR=$HOME/openvpn-clients/configs
BASE_CONF=${BASE_DIR}/client.conf
CA_FILE=${BASE_DIR}/ca.crt
TA_FILE=${BASE_DIR}/ta.key
CLIENT_CERT=${FILES_DIR}/${1}.crt
CLIENT_KEY=${FILES_DIR}/${1}.key
# Test for files
for i in "$BASE_CONF" "$CA_FILE" "$TA_FILE" "$CLIENT_CERT" "$CLIENT_KEY"; do
if [[ ! -f $i ]]; then
echo " The file $i does not exist"
exit 1
fi
if [[ ! -r $i ]]; then
echo " The file $i is not readable."
exit 1
fi
done
# Generate client config
cat > ${CONFIGS_DIR}/${1}.ovpn <<EOF
$(cat ${BASE_CONF})
<key>
$(cat ${CLIENT_KEY})
</key>
<cert>
$(cat ${CLIENT_CERT})
</cert>
<ca>
$(cat ${CA_FILE})
</ca>
<tls-auth>
$(cat ${TA_FILE})
</tls-auth>
EOF
Uložte soubor a udělejte jej spustitelný spuštěním následujícího chmod
příkaz:
chmod u+x ~/openvpn-clients/gen_config.sh
Vytvoření soukromého klíče klientského certifikátu a konfigurace #
Proces generování klientského soukromého klíče a žádosti o certifikát je stejný jako při generování serverového klíče a žádosti o certifikát.
Jak jsme již zmínili v předchozí části, klientský soukromý klíč a žádost o certifikát vygenerujeme na serveru OpenVPN. V tomto příkladu bude název prvního klienta VPN client1
.
-
Přejděte do adresáře EasyRSA na vašem serveru OpenVPN a vygenerujte nový soukromý klíč a soubor žádosti o certifikát pro klienta:
cd ~/EasyRSA-3.0.5/
./easyrsa gen-req client1 nopass
Příkaz vytvoří dva soubory, soukromý klíč (
client1.key
) a soubor žádosti o certifikát (client1.req
).Common Name (eg: your user, host, or server name) [client1]: Keypair and certificate request completed. Your files are: req: /home/serveruser/EasyRSA-3.0.5/pki/reqs/client1.req key: /home/serveruser/EasyRSA-3.0.5/pki/private/client1.key
-
Zkopírujte soukromý klíč
client1.key
do~/openvpn-clients/files
adresář, který jste vytvořili v předchozí části:cp ~/EasyRSA-3.0.5/pki/private/client1.key ~/openvpn-clients/files/
-
Přeneste soubor žádosti o certifikát do počítače CA:
scp ~/EasyRSA-3.0.5/pki/reqs/client1.req causer@your_ca_ip:/tmp
V tomto příkladu používáme
scp
k přenosu souboru můžete také použítrsync
přes ssh nebo jinou zabezpečenou metodu. -
Přihlaste se ke svému počítači CA , přepněte do adresáře EasyRSA a importujte soubor žádosti o certifikát:
cd ~/EasyRSA-3.0.5
./easyrsa import-req /tmp/client1.req client1
První argument je cesta k souboru žádosti o certifikát a druhý je jméno klienta.
The request has been successfully imported with a short name of: client1 You may now use this name to perform signing operations on this request.
-
Z adresáře EasyRSA na počítači CA spusťte následující příkaz k podepsání požadavku:
cd ~/EasyRSA-3.0.5
./easyrsa sign-req client client1
Budete vyzváni k ověření, že požadavek pochází z důvěryhodného zdroje. Zadejte
yes
a stiskněteenter
pro potvrzení:Pokud je váš klíč CA chráněn heslem, budete vyzváni k zadání hesla. Po ověření skript vygeneruje certifikát SSL a vytiskne k němu úplnou cestu.
... Certificate created at: /home/causer/EasyRSA-3.0.5/pki/issued/client1.crt
-
Dále přeneste podepsaný certifikát
client1.crt
soubor zpět na váš server OpenVPN. Můžete použítscp
,rsync
nebo jakoukoli jinou zabezpečenou metodou:scp ~/EasyRSA-3.0.5/pki/issued/client1.crt serveruser@your_server_ip:/tmp
-
Přihlaste se ke svému serveru OpenVPN a přesuňte soubor
client1.crt
soubor do~/openvpn-clients/files
adresář:mv /tmp/client1.crt ~/openvpn-clients/files
-
Posledním krokem je vygenerování konfigurace klienta pomocí
gen_config.sh
skript. Přepněte na~/openvpn-clients
adresář a spusťte skript s použitím názvu klienta jako argumentu:cd ~/openvpn-clients
./gen_config.sh client1
Skript vytvoří soubor s názvem
client1.ovpn
v~/client-configs/configs
adresář. Můžete to zkontrolovat výpisem adresáře:ls ~/openvpn-clients/configs
client1.ovpn
V tomto okamžiku je vytvořena konfigurace klienta. Nyní můžete přenést konfigurační soubor do zařízení, které hodláte používat jako klienta.
Například pro přenos konfiguračního souboru na váš místní počítač pomocí scp
měli byste spustit následující příkaz:
scp ~/openvpn-clients/configs/client1.ovpn your_local_ip:/
Chcete-li přidat další klienty, opakujte stejné kroky.
Připojování klientů #
Linux #
Vaše distribuční nebo desktopové prostředí může poskytovat nástroj nebo grafické uživatelské rozhraní pro připojení k serverům OpenVPN. V tomto tutoriálu vám ukážeme, jak se připojit k serveru pomocí openvpn
nástroj.
-
Nainstalujte OpenVPN na Ubuntu a Debian
sudo apt update
sudo apt install openvpn
-
Nainstalujte OpenVPN na CentOS a Fedoru
sudo yum install epel-release
sudo yum install openvpn
Jakmile je balíček nainstalován, pro připojení k serveru VPN použijte openvpn
a zadejte konfigurační soubor klienta:
sudo openvpn --config client1.ovpn
macOS #
Tunnelblick je bezplatné grafické uživatelské rozhraní s otevřeným zdrojovým kódem pro OpenVPN na OS X a macOS.
Windows #
Stáhněte si a nainstalujte nejnovější sestavení aplikace OpenVPN na stránce Stahování OpenVPN.
Zkopírujte .ovpn
soubor do konfigurační složky OpenVPN (\Users\<Name>\OpenVPN\Config
nebo \Program Files\OpenVPN\config
).
Spusťte aplikaci OpenVPN.
Klikněte pravým tlačítkem na ikonu OpenVPN na hlavním panelu a v nabídce se zobrazí název konfiguračního souboru OpenVPN, který jste zkopírovali. Klikněte na Připojit.
Android a iOS #
Aplikace VPN vyvinutá společností OpenVPN je k dispozici pro Android i iOS. Nainstalujte aplikaci a importujte klienta .ovp
soubor.
- Android OpenVPN Connect
- iOS OpenVPN Connect
Zrušení klientských certifikátů #
Zrušení certifikátu znamená zneplatnění podepsaného certifikátu, takže jej již nelze používat pro přístup k serveru OpenVPN.
Chcete-li odvolat klientský certifikát, postupujte takto:
-
Přihlaste se ke svému počítači CA a přepněte se do adresáře EasyRSA:
cd EasyRSA-3.0.5
-
Spusťte skript easyrsa pomocí příkazu
revoke
argument následovaný jménem klienta, kterého chcete odvolat:./easyrsa revoke client1
Budete vyzváni k potvrzení, že chcete certifikát zrušit. Zadejte
yes
a stiskněteenter
pro potvrzení:Please confirm you wish to revoke the certificate with the following subject: subject= commonName = client1 Type the word 'yes' to continue, or any other input to abort. Continue with revocation: yes ...
If your CA key is password protected, you’ll be prompted to enter the password. Once verified the script will revoke the certificate.
... Revocation was successful. You must run gen-crl and upload a CRL to your infrastructure in order to prevent the revoked cert from being accepted.
-
Use the
gen-crl
option to generate a certificate revocation list (CRL):./easyrsa gen-crl
An updated CRL has been created. CRL file: /home/causer/EasyRSA-3.0.5/pki/crl.pem
-
Upload the CRL file to the OpenVPN server:
scp ~/EasyRSA-3.0.5/pki/crl.pem serveruser@your_server_ip:/tmp
-
Login to your OpenVPN server server and move the file to the
/etc/openvpn
adresář:sudo mv /tmp/crl.pem /etc/openvpn
-
Open the OpenVPN server configuration file:
sudo nano /etc/openvpn/server1.conf
Paste the following line at the end of the file
/etc/openvpn/server1.confcrl-verify crl.pem
Uložte a zavřete soubor.
-
Restart the OpenVPN service for the revocation directive to take effect:
sudo systemctl restart openvpn@server1
At this point, the client should no longer be able to access the OpenVPN server using the revoked certificate.
If you need revoke additional client certificates just repeat the same steps.