V pokračování série článků o VPN nyní nainstalujeme OpenVPN na server Ubuntu 16.04. OpenVPN je dobře známý VPN software od stejnojmenné společnosti. Konfigurace je poněkud obtížnější než u jiného softwaru VPN, takže se v tomto článku zaměříme na konfiguraci na straně serveru a vytváření souborů ovpn. Tato příručka je navržena tak, aby běžela jako uživatel bez oprávnění root. Pokud jste přihlášeni jako root, nejprve začneme přidáním uživatele bez oprávnění root.
adduser newuser
Poté mu dáme práva sudo a přihlásíme se jako uživatel
usermod -aG sudo newuser
su newuser
Pokud již máte uživatele bez oprávnění root, můžete tyto kroky přeskočit a s největší pravděpodobností ano.
Nyní, když jste přihlášeni jako newuser nebo jakýkoli jiný uživatel bez root, nainstalujeme openvpn
sudo apt-get install openvpn easy-rsa
Certifikáty serveru a klienta
Nejprve musíme vytvořit adresář pro certifikační autoritu a upravit soubor vars is
make-cadir ~/openvpn-ca
cd ~/openvpn-ca
nano vars
Najděte řádky, které mají v sobě export KEY_, a vytvořte je takto
export KEY_COUNTRY="US"
export KEY_PROVINCE="New York State"
export KEY_CITY="New York City"
export KEY_ORG="Linoxide"
export KEY_EMAIL="[email protected]"
export KEY_OU="LinuxGeeks"
Ve stejném souboru je také řádek s názvem KEY_NAME, takže tam uvedeme pouze server jako název
export KEY_NAME="server"
Po uložení souboru vars další věc, kterou zadáme:
source vars
což by vám mělo poskytnout poznámku o příkazu ./clean-all. Proto jej napište, abyste se ujistili, že provozujeme čisté prostředí.
./clean-all
Nyní přejdeme k části vytváření certifikátu:
./build-ca
Vyzve vás to na několik otázek, ale protože jsme upravili varianty, nové výchozí hodnoty by měly být v pořádku, takže můžete stisknout enter ve všech případech.
./build-key-server server
Znovu zadejte, ale tentokrát ne ve všech ohledech. Když vás to požádá o zadání hesla, nevkládejte ho a nakonec stiskněte y pro vytvoření certifikátu. Další je diffie hellman:
./build-dh
Bude to chvíli trvat, takže buďte trpěliví. Dále potřebujeme klíč ta.key ke zlepšení zabezpečení serveru.
openvpn --genkey --secret keys/ta.key
A pak zkopírujeme všechny relevantní soubory do adresáře /etc/openvpn, protože openvpn odtud pouze čte.
cd ~/openvpn-ca/keys
sudo cp ca.crt ca.key server.crt server.key ta.key dh2048.pem /etc/openvpn
S certifikátem serveru jsme hotovi, takže nyní vytvoříme certifikát pro client100.
cd ~/openvpn-ca
source vars
./build-key client100
Výchozí výchozí hodnoty jsou opět v pořádku, takže stačí na konci stisknout enter a y.
Konfigurace serveru
Jako výchozí bod zkopírujeme ukázkovou konfiguraci následujícím příkazem:
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf
Dále musíme upravit server.conf, aby náš server fungoval. Můžete použít jakýkoli editor, ale my nyní použijeme příkaz sed
sudo sed -i 's/;push "redirect-gateway def1 bypass-dhcp"/push "redirect-gateway def1 bypass-dhcp"/g' /etc/openvpn/server.conf
sudo sed -i 's/;push "dhcp-option DNS 208.67.222.222"/push "dhcp-option DNS 208.67.222.222"/g' /etc/openvpn/server.conf
sudo sed -i 's/;push "dhcp-option DNS 208.67.220.220"/push "dhcp-option DNS 208.67.220.220"/g' /etc/openvpn/server.conf
sudo sed -i 's/;user nobody/user nobody/g' /etc/openvpn/server.conf
sudo sed -i 's/;group nogroup/group nogroup/g' /etc/openvpn/server.conf
sudo sed -i 's/;log-append/log-append/g' /etc/openvpn/server.conf
Věci, které jsme zde udělali:Nastavili jsme veškerý provoz tak, aby šel přes OpenVPN, nastavili jsme skupinu a uživatele na nogroup a nikdo a nastavili jsme protokoly tak, aby šly do /etc/openvpn/openvpn.log. Poté potřebujeme ještě jednu změnu ohledně ta.key:
sudo nano /etc/openvpn/server.conf
A najděte tento řádek
tls-auth ta.key 0 # This file is secret
key-direction 0
To je vše pro server.conf, dále musíme povolit předávání paketů pro náš server Ubuntu
sudo sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g' /etc/sysctl.conf
sudo sysctl -p
Pravidla ufw je také třeba změnit, aby umožňovala maskování, takže to přidejte na začátek, před *filtr
sekce
sudo nano /etc/ufw/before.rules
# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to eth0
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
# END OPENVPN RULES
Všimněte si, že část eth0 s největší pravděpodobností budete muset změnit, aby odrážela skutečné jméno vašeho síťového rozhraní připojeného k internetu, takže jsem to zvýraznil. Dále povolíme předávání v ufw, jako jsme to udělali v sysctl:
sudo sed -i 's/DEFAULT_FORWARD_POLICY="DROP"/DEFAULT_FORWARD_POLICY="ACCEPT"/g' /etc/default/ufw
Nakonfigurujeme firewall
sudo ufw allow 1194/udp
sudo ufw disable
sudo ufw enable
sudo systemctl start openvpn@server
sudo systemctl status -l openvpn
Pokud vše proběhlo v pořádku, povolte spuštění openvpn při bootování
sudo systemctl enable openvpn@server
Konfigurace klienta
V části konfigurace klienta používáme certifikáty, které jsme již vytvořili, například client100. Potřebujeme také konfigurační soubory klienta
mkdir -p ~/client-configs/files
chmod 700 ~/client-configs/files
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
Soubor, který jsme zkopírovali, je základní nastavení, proto je třeba jej upravit.
nano ~/client-configs/base.conf
A pak najděte řádek, který říká vzdálené. Změňte jej také ukažte na IP adresu vašeho serveru FQDN.
remote your.serv.ipor.fqdn 1194
Uložte si to, zbytek úprav provedeme pomocí příkazů sed a echo:
sudo sed -i 's/;user nobody/user nobody/g' ~/client-configs/base.conf
sudo sed -i 's/;group nogroup/group nogroup/g' ~/client-configs/base.conf
sudo sed -i 's/ca ca.crt/#ca ca.crt/g' ~/client-configs/base.conf
sudo sed -i 's/cert client.crt/#cert client.crt/g' ~/client-configs/base.conf
sudo sed -i 's/key client.key/#key client.key/g' ~/client-configs/base.conf
sudo echo key-direction 1 >> ~/client-configs/base.conf
Tak co jsme tady dělali? Nejprve jsme nastavili uživatele a skupinu na none a nogroup. Poté jsme okomentovali cesty certifikátů, protože budeme integrovat inline certifikáty do souboru .ovpn. Poté jsme přidali parametr key-direction 1.
Skript pro vytváření klientských konfigurací
Pro vložení konfigurace klienta, klíčů a certifikátů do jednoho .ovpn souboru pro snazší přenos ke vzdáleným klientům použijeme jednoduchý skript. Pojďme to udělat
nano ~/client-configs/make_config.sh
A pak tam vložte tento pastebin. Po uložení tohoto musíme přidat spustitelný bit, takže spusťte tento příkaz:
chmod +x ~/client-configs/make_config.sh
Pak můžeme snadno vytvořit konfigurační soubory
cd ~/client-configs
./make_config.sh client100
ls ~/client-configs/files
Syntaxe příkazu je snadná, musíte být v adresáři client-configs a spustit příkaz s argumentem, který říká jméno klienta, kterého jste vytvořili dříve. Pokud potřebujete více klientů, vytvořte více klientských certifikátů s jiným názvem a spusťte tento příkaz znovu. Pokud vše proběhlo v pořádku, v adresáři client-configs/files by měl být soubor(y) ovpn. Musíte je přenést do svého klienta nebo klientů a připojit se. Udělám to pomocí scp, z mého notebooku Fedora jsem takto velel
scp [email protected]:/home/newuser/client-configs/files/client100.ovpn /home/miki/Documents/
Odtud jej můžete načíst do telefonu Android pomocí kabelu USB nebo přes AirDroid, nebo na Windows VM nebo na Macu. Pro správce sítě Linux budete muset soubor rozebrat
Závěr
Jde o konfiguraci serveru, dále bychom se potřebovali připojit z různých klientů. Pro Android můžeme použít OpenVPN Connect, pro Mac Tunnelblick, pro Windows je OpenVPN z oficiálních stránek a pro Linux je správce sítě. V některých z následujících článků se tím vším budeme zabývat.