{"id":4777,"date":"2021-05-31T09:21:03","date_gmt":"2021-05-31T07:21:03","guid":{"rendered":"https:\/\/nsix.pl\/kb\/?p=4777"},"modified":"2021-05-31T09:21:03","modified_gmt":"2021-05-31T07:21:03","slug":"jak-stworzyc-wlasny-serwer-openvpn","status":"publish","type":"post","link":"https:\/\/nsix.pl\/kb\/jak-stworzyc-wlasny-serwer-openvpn\/","title":{"rendered":"Jak stworzy\u0107 w\u0142asny serwer OpenVPN"},"content":{"rendered":"\n<p>Po\u0142\u0105czenia VPN s\u0105 bardzo dobrym sposobem na zabezpieczenie po\u0142\u0105czenia z r\u00f3\u017cnymi serwerami zdalnymi b\u0105d\u017a z naszym miejscem pracy. Po\u0142\u0105czenie VPN mo\u017cemy zakupi\u0107 od jednego z wielu dostawc\u00f3w. Je\u017celi jednak wa\u017cna jest dla nas kontrola nad serwerem do kt\u00f3rego si\u0119 \u0142\u0105czymy, mo\u017cemy stworzy\u0107 go sami, wa\u017cne jest jednak, aby posiada\u0142 stabilne po\u0142\u0105czenie, by\u0142 wysoko dost\u0119pny oraz posiada\u0142 publiczny adres IP. Nale\u017cy tak\u017ce pami\u0119ta\u0107 o tym, \u017ce w moim przyk\u0142adzie, konfiguracja jest stworzona do moich potrzeb i mo\u017ce si\u0119 r\u00f3\u017cni\u0107 od innych. Dlatego podczas tworzenia serwera warto zapozna\u0107 si\u0119 tak\u017ce z dokumentacj\u0105 kt\u00f3ra znajduje si\u0119 <strong><em><a href=\"https:\/\/openvpn.net\/community-resources\/\" target=\"_blank\" rel=\"nofollow\">tutaj<\/a><\/em><\/strong>.<\/p>\n\n\n\n<p>W moim przypadku, serwer na kt\u00f3rym b\u0119dzie dzia\u0142a\u0142 OpenVPN b\u0119dzie u\u017cywa\u0142 systemu Ubuntu 20.04. Przed przyst\u0105pieniem do instalacji nale\u017cy  jednak pami\u0119ta\u0107 o kilku wa\u017cnych krokach, kt\u00f3rych wykonanie pozwoli zaoszcz\u0119dzi\u0107 nasz czas i pozwoli na bezproblemow\u0105 instalacj\u0119. <\/p>\n\n\n\n<p>Przed instalacj\u0105 aktualizujemy system<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt update\nsudo apt upgrade<\/code><\/pre>\n\n\n\n<p>Oraz wy\u015bwietlamy i zapisujemy nasz publiczny adres IP<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ip a show nazwa_interfejsu<\/code><\/pre>\n\n\n\n<p>W moim przypadku komenda wygl\u0105da tak<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ip a show eth0<\/code><\/pre>\n\n\n\n<p>Teraz przechodzimy do etapu instalacji oraz konfiguracji. Razem z OpenVPN instalujemy Easy-RSA na potrzeby utworzenia kluczy kryptograficznych.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install openvpn easy-rsa<\/code><\/pre>\n\n\n\n<p>Nast\u0119pnie jako zwyk\u0142y u\u017cytkownik tworzymy katalog easy-rsa oraz tworzymy do niego \u0142\u0105cze<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir ~\/easy-rsa\nln -s \/usr\/share\/easy-rsa\/* ~\/easy-rsa\/<\/code><\/pre>\n\n\n\n<p>P\u00f3\u017aniej zmieniamy w\u0142a\u015bciciela <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo chown u\u017cytkownik ~\/easy-rsa\nchmod 700 ~\/easy-rsa<\/code><\/pre>\n\n\n\n<p>W kolejnym kroku, zajmiemy si\u0119 utworzeniem kluczy PKI. Aby tego dokona\u0107 przechodzimy do wcze\u015bniej utworzonego folderu i tworzymy nowy plik tekstowy.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd ~\/easy-rsa\nnano vars<\/code><\/pre>\n\n\n\n<p>W nowo utworzonym pliku wpisujemy<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>set_var EASYRSA_ALGO \"ec\"\nset_var EASYRSA_DIGEST \"sha512\"<\/code><\/pre>\n\n\n\n<p>Po zapisaniu uruchamiamy skrypt tworz\u0105cy folder PKI<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.\/easyrsa init-pki<\/code><\/pre>\n\n\n\n<p>Teraz czas na utworzenie \u017c\u0105dania certyfikatu oraz utworzenie klucza prywatnego dla serwera<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.\/easyrsa gen-req nazwa_serwera nopass<\/code><\/pre>\n\n\n\n<p>Komenda ta generuje \u017c\u0105danie certyfikatu dla serwera <em>nazwa_serwera<\/em> bez zabezpieczania go has\u0142em, je\u017celi jednak chcemy je zabezpieczy\u0107 usuwamy parametr <em>nopass<\/em>. Teraz nale\u017cy przenie\u015b\u0107 wygenerowany plik \u017c\u0105dania do katalogu serwera OpenVPN<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo cp \/home\/user\/easy-rsa\/pki\/reqs\/nazwa_serwera.req \/etc\/openvpn\/server\/<\/code><\/pre>\n\n\n\n<p>A nast\u0119pnie przenie\u015b\u0107 go na nasz serwer CA oraz podpisa\u0107<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.\/easyrsa import-req \/tmp\/nazwa_serwera.req nazwa_serwera\n.\/easyrsa sign-req nazwa_serwera nazwa_serwera<\/code><\/pre>\n\n\n\n<p>Po podpisaniu, przenosimy pliki z powrotem na nasz serwer, a nast\u0119pnie przenosimy je do katalogu OpenVPN<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo cp \/tmp\/nazwa_serwera.crt \/tmp\/ca.crt \/etc\/openvpn\/server<\/code><\/pre>\n\n\n\n<p>Dla dodatkowej warstwy ochrony naszej sieci dodamy klucz szyfruj\u0105cy nasz ruch. Aby tego dokona\u0107 wchodzimy do folderu easy-rsa w katalogu domowym i generujemy klucz szyfruj\u0105cy, kt\u00f3ry p\u00f3\u017aniej przenosimy do katalogu serwera OpenVPN<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd ~\/easy-rsa\nopenvpn --genkey --secret ta.key\nsudo cp ta.key \/etc\/openvpn\/server<\/code><\/pre>\n\n\n\n<p>Gdy zako\u0144czymy powy\u017csze polecenia, mo\u017cemy utworzy\u0107 pliki konfiguracyjne dla klient\u00f3w. Najpierw tworzymy katalog dla plik\u00f3w konfiguracji i zmieniamy uprawnienia dost\u0119pu do niego.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir -p ~\/client-configs\/keys\nchmod -R 700 ~\/client-configs<\/code><\/pre>\n\n\n\n<p>Teraz tworzymy \u017c\u0105danie wydania certyfikatu dla serwera urz\u0119du certyfikacji i kopiujemy go do nowo utworzonego folderu<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.\/easyrsa gen-req klient1 nopass\ncp pki\/private\/klient1.key ~\/client-configs\/keys\/<\/code><\/pre>\n\n\n\n<p>Nast\u0119pnie przenosimy \u017c\u0105danie wydania certyfikatu do serwera certyfikacji i tam go podpisujemy a nast\u0119pnie przenosimy go z powrotem na serwer vpn.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd ~\/easy-rsa\n.\/easyrsa import-req \/tmp\/klient1.req klient1\n.\/easyrsa sign-req client klient1<\/code><\/pre>\n\n\n\n<p>Teraz umieszczamy go w folderze z certyfikatami klienta, wraz z plikami klucza szyfruj\u0105cego oraz certyfikatem serwera oraz zmieniamy prawa dost\u0119pu do tych plik\u00f3w.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cp \/tmp\/klient1.crt ~\/client-configs\/keys\ncp ~\/easy-rsa\/ta.key ~\/client-configs\/keys\/\nsudo cp \/etc\/openvpn\/server\/ca.crt ~\/client-configs\/keys\/\nsudo chown user.user ~\/client-configs\/keys\/*<\/code><\/pre>\n\n\n\n<p>Teraz, gdy mamy ju\u017c wygenerowane certyfikaty mo\u017cemy przyst\u0105pi\u0107 do konfiguracji serwera. Kopiujemy przyk\u0142adowy plik konfiguracyjny i rozpakowujemy go i otwieramy.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo cp \/usr\/share\/doc\/openvpn\/examples\/sample-config-files\/server.conf.gz \/etc\/openvpn\/server\/\nsudo gunzip \/etc\/openvpn\/server\/server.conf.gz\nsudo nano \/etc\/openvpn\/server\/server.conf<\/code><\/pre>\n\n\n\n<p>Dany plik konfiguracji jest po skopiowaniu gotowy do u\u017cytku, jednak mo\u017cemy dostosowa\u0107 w nim rzeczy takie jak na przyk\u0142ad:<br>-port,<br>-protok\u00f3\u0142 komunikacyjny,<br>-typ szyfrowania danych,<br>-i wiele innych.<\/p>\n\n\n\n<p>Po dokonaniu zmian kt\u00f3re chcemy wprowadzi\u0107, zapisujemy plik konfiguracyjny i zamykamy go.<\/p>\n\n\n\n<p>Je\u017celi w naszej konfiguracji nie ma b\u0142\u0119d\u00f3w, powinni\u015bmy bez problemu uruchomi\u0107 serwer.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl -f enable openvpn-server@server.service\nsudo systemctl start openvpn-server@server.service\nsudo systemctl status openvpn-server@server.service<\/code><\/pre>\n\n\n\n<p>Je\u017celi serwer wystartowa\u0142, mo\u017cemy zaj\u0105\u0107 si\u0119 tworzeniem plik\u00f3w konfiguracyjnych dla u\u017cytkownik\u00f3w. Najpierw tworzymy folder na certyfikaty i kopiujemy przyk\u0142adowy plik konfiguracji na kt\u00f3rego podstawie b\u0119d\u0105 tworzone kolejne.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir -p ~\/client-configs\/files\ncp \/usr\/share\/doc\/openvpn\/examples\/sample-config-files\/client.conf ~\/client-configs\/base.conf<\/code><\/pre>\n\n\n\n<p>Po przekopiowaniu, otwieramy plik konfiguracyjny w edytorze i zmieniamy niekt\u00f3re warto\u015bci tak, aby odpowiada\u0142y stanowi rzeczywistemu<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>remote adres_ip_serwera_vpn port_vpn_serwera\nproto udp #pami\u0119ta\u0107 o tym \u017ceby protok\u00f3\u0142 by\u0142 taki sam jak w konfiguracji serwera<\/code><\/pre>\n\n\n\n<p>Teraz mo\u017cemy utworzy\u0107 skrypt u\u0142atwiaj\u0105cy nam tworzenie u\u017cytkownik\u00f3w. Tworzymy nowy plik i uruchamiamy go w edytorze tekstu<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>nano ~\/client-configs\/make_config.sh<\/code><\/pre>\n\n\n\n<p>A nast\u0119pnie kopiujemy do niego nast\u0119puj\u0105c\u0105 zawarto\u015b\u0107<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash\n\nKEY_DIR=~\/client-configs\/keys\nOUTPUT_DIR=~\/client-configs\/files\nBASE_CONFIG=~\/client-configs\/base.conf\n\ncat ${BASE_CONFIG} \\\n    &lt;(echo -e '&lt;ca>') \\\n    ${KEY_DIR}\/ca.crt \\\n    &lt;(echo -e '&lt;\/ca>\\n&lt;cert>') \\\n    ${KEY_DIR}\/${1}.crt \\\n    &lt;(echo -e '&lt;\/cert>\\n&lt;key>') \\\n    ${KEY_DIR}\/${1}.key \\\n    &lt;(echo -e '&lt;\/key>\\n&lt;tls-crypt>') \\\n    ${KEY_DIR}\/ta.key \\\n    &lt;(echo -e '&lt;\/tls-crypt>') \\\n    > ${OUTPUT_DIR}\/${1}.ovpn<\/code><\/pre>\n\n\n\n<p>Dzi\u0119ki takiemu skryptowi za\u0142\u0105czamy razem z plikiem wszelkie klucze oraz certyfikaty, dzi\u0119ki czemu nie musimy wysy\u0142a\u0107 klientowi wielu plik\u00f3w, tylko jeden pakiet pozwalaj\u0105cy na po\u0142\u0105czenie .<\/p>\n\n\n\n<p>Aby zabezpieczy\u0107 skrypt przed niepowo\u0142anym dost\u0119pem, zmieniamy jego opcje zabezpiecze\u0144<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>chmod 700 ~\/client-configs\/make_config.sh<\/code><\/pre>\n\n\n\n<p>Gdy mamy ju\u017c ca\u0142\u0105 konfiguracj\u0119 za sob\u0105, mo\u017cemy utworzy\u0107 nasz plik konfiguracyjny potrzebny do po\u0142\u0105czenia z sieci\u0105 VPN.<br>Uruchamiamy skrypt tworz\u0105cy konfiguracj\u0119 dla klient\u00f3w.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd ~\/client-configs\n.\/make_config.sh klient1<\/code><\/pre>\n\n\n\n<p>Teraz, nasz skrypt stworzy jeden plik konfiguracyjny z certyfikatami i ustawieniami po\u0142\u0105czenia i zapisze go w podfolderze ~\/client-configs\/files jako klient1.ovpn. Ten plik mo\u017cna teraz wyda\u0107 klientowi i uruchomi\u0107.<\/p>\n\n\n\n<p>Nale\u017cy jednak pami\u0119ta\u0107, \u017ce pomimo poprawnego dzia\u0142ania serwera, warto przejrze\u0107 opcje konfiguracyjne i dostosowa\u0107 je do warunk\u00f3w panuj\u0105cych w naszej sieci, czy do innych urz\u0105dze\u0144, tak aby uzyska\u0107 jak najwi\u0119ksz\u0105 wydajno\u015b\u0107. Szczeg\u00f3\u0142owe informacje mo\u017cna znale\u017a\u0107 na stronie z <strong><em><a href=\"https:\/\/openvpn.net\/community-resources\/\" target=\"_blank\" rel=\"nofollow\">dokumentacj\u0105 techniczn\u0105<\/a><\/em><\/strong>.<\/p>\n\n\n\n<p>Je\u017celi masz jakie\u015b dodatkowe pytania odno\u015bnie konfiguracji, b\u0105d\u017a jeste\u015b zainteresowany zakupem serwera dla us\u0142ugi OpenVPN zapraszamy do kontaktu przez formularz znajduj\u0105cy si\u0119 u do\u0142u strony.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Po\u0142\u0105czenia VPN s\u0105 bardzo dobrym sposobem na zabezpieczenie po\u0142\u0105czenia z r\u00f3\u017cnymi serwerami zdalnymi b\u0105d\u017a z naszym miejscem pracy. Po\u0142\u0105czenie VPN mo\u017cemy zakupi\u0107 od jednego z wielu dostawc\u00f3w. Je\u017celi jednak wa\u017cna jest dla nas kontrola nad serwerem do kt\u00f3rego si\u0119 \u0142\u0105czymy, mo\u017cemy stworzy\u0107 go sami, wa\u017cne jest jednak, aby posiada\u0142 stabilne po\u0142\u0105czenie, by\u0142 wysoko dost\u0119pny oraz [&hellip;]<\/p>\n","protected":false},"author":8,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[28],"tags":[155,21,347,199,112],"class_list":["post-4777","post","type-post","status-publish","format-standard","hentry","category-openvpn","tag-nsix","tag-openvpn","tag-serwer-openvpn","tag-serwer-wirtualny","tag-vpn"],"_links":{"self":[{"href":"https:\/\/nsix.pl\/kb\/wp-json\/wp\/v2\/posts\/4777","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nsix.pl\/kb\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nsix.pl\/kb\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nsix.pl\/kb\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/nsix.pl\/kb\/wp-json\/wp\/v2\/comments?post=4777"}],"version-history":[{"count":7,"href":"https:\/\/nsix.pl\/kb\/wp-json\/wp\/v2\/posts\/4777\/revisions"}],"predecessor-version":[{"id":4842,"href":"https:\/\/nsix.pl\/kb\/wp-json\/wp\/v2\/posts\/4777\/revisions\/4842"}],"wp:attachment":[{"href":"https:\/\/nsix.pl\/kb\/wp-json\/wp\/v2\/media?parent=4777"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nsix.pl\/kb\/wp-json\/wp\/v2\/categories?post=4777"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nsix.pl\/kb\/wp-json\/wp\/v2\/tags?post=4777"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}