{"id":3307,"date":"2014-10-07T07:51:07","date_gmt":"2014-10-07T05:51:07","guid":{"rendered":"http:\/\/rephlex.de\/blog\/?p=3307"},"modified":"2015-10-05T07:10:18","modified_gmt":"2015-10-05T05:10:18","slug":"howto-linux-openvpn-server-schnell-und-einfach-installieren-und-konfigurieren","status":"publish","type":"post","link":"https:\/\/rephlex.de\/blog\/2014\/10\/07\/howto-linux-openvpn-server-schnell-und-einfach-installieren-und-konfigurieren\/","title":{"rendered":"HowTo: Linux OpenVPN Server schnell und einfach installieren und konfigurieren"},"content":{"rendered":"<p>Die Anleitung sieht kompliziert aus, ist in Wirklichkeit aber einfach nur lang.\u00a0Es wurde Wert darauf gelegt dass man die Kommandoschnipsel\u00a0einfach copy-pasten kann, es sollte also niemand den Verstand verlieren dabei.<\/p>\n<p>Der trickreichste Part ist der mit den Zertifikaten, aber das bedeutet irgendwie\u00a0bei jeder Software Pain in the Ass &#8211; unsere\u00a0Cryptosysteme sind einfach\u00a0unsch\u00f6n\u00a0zu handhaben.<\/p>\n<p>WIe gesagt, copy-paste <em>sollte<\/em>\u00a0in den meisten Umgebungen klappen \ud83d\ude42<\/p>\n<p>Los geht&#8217;s:<\/p>\n<p>Die Installation von OpenVPN\u00a0geschieht unter Debian\/Ubuntu mittels\u00a0apt-get install openvpn, unter RHEL\/CentOS bewirkt man gleiches mit yum install openvpn.<!--more--><\/p>\n<p>Wir besorgen uns nun easyrsa3 und erstellen Schl\u00fcssel und Zertifikate, das ist\u00a0unbedingt notwendig:<\/p>\n<p>Client-Zertifikat:<\/p>\n<blockquote><p>mkdir $HOME\/clientside<br \/>\ncd $HOME\/clientside<br \/>\ngit clone git:\/\/github.com\/OpenVPN\/easy-rsa<br \/>\ncd easy-rsa\/easyrsa3<br \/>\n.\/easyrsa init-pki<br \/>\n.\/easyrsa gen-req client1 nopass<\/p><\/blockquote>\n<p>Server-Zertifikat:<\/p>\n<blockquote><p>mkdir $HOME\/serverside<br \/>\ncd $HOME\/serverside<br \/>\ngit clone git:\/\/github.com\/OpenVPN\/easy-rsa<br \/>\ncd easy-rsa\/easyrsa3<br \/>\n.\/easyrsa init-pki<br \/>\n.\/easyrsa build-ca<br \/>\n.\/easyrsa gen-req server nopass<br \/>\n.\/easyrsa sign-req server server<br \/>\nopenssl dhparam -out dh2048.pem 2048<br \/>\n\/usr\/sbin\/openvpn &#8211;genkey &#8211;secret ta.key<br \/>\n.\/easyrsa import-req $HOME\/clientside\/easy-rsa\/easyrsa3\/pki\/reqs\/client1.req client1<br \/>\n.\/easyrsa sign-req client client1<\/p><\/blockquote>\n<p>Alles in die richtigen Verzeichnisse kopieren:<\/p>\n<blockquote><p>sudo cp $HOME\/serverside\/easy-rsa\/easyrsa3\/pki\/ca.crt \/etc\/openvpn\/<br \/>\nsudo cp $HOME\/serverside\/easy-rsa\/easyrsa3\/pki\/issued\/server.crt \/etc\/openvpn\/<br \/>\nsudo cp $HOME\/serverside\/easy-rsa\/easyrsa3\/dh2048.pem \/etc\/openvpn\/<br \/>\nsudo cp $HOME\/serverside\/easy-rsa\/easyrsa3\/pki\/private\/server.key \/etc\/openvpn\/<br \/>\nsudo cp $HOME\/serverside\/easy-rsa\/easyrsa3\/ta.key \/etc\/openvpn\/<br \/>\ncp $HOME\/serverside\/easy-rsa\/easyrsa3\/ta.key $HOME\/clientside\/<br \/>\ncp $HOME\/serverside\/easy-rsa\/easyrsa3\/pki\/issued\/client1.crt $HOME\/clientside\/<br \/>\ncp $HOME\/serverside\/easy-rsa\/easyrsa3\/pki\/ca.crt $HOME\/clientside\/<br \/>\ncp $HOME\/clientside\/easy-rsa\/easyrsa3\/pki\/private\/client1.key $HOME\/clientside\/<\/p><\/blockquote>\n<p>Client Script (bei der IP-Adresse muss die IP stehen, zu der der Client sp\u00e4ter verbinden soll &#8211; also die des OpenVPN-Servers):<\/p>\n<blockquote><p>nano $HOME\/clientside\/client.ovpn<\/p>\n<p>client<br \/>\ndev tun<br \/>\nproto udp<br \/>\nremote change_this_to_server_IP_address 34557<br \/>\nresolv-retry infinite<br \/>\nnobind<br \/>\npersist-key<br \/>\npersist-tun<br \/>\nca ca.crt<br \/>\ncert client1.crt<br \/>\nkey client1.key<br \/>\ntls-auth ta.key 1<br \/>\nremote-cert-tls server<br \/>\ncipher AES-256-CBC<br \/>\ncomp-lzo<br \/>\nverb 3<\/p><\/blockquote>\n<p>Jetzt f\u00fcgen\u00a0wir Keys und Zertifikat mit dem\u00a0Client-Script zusammen, sodass wir nur eine &#8222;.ovpn&#8220; Datei haben, die wir an die Clients verteilen m\u00fcssen:<\/p>\n<blockquote><p>cd $HOME\/clientside\/<\/p><\/blockquote>\n<p>[Das Script\u00a0<a href=\"http:\/\/rephlex.de\/blog\/wp-content\/uploads\/2014\/10\/merge.sh_.gz\">merge.sh.gz<\/a>\u00a0hier heruntenladen und ablegen]<\/p>\n<blockquote><p>gunzip merge.sh<br \/>\nsudo chmod +x merge.sh<br \/>\nsudo .\/merge.sh<br \/>\nsudo chown $USER $HOME\/clientside\/client.ovpn<\/p><\/blockquote>\n<p>Das Clientscript ist somit abgeschlossen. Jetzt muss der Server noch konfiguriert werden:<\/p>\n<p>Wir bearbeiten die Datei \/etc\/openvpn.conf:<\/p>\n<blockquote><p>port 34557<br \/>\nproto udp<br \/>\ndev tun<br \/>\nca ca.crt<br \/>\ncert server.crt<br \/>\nkey server.key<br \/>\ntls-auth ta.key 0<br \/>\ndh dh2048.pem<br \/>\nserver 10.8.0.0 255.255.255.0<br \/>\ncipher AES-256-CBC<br \/>\ncomp-lzo<br \/>\npersist-key<br \/>\npersist-tun<br \/>\nuser nobody<br \/>\ngroup nogroup<br \/>\nstatus openvpn-status.log<br \/>\nverb 3<br \/>\ntun-mtu 1500<br \/>\ntun-mtu-extra 32<br \/>\nmssfix 1450<br \/>\npush &#8222;redirect-gateway def1&#8220;<br \/>\npush &#8222;dhcp-option DNS 8.8.8.8&#8220;<br \/>\npush &#8222;dhcp-option DNS 8.8.4.4&#8220;<br \/>\nkeepalive 5 30<\/p><\/blockquote>\n<p>Eventuell m\u00f6chte man\u00a0unten statt 8.8.8.8 (Google-DNS) seine eigenen Nameserver eintragen. Die Zeile &#8222;server&#8220; gibt an, welches Netz f\u00fcr die OpenVPN-Clients vergeben wird.<\/p>\n<p>In der Datei\u00a0\/etc\/sysctl.conf tr\u00e4gt man nun<\/p>\n<blockquote><p>net.ipv4.ip_forward=1<\/p><\/blockquote>\n<p>ein. Der Linux-Host wird dadurch beim n\u00e4chsten Reboot (und auch wirklich erst dann, den m\u00fcssen wir zum Ende machen!)\u00a0zum Router, das hei\u00dft er vermittelt Pakete zwischen seinen Netzwerkinterfaces.<\/p>\n<p>Die IPTables-Firewall will auch noch konfiguriert werden, genauer m\u00f6chte man, dass NAT a.k.a. Masquerading stattfindet. Der Linux Host soll quasi &#8222;Fritzbox&#8220; f\u00fcr die OpenVPN-Clients in Richtung Internet spielen.<\/p>\n<p>sudo nano \/usr\/local\/bin\/firewall.sh<\/p>\n<blockquote><p>#!\/bin\/bash<br \/>\niptables -t filter -F<br \/>\niptables -t nat -F<br \/>\niptables -A FORWARD -m state &#8211;state RELATED,ESTABLISHED -j ACCEPT<br \/>\niptables -A FORWARD -s &#8222;10.8.0.0\/24&#8220; -j ACCEPT<br \/>\niptables -A FORWARD -j REJECT<br \/>\niptables -t nat -A POSTROUTING -s &#8222;10.8.0.0\/24&#8220; -j MASQUERADE<\/p><\/blockquote>\n<p>Das Firewall-Script wird nun ausf\u00fchrbar gemacht, gestartet und das Resultat gepr\u00fcft:<\/p>\n<blockquote><p>sudo chmod +x \/usr\/local\/bin\/firewall.sh<br \/>\nsudo \/usr\/local\/bin\/firewall.sh<br \/>\nsudo iptables &#8211;list<\/p><\/blockquote>\n<p>Sinnvoll ist es nun, das Firewallscript rebootfest zu machen, deshalt kann das Script noch in die \/etc\/rc.local geschrieben werden. Es ist ausreichend, in \/etc\/rc.local das oben angelegte Script aufzuf\u00fchren:<\/p>\n<blockquote><p>\/usr\/local\/bin\/firewall.sh<\/p><\/blockquote>\n<p>Unter RHEL\/CentOS braucht es noch ein &#8222;chkconfig openvpn on&#8220; um den OpenVPN-Dienst automatisch starten zu lasen. Unter Debian\/Ubuntu geht das mit dem Kommando &#8222;update-rc.d openvpn defaults&#8220;.<\/p>\n<p>Den Linux Host rebootet man nun (wir erinnern uns: ipv4 forwarding&#8230;), und fertig ist das OpenVPN-Gateway!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Anleitung sieht kompliziert aus, ist in Wirklichkeit aber einfach nur lang.\u00a0Es wurde Wert darauf gelegt dass man die Kommandoschnipsel\u00a0einfach copy-pasten kann, es sollte also niemand den Verstand verlieren dabei. Der trickreichste Part ist der mit den Zertifikaten, aber das bedeutet irgendwie\u00a0bei jeder Software Pain in the Ass &#8211; unsere\u00a0Cryptosysteme sind einfach\u00a0unsch\u00f6n\u00a0zu handhaben. WIe gesagt, [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[4],"tags":[],"class_list":["post-3307","post","type-post","status-publish","format-standard","hentry","category-techtalk"],"_links":{"self":[{"href":"https:\/\/rephlex.de\/blog\/wp-json\/wp\/v2\/posts\/3307","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rephlex.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rephlex.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rephlex.de\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/rephlex.de\/blog\/wp-json\/wp\/v2\/comments?post=3307"}],"version-history":[{"count":7,"href":"https:\/\/rephlex.de\/blog\/wp-json\/wp\/v2\/posts\/3307\/revisions"}],"predecessor-version":[{"id":3420,"href":"https:\/\/rephlex.de\/blog\/wp-json\/wp\/v2\/posts\/3307\/revisions\/3420"}],"wp:attachment":[{"href":"https:\/\/rephlex.de\/blog\/wp-json\/wp\/v2\/media?parent=3307"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rephlex.de\/blog\/wp-json\/wp\/v2\/categories?post=3307"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rephlex.de\/blog\/wp-json\/wp\/v2\/tags?post=3307"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}