Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Následující verze | Předchozí verze | ||
openvpn_server [2012/07/27 13:00] – vytvořeno ubuntu | openvpn_server [2019/02/25 18:20] (aktuální) – upraveno mimo DokuWiki 127.0.0.1 | ||
---|---|---|---|
Řádek 1: | Řádek 1: | ||
+ | ====== OpenVPN server ====== | ||
+ | |{{.: | ||
+ | |||
+ | **[[http:// | ||
+ | |||
+ | ===== Literatura ===== | ||
+ | * http:// | ||
+ | * http:// | ||
+ | * http:// | ||
+ | * http:// | ||
+ | * http:// | ||
+ | |||
+ | ===== Krok za krokem ===== | ||
+ | |||
+ | |||
+ | * Instalace programů (server - klienti): | ||
+ | < | ||
+ | apt-get install openvpn openssl | ||
+ | </ | ||
+ | |||
+ | * Pro generování certifikátů pro uživatele je potřeba vytvořit certifikační autoritu. Certifikační autorita (v tomto případě server) zajišťuje důvěryhodnost připojení uživatelů k serveru. V první řadě vytvoříme adresář pro certifikační autoritu a potřebné podadresáře: | ||
+ | < | ||
+ | cd /etc/ssl/ | ||
+ | mkdir demoCA demoCA/ | ||
+ | </ | ||
+ | |||
+ | |||
+ | * Nyní je třeba ještě vytvořit prázdný soubor index.txt a soubor serial s obsahem „01“: | ||
+ | < | ||
+ | touch / | ||
+ | echo 01 > / | ||
+ | </ | ||
+ | |||
+ | * Dále vygenerujeme certifikát certifikační autority a podepíšeme jej sám sebou: | ||
+ | < | ||
+ | cd / | ||
+ | openssl req -new -x509 -nodes -out cacert.pem -keyout cakey.pem -days 3650 | ||
+ | </ | ||
+ | |||
+ | * Následně umístíme vygenerovaný klíč a certifikát do správných adresářů. Certifikát přesuneme do / | ||
+ | < | ||
+ | mv cacert.pem certs/ && mv cakey.pem private/ | ||
+ | chmod 400 private/ | ||
+ | </ | ||
+ | |||
+ | |||
+ | * Správnost cest je třeba ještě jednou zkontrolovat v konfiguračním souboru programu openssl nacházející se v „/ | ||
+ | < | ||
+ | [ CA_default ] | ||
+ | |||
+ | dir = ./ | ||
+ | certs = $dir/ | ||
+ | crl_dir | ||
+ | database | ||
+ | |||
+ | new_certs_dir | ||
+ | |||
+ | certificate | ||
+ | serial | ||
+ | |||
+ | crl = $dir/ | ||
+ | private_key | ||
+ | RANDFILE | ||
+ | |||
+ | policy | ||
+ | </ | ||
+ | |||
+ | |||
+ | :!: Pokud z nějakého důvodu nefungují relativní cesty pomocí " | ||
+ | |||
+ | |||
+ | < | ||
+ | [ CA_default ] | ||
+ | |||
+ | dir = / | ||
+ | certs = / | ||
+ | crl_dir = $dir/crl # Where the issued crl are kept | ||
+ | database = / | ||
+ | # | ||
+ | # several ctificates with same subject. | ||
+ | new_certs_dir = / | ||
+ | |||
+ | certificate = / | ||
+ | # | ||
+ | serial = / | ||
+ | crlnumber = $dir/ | ||
+ | # must be commented out to leave a V1 CRL | ||
+ | crl = $dir/ | ||
+ | private_key = / | ||
+ | RANDFILE = $dir/ | ||
+ | |||
+ | x509_extensions = usr_cert # The extentions to add to the cert | ||
+ | |||
+ | # Comment out the following two lines for the " | ||
+ | # (and highly broken) format. | ||
+ | name_opt = ca_default # | ||
+ | cert_opt = ca_default # | ||
+ | |||
+ | # Extension copying option: use with caution. | ||
+ | # copy_extensions = copy | ||
+ | |||
+ | # Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs | ||
+ | # so this is commented out by default to leave a V1 CRL. | ||
+ | # crlnumber must also be commented out to leave a V1 CRL. | ||
+ | # crl_extensions = crl_ext | ||
+ | |||
+ | default_days = 365 # how long to certify for | ||
+ | default_crl_days= 30 # how long before next CRL | ||
+ | default_md = sha1 # which md to use. | ||
+ | preserve = no # keep passed DN ordering | ||
+ | |||
+ | # A few difference way of specifying how similar the request should look | ||
+ | # For type CA, the listed attributes must be the same, and the optional | ||
+ | # and supplied fields are just that :-) | ||
+ | policy = policy_anything | ||
+ | </ | ||
+ | |||
+ | * Pokud je již všechno správně nastaveno, lze začít generovat certifikáty. Vygenerujeme ho tedy pro server. | ||
+ | :!: Při vyplňování parametrů je nutné zadat stejné parametry uvedené v sekci [ policy_match ] v konfiguračním souboru „/ | ||
+ | :!: match = má se rovnat (pro countryName vyplnuji vzdy " | ||
+ | :!: optional = nemusí se vyplnovat | ||
+ | :!: supplied = asi se musi vyplnovat, napriklad IP nebo jmeno (kazdy certifikat uniq?) | ||
+ | |||
+ | |||
+ | < | ||
+ | mkdir server && cd server | ||
+ | openssl req -new -nodes -out request.pem -keyout key.pem -days 1095 | ||
+ | </ | ||
+ | |||
+ | * Z předchozího příkazu dostaneme dva soubory (žádost „request.pem“ a klíč „key.pem“). Následně potvrdíme certifikační autoritou žádost o vydání certifikátu: | ||
+ | < | ||
+ | openssl ca -in request.pem -out cert.pem | ||
+ | </ | ||
+ | |||
+ | |||
+ | :!: Zde může nastat problém popsaný v bodě 6! | ||
+ | |||
+ | |||
+ | < | ||
+ | # Chyba | ||
+ | openssl ca -in request.pem -out cert.pem | ||
+ | Using configuration from / | ||
+ | Error opening CA certificate ./ | ||
+ | 17226: | ||
+ | 17226: | ||
+ | unable to load certificate | ||
+ | </ | ||
+ | < | ||
+ | # Dobře | ||
+ | openssl ca -in request.pem -out cert.pem | ||
+ | Using configuration from / | ||
+ | Check that the request matches the signature | ||
+ | Signature ok | ||
+ | Certificate Details: | ||
+ | ... | ||
+ | ... výpis detailů ceritifikátu | ||
+ | ... | ||
+ | Certificate is to be certified until Nov 18 11:27:39 2010 GMT (365 days) | ||
+ | Sign the certificate? | ||
+ | 1 out of 1 certificate requests certified, commit? [y/n]y | ||
+ | Write out database with 1 new entries | ||
+ | Data Base Updated | ||
+ | </ | ||
+ | |||
+ | * Zkopírujeme soubory na patřičná místa na serveru | ||
+ | < | ||
+ | mv cert.pem / | ||
+ | mv key.pem / | ||
+ | </ | ||
+ | |||
+ | |||
+ | * Nyní vytvoříme certifikát pro uživatele, a potvrdíme certifikační autoritou: | ||
+ | < | ||
+ | mkdir client && cd client | ||
+ | openssl req -new -nodes -out request.pem -keyout key.pem -days 1095 | ||
+ | openssl ca -in request.pem -out cert.pem | ||
+ | </ | ||
+ | |||
+ | |||
+ | * Po úspěšném provedení předchozího příkazu dostáváme certifikát potvrzený certifikační autoritou. Tímto způsobem vytvoříme certifikát pro server a klienty. Bezpečnou cestou přeneseme klíč , certifikát a certifikát certifikační autority do počítačů. Dále je třeba vytvořit soubor s Diffie-Hellmann algoritmem (více o DH na: http:// | ||
+ | < | ||
+ | openssl dhparam -out / | ||
+ | </ | ||
+ | |||
+ | |||
+ | * V serveru vytvoříme konfigurační soubor pro připojení virtuální sítě. Konfigurační soubor vytvoříme v „/ | ||
+ | < | ||
+ | mode server | ||
+ | tls-server | ||
+ | dev tap0 | ||
+ | port 1194 | ||
+ | |||
+ | ifconfig 10.0.1.1 255.255.255.0 | ||
+ | ifconfig-pool 10.0.1.100 10.0.1.200 255.255.255.0 | ||
+ | duplicate-cn | ||
+ | proto udp | ||
+ | |||
+ | ca / | ||
+ | cert / | ||
+ | key / | ||
+ | dh / | ||
+ | |||
+ | log-append / | ||
+ | status / | ||
+ | |||
+ | user root | ||
+ | group root | ||
+ | comp-lzo | ||
+ | verb 3 | ||
+ | |||
+ | keepalive 1 220 | ||
+ | </ | ||
+ | |||
+ | |||
+ | * V počítači klienta vytvoříme konfigurační soubor pro připojení virtuální sítě. Editujeme soubor „/ | ||
+ | < | ||
+ | remote 1.2.3.4 ### IP adresa serveru | ||
+ | tls-client | ||
+ | dev tap | ||
+ | pull | ||
+ | |||
+ | mute 10 | ||
+ | ca / | ||
+ | cert / | ||
+ | key / | ||
+ | |||
+ | comp-lzo | ||
+ | verb 3 | ||
+ | </ | ||
+ | |||
+ | |||
+ | * Nyní máme konfiguraci hotovou a lze ji vyzkoušet. Nejdříve spustíme vpn server „/ | ||
+ | < | ||
+ | cd / | ||
+ | openvpn --config ./ | ||
+ | </ | ||
+ | |||
+ | |||
+ | :!: Dostaneme vypis podobny tomuto: | ||
+ | < | ||
+ | OpenVPN 2.0.9 i486-pc-linux-gnu [SSL] [LZO] [EPOLL] built on May 21 2007 | ||
+ | WARNING: No server certificate verification method has been enabled. | ||
+ | WARNING: file ' | ||
+ | LZO compression initialized | ||
+ | Control Channel MTU parms [ L:1574 D:138 EF:38 EB:0 ET:0 EL:0 ] | ||
+ | Data Channel MTU parms [ L:1574 D:1450 EF:42 EB:135 ET:32 EL:0 AF:3/1 ] | ||
+ | Local Options hash (VER=V4): ' | ||
+ | Expected Remote Options hash (VER=V4): ' | ||
+ | UDPv4 link local (bound): [undef]: | ||
+ | UDPv4 link remote: 1.2.3.4: | ||
+ | TLS: Initial packet from 1.2.3.4: | ||
+ | VERIFY OK: depth=1, / | ||
+ | VERIFY OK: depth=0, / | ||
+ | Data Channel Encrypt: Cipher ' | ||
+ | Data Channel Encrypt: Using 160 bit message hash ' | ||
+ | Data Channel Decrypt: Cipher ' | ||
+ | Data Channel Decrypt: Using 160 bit message hash ' | ||
+ | Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, | ||
+ | [duckd] Peer Connection Initiated with 1.2.3.4: | ||
+ | SENT CONTROL [duckd]: ' | ||
+ | PUSH: Received control message: ' | ||
+ | OPTIONS IMPORT: timers and/or timeouts modified | ||
+ | OPTIONS IMPORT: --ifconfig/ | ||
+ | TUN/TAP device tap0 opened | ||
+ | ifconfig tap0 10.0.1.100 netmask 255.255.255.0 mtu 1500 broadcast 10.0.1.255 | ||
+ | Initialization Sequence Completed | ||
+ | </ | ||
+ | |||
+ | |||
+ | * Na serveru a clientu se lze přesvědčit že jsou vytvořeny zařízení. Příkaz: ifconfig, zařízení tap0. A měl by fungovat ping. | ||
+ | |||
+ | |||
+ | ===== Skript ===== | ||
+ | |||
+ | * Soubory na serveru: | ||
+ | * vpn_server.conf ### Upravíme parametry připojení v konfiguračním souboru pro server | ||
+ | * bash server_install.sh ### Pokud máme tyto dva soubory ve stejném adresáři, instalujeme openvpn na server. Výsledkem má být běžící openvpn server v terminálu. | ||
+ | * server_generuj_certifikat.sh ### Generuj přístup jednomu klientovi a zabal do balíku / | ||
+ | |||
+ | |||
+ | * Soubory na klientovi: | ||
+ | * vpn_client.conf ### Upravíme klientovo konfigurák\ | ||
+ | * client_X.tar ### balík získáme ze serveru (bezpečnou cestou)\ | ||
+ | * bash client_install.sh ### pokud máme tyto tři soubory ve stejném adresáři, instalujeme openvpn na klienta\ | ||
+ | |||
+ | ==== Server ==== | ||
+ | * vpn_server.conf | ||
+ | < | ||
+ | mode server | ||
+ | port 1194 | ||
+ | proto tcp-server | ||
+ | tls-server | ||
+ | dev tap0 | ||
+ | |||
+ | ifconfig 10.0.1.1 255.255.255.0 | ||
+ | ifconfig-pool 10.0.1.100 10.0.1.200 255.255.255.0 | ||
+ | duplicate-cn | ||
+ | |||
+ | ca / | ||
+ | cert / | ||
+ | key / | ||
+ | dh / | ||
+ | |||
+ | log-append / | ||
+ | status / | ||
+ | |||
+ | user root | ||
+ | group root | ||
+ | comp-lzo | ||
+ | verb 3 | ||
+ | |||
+ | keepalive 1 220 | ||
+ | </ | ||
+ | |||
+ | |||
+ | * server_install.sh | ||
+ | < | ||
+ | |||
+ | wd=`pwd` | ||
+ | |||
+ | echo -e ' | ||
+ | apt-get install -y openvpn openssl | ||
+ | |||
+ | echo -e ' | ||
+ | mkdir -p / | ||
+ | |||
+ | echo -e ' | ||
+ | touch / | ||
+ | echo 01 > / | ||
+ | |||
+ | echo -e ' | ||
+ | cd / | ||
+ | openssl req -new -x509 -nodes -out cacert.pem -keyout cakey.pem -days 3650 | ||
+ | |||
+ | echo -e ' | ||
+ | chmod 400 cakey.pem | ||
+ | mv cakey.pem private/ | ||
+ | |||
+ | echo -e ' | ||
+ | openssl dhparam -out dh1024.pem 1024 | ||
+ | |||
+ | echo -e ' | ||
+ | cd /etc/ssl | ||
+ | openssl req -new -nodes -out request.pem -keyout key.pem -days 1095 | ||
+ | |||
+ | echo -e ' | ||
+ | openssl ca -in request.pem -out cert.pem | ||
+ | rm request.pem | ||
+ | mv cert.pem demoCA/ | ||
+ | mv key.pem demoCA/ | ||
+ | |||
+ | echo -e ' | ||
+ | mkdir / | ||
+ | cp / | ||
+ | |||
+ | echo -e ' | ||
+ | cd $wd | ||
+ | cp vpn_server.conf / | ||
+ | |||
+ | echo -e ' | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | |||
+ | * server_generuj_certifikat.sh | ||
+ | < | ||
+ | |||
+ | cd / | ||
+ | |||
+ | function generuj_certifikat | ||
+ | { | ||
+ | openssl req -new -nodes -out request.pem -keyout key.pem -days 1095 | ||
+ | openssl ca -in request.pem -out cert.pem | ||
+ | rm request.pem | ||
+ | tar -cvf client_$number.tar key.pem cert.pem cacert.pem | ||
+ | rm key.pem cert.pem | ||
+ | } | ||
+ | |||
+ | for (( number=1 ; $number-1000 ; number=$number+1 )) | ||
+ | do | ||
+ | if [ -f client_$number.tar ] | ||
+ | then | ||
+ | echo the file exists | ||
+ | else | ||
+ | generuj_certifikat | ||
+ | exit | ||
+ | fi | ||
+ | done | ||
+ | </ | ||
+ | |||
+ | * Pokud chcete odebrat openvpn ze serveru včetně veškerých vytvořených soborů a adresářů | ||
+ | < | ||
+ | apt-get purge openvpn && rm -r / | ||
+ | </ | ||
+ | |||
+ | ==== Klient ==== | ||
+ | * vpn_client.conf | ||
+ | < | ||
+ | remote 192.168.1.10 ### IP adresa serveru | ||
+ | dev tap | ||
+ | proto tcp-client | ||
+ | port 1194 | ||
+ | tls-client | ||
+ | pull | ||
+ | |||
+ | mute 10 | ||
+ | ca cacert.pem | ||
+ | cert cert.pem | ||
+ | key key.pem | ||
+ | |||
+ | comp-lzo | ||
+ | verb 3 | ||
+ | </ | ||
+ | |||
+ | * client_install.sh | ||
+ | < | ||
+ | |||
+ | echo "1) Instalace programů na klienta" | ||
+ | apt-get install -y openvpn openssl | ||
+ | |||
+ | echo " | ||
+ | mv vpn_client.conf / | ||
+ | |||
+ | echo " | ||
+ | tar -xvf client_*.tar; | ||
+ | |||
+ | echo " | ||
+ | openvpn --config / | ||
+ | </ | ||
+ | |||
+ | ===== Konec ===== | ||
+ | {{.: | ||
+ | * **Vytvořil: | ||
+ | * **Pomáhali a radili:** Krtko, fenquick, trako, lkopecky |