Nastavení OpenVPN na serveru s Debian 8 Jessie

11.4.2016 | Jindřich Zechmeister

Tunelujte na serveru s Debianem! Dnešním návodem pokračujeme v miniseriálu s OpenVPN a podíváme se na zprovoznění OpenVPN na linuxovém serveru s Debianem 8. Svůj virtuální server můžete využít i pro tunelování komunikace k bezpečnému cíli. Virtuální server můžete získat i u nás díky www.zonercloud.cz.

Instalace OpenVPN

V úplně prvním kroku je potřeba nainstalovat software na server. Instalace je v linuxu jednoduchá. Stačí balík OpenVPN nainstalovat příkazem

apt-get install openvpn

To je vše.

Vytvoření klíčů

Certifikační autoritu a certifikáty klientů je možné vytvořit samostatně v OpenSSL, nicméně můžeme využít i pomocných skriptů a práci si zjednodušit. 

Vytvořte složku pro klíče

mkdir /etc/openvpn/easy-rsa/

a složku nastavte jako výchozí pro CA.

make-cadir /etc/openvpn/easy-rsa

Zkopírujte do ní připravené skripty.

cp -R /usr/share/easy-rsa/* /etc/openvpn/easy-rsa/

Následně si upravte proměnné pro generování certifikátů tak, aby údaje byly podle vašich představ. Otevřete konfigurační soubor

nano /etc/openvpn/easy-rsa/vars

a upravte příslušnou sekci, například

export KEY_COUNTRY=”CZ”
export KEY_PROVINCE=”CZ”
export KEY_CITY=”Brno”
export KEY_ORG=”Test”
export KEY_EMAIL=”test@nazev-domeny.cz”

Pak spusťe vygenerování klíčů. Skript vygeneruje jeden klientský certifikát; pokud budete mít více klientů, potřebujete pro každého z nich samostatný certifikát (další uděláte pomocí ./build-key nazev-klienta).

cd /etc/openvpn/easy-rsa
chown -R root:root .
chmod g+w .

source ./vars
./clean-all
./build-dh
./pkitool --initca
./pkitool --server server

./build-key vpnclient1

Pro vyšší bezpečnost vygenerujeme ještě klíč, kterým se budou podepisovat pakety (HMAC signature); zajistí autenticitu zpráv a jejich neměnnost při cestě internetem. V konfiguraci to zajistí volba tls-auth. Tento klíč budete potřebovat i pro klienta. 

cd keys
openvpn --genkey --secret ta.key

Následně všechno zkopírujte do správné složky OpenVPN.

cp server.crt server.key ca.crt dh1024.pem ta.key ../../

Většina práce je tímto hotová. Přejděte k úpravě konfiguračního souboru OpenVPN serveru.

Konfigurační soubor serveru

"Konfigurák" si otevřete následujícím příkazem.

nano /etc/openvpn/server.conf

Vložte do něj tuto konfiguraci:

mode server
port 1194
proto udp
dev tun

ca ca.crt
cert server.crt
key server.key # privátní klíč serveru, nikam nepřenášet!
dh dh2048.pem

server 10.8.0.0 255.255.255.0

push "redirect-gateway autolocal" #přesměrování všeho provozu do tunelu
push "dhcp-option DNS 217.31.204.130" #budete používat otevřené resolvery CZ.NICu
push "dhcp-option DNS 193.29.206.206"

tls-server
tls-auth ta.key 0
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
persist-key
persist-tun
user nobody
group users
status openvpn-status.log
verb 3

Z konfigurace je patrné, že server bude pro VPN používat IP adresy z rozsahu 10.8.0.0/24 (což jsou IP 10.8.0.1 až 10.8.0.254).

Síť a firewall

Abyste mohli na serveru přes tunel "surfovat", je potřeba lehce upravit nastavení sítě a firewallu. 

Zapněte přesměrování paketů odkomentováním tohoto řádku v souboru /etc/sysctl.conf:

net.ipv4.ip_forward = 1

Následně zavolejte příkaz níže, aby se změna projevila, nebo restartujte server.

sysctl -p /etc/sysctl.conf

Pro funkčnost odchozí komunikace je třeba zadat tento příkaz a povolit pravidlo pro odchozí pakety z tunelu:

iptables -t nat -I POSTROUTING -s 10.8.0.0/24 -j MASQUERADE

Po připojení klienta do sítě VPN musí komunikace ze serveru odcházet, což lze snadno vyzkoušet pomocí 

ping 8.8.4.4

Doporučujeme aplikovat následující nastavení povolující navázaní spojení pouze od VPN klienta do Internetu (ne naopak). Zamezí tomu, aby se na VPN klienty (vás) zkoušel někdo z internetu připojovat nebo skenovat otevřené porty.

iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i tun+ -s 10.8.0.0/24 -j ACCEPT
iptables -P FORWARD DROP

Upozornění: Je na zvážení každého uživatele a správce serveru, zdali si firewall správně nastaví a povolí pouze ty služby, které na něm chce využívat. Tato problematika je velice individuální a nad rámec tohoto návodu. Například pro povolení VPN na portu 1194 můžete použít příkaz iptables -A INPUT -p udp --dport 1194 -j ACCEPT a můžete zakázat ostatní nevyužívané porty. Určitě však ne port 22, bez kterého byste se na server nepřipojili!.

Spuštění OpenVPN

OpenVPN démona spustíte následujícím povelem, který ho rovněž přidá od procesů spouštěných po startu.

systemctl enable openvpn.service && systemctl start openvpn.service

Kontrolu můžete provést následujícím příkazem.

systemctl status openvpn*.service

Ve výpisu pak uvidíte detaily spuštěné služby. Log služby si můžete zobrazit pokynem: 

journalctl -f | grep vpn

Log uvidíte v reálném čase; opustíte ho stiskem Ctrl+C. Po spuštění OpenVPN démona musí v síťových rozhraních přibýt položka tun0. Viz výsledky příkazu ifconfig.

Nyní stačí použít VPN klienta pro připojení k tomuto serveru. Jak nastavit klienty ve Windows a Mac OSX ukážeme v dalších návodech. Pro klienty budete v každém případě potřebovat certifikát CA a certifikát + privátní klíč vygenerovaný pro klienta. Tyto klíče si ze serveru uložte.

Zdroje a další informace:

  1. LinuxExpress - Správa linuxového serveru: OpenVPN server (pokračování).
  2. Linode.com - Set up a Hardened OpenVPN Server on Debian 8.
  3. Pontikis.net - How to setup OpenVPN on Debian server.

Ing. Jindřich Zechmeister
Specialista pro bezpečnostní SSL certifikáty
DigiCert TLS/SSL Professional
e-mail: jindrich.zechmeister(at)zoner.cz