VPN nebo Virtual Private Network je zabezpečená soukromá síť přes veřejnou síť, jako je internet. VPN je bezpečný tunel přes internet, který chrání váš datový provoz a zvyšuje soukromí a zabezpečení internetu. Přístup k síti VPN je omezen zabezpečenými metodami ověřování.
OpenVPN je software s otevřeným zdrojovým kódem pro vytváření virtuálních privátních sítí, používá knihovnu OpenSSL k šifrování tunelovaných dat a podporuje přenosy UDP nebo TCP. OpenVPN může používat předsdílené klíče, autentizační mechanismy založené na certifikátu a uživatelském jménu/heslu.
V tomto tutoriálu vám ukážu, jak implementovat virtuální privátní síť pomocí OpenVPNvpn pod operačním systémem Linux OpenSUSE Leap 42.1.
Předpoklady
- OpenSUSE Leap 42.1 – 64bit
- Oprávnění uživatele root
- TUN/TAP povoleno
Krok 1 – Kontrola, zda je povoleno TUN/TAP
Pokud chcete na svém serveru vytvořit síť VPN, ujistěte se, že je nainstalován a povolen TUN/TAP. Můžete to zkontrolovat pomocí příkazu níže:
cat /dev/net/tun
Výsledek by měl být:
cat: /dev/net/tun: File descriptor in bad state
Krok 2 – Instalace OpenVPN
OpenVPN je k dispozici v úložišti OpenSUSE. Můžete jej nainstalovat pomocí příkazu zypper:
zypper in openvpn
Krok 3 – Nastavení Easy-RSA
Dále si stáhněte easy-rsa a vygenerujte soubor certifikátu. Easy-rsa je nástroj pro správu certifikátů, můžete s ním vytvořit kořenovou certifikační autoritu a vyžadovat a podepisovat certifikáty.
Přejděte do adresáře OpenVPN a stáhněte si easy-rsa pomocí příkazu wget:
cd /etc/openvpn/
wget https://github.com/OpenVPN/easy-rsa/archive/release/2.x.zip
Rozbalte archiv a přesuňte adresář easy-rsa:
unzip 2.x.zip
mv easy-rsa-release-2.x/easy-rsa/ /etc/openvpn/
rm -rf easy-rsa-release-2.x/
Nakonfigurujte klíč
Přejděte do adresáře easy-rsa a upravte soubor vars pro konfiguraci klíče a certifikátu:
cd easy-rsa/2.0/
vim vars
Řádek 53 – Pokud jste opravdu paranoidní, můžete zvětšit velikost klíče.
export KEY_SIZE=2048
Řádek 56 a 59 – Za kolik dní vyprší platnost klíče a certifikátu.
export CA_EXPIRE=3650
export KEY_EXPIRE=3650
Řádek 64 - 72 - Změňte výchozí hodnotu informací o klíči a certifikátu.
export KEY_COUNTRY="US"
export KEY_PROVINCE="California"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="[email protected]main"
export KEY_OU="MyOrganizationalUnit"
export KEY_NAME="EasyRSA"
Uložte soubor a ukončete.
Inicializujte PKI
Dále inicializujte PKI (Infrastructure Public Key):
source ./vars && ./clean-all && ./build-ca
Ponecháme výchozí hodnotu, stačí stisknout "Enter".
Vygenerujte parametry Diffie Hellmana
Spusťte níže uvedený příkaz:
./build-dh
Uvidíte výstup:
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
..................................
Vygenerujte soukromý klíč serveru
Vygenerujte soukromý klíč s názvem "server":
./build-key-server server
Stiskněte enter a zadejte "y" pro potvrzení vygenerování klíče.
Vygenerujte klíč a certifikát pro klienta
Vygenerujte klientský klíč a certifikát s názvem "client1":
./build-key client1
Stiskněte enter a zadejte "y" pro potvrzení generování klíče.
Klíč a certifikát byly vygenerovány v adresáři "keys". Nyní vytvořte kopii adresáře "keys" a vložte ji do adresáře "openvpn".
cp -r keys/ /etc/openvpn/
Krok 4 – Konfigurace OpenVPN
V tomto kroku nakonfigurujeme OpenVPN tak, aby běžela na protokolu UDP pomocí portu 2034 pro připojení klienta. Vytvořte nový konfigurační soubor server.conf v adresáři OpenVPN.
cd /etc/openvpn/
vim server.conf
Vložte konfiguraci níže:
#change with your port
port 2034
#You can use udp or tcp
proto udp
# "dev tun" will create a routed IP tunnel.
dev tun
#Certificate Configuration
#ca certificate
ca /etc/openvpn/keys/ca.crt
#Server Certificate
cert /etc/openvpn/keys/server.crt
#Server Key and keep this is secret
key /etc/openvpn/keys/server.key
#See the size a dh key in /etc/openvpn/keys/
dh /etc/openvpn/keys/dh2048.pem
#Internal IP will get when already connect
server 10.10.2.0 255.255.255.0
#this line will redirect all traffic through our OpenVPN
push "redirect-gateway def1"
#Provide DNS servers to the client, you can use goolge DNS
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
#Enable multiple client to connect with same key
duplicate-cn
keepalive 20 60
comp-lzo
persist-key
persist-tun
daemon
#openvpn status log
status /var/log/openvpn/openvpn-status.log
#enable log
log-append /var/log/openvpn/openvpn.log
#Log Level
verb 3
Uložte soubor a ukončete editor.
Dále vytvořte nový adresář a soubor pro protokol openvpn:
mkdir -p /var/log/openvpn/
touch /var/log/openvpn/{openvpn,openvpn-status}.log
Krok 5 – Konfigurace SuSEfirewall2
SuSEfirewall2 je skript pro generování pravidel iptables na základě souboru "/etc/sysconfig/SuSEfirewall2". Nainstalujeme SuSEfirewall2 a poté nakonfigurujeme port pro přístup k OpenVPN, poté povolíme NAT pomocí skriptu iptables pro OpenVPN.
Nainstalujte SuSEfirewall2 pomocí příkazu zypper:
zypper in SuSEfirewall2
Nyní přejděte do adresáře sysconfig a upravte konfigurační soubor SuSEfirewall2:
cd /etc/sysconfig/
vim SuSEfirewall2
Linka 134 – Povolit trasu.
FW_ROUTE="yes"
Řádek 253 – Povolte TCP port 22 pro přístup SSH z vnějšku sítě.
FW_SERVICES_EXT_UDP="22"
Řádek 267 – Povolení portu udp pro klientský přístup openvpn – port 2034.
FW_SERVICES_EXT_UDP="2034"
Řádek 877 – Povolit vlastní pravidla SuSEfirewall2.
FW_CUSTOMRULES="/etc/sysconfig/scripts/SuSEfirewall2-custom"
Uložte a ukončete.
Dále upravte vlastní pravidla SuSEfirewall2 v adresáři scripts.
cd /etc/sysconfig/scripts/
vim SuSEfirewall2-custom
Do direktivy „fw_custom_after_chain_creation“ vložte nová pravidla iptables pro OpenVPN:
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.10.2.0/24 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 10.10.2.0/24 -o eth0 -j MASQUERADE
Uložte a ukončete.
Poznámka:
IP 10.10.2.0/24 je síť z konfiguračního souboru server.conf OpenVPN.
Nyní můžeme povolit přeposílání přidáním tohoto nového konfiguračního řádku do souboru sysctl.conf.
vim /etc/sysctl.conf
Vložte konfiguraci níže:
net.ipv4.ip_forward = 1
Uložte a ukončete.
Poznámka:
Pokud již řádek v souboru máte, změňte hodnotu z "0" na "1" namísto přidávání nového řádku.
Nyní spusťte příkaz níže a použijte změnu konfigurace.
sysctl -p
Spusťte server SuSEfirewall2 a OpenVPN:
systemctl start SuSEfirewall2
systemctl start [email protected]
Pokud máte chybu, můžete vidět podrobnou chybovou zprávu v protokolu OpenVPN.
Přidejte všechny služby do spuštění systému:
systemctl enable SuSEfirewall2
systemctl enable [email protected]
Krok 5 – Konfigurace klienta
Stáhněte si klientský klíč a certifikát z adresáře klíčů do místního počítače. Můžete použít příkaz scp nebo sftp, já jsem zde pomocí scp:
Příkaz, který musí být spuštěn na místním počítači.
scp [email protected]:~/etc/openvpn/keys/ca.crt ~/myvpn/
scp [email protected]:~/etc/openvpn/keys/client1.crt ~/myvpn/
scp [email protected]:~/etc/openvpn/keys/client1.key ~/myvpn/
V adresáři myvpn vytvořte nový konfigurační soubor pro klienta "client1.ovpn".
cd ~/myvpn/
vim client1.ovpn
Vložte konfiguraci níže:
client
dev tun
proto udp
#Server IP and Port
remote SERVERIP 2034
resolv-retry infinite
nobind
persist-key
persist-tun
mute-replay-warnings
ca ca.crt
cert client1.crt
key client1.key
ns-cert-type server
comp-lzo
Uložte a ukončete.
Pro připojení k naší VPN si můžete nainstalovat VPN klienta nebo pokud používáte Linux, můžete použít "Network-Manager". Pokud chcete VPN otestovat pomocí terminálu, můžete použít níže uvedený příkaz:
cd ~/myvpn/
sudo openvpn --config client1.ovpn