12.07.2012
OpenVPN-Server in VM unter CentOS 6.2 (Minimal install)
>>Author: Thomas Bahn
>>Ort: Kiel (Schwentinental)
URL: http://www.assono.de/blog/d6plinks/OpenVPN-Server-in-VM-unter-CentOS-6.2-Minimal-installCategory: Linux, Administration
Wenn es dem Esel zu gut geht...In einem Anfall von mittlerem Wahnsinn kam ich auf die Idee, einen neuen OpenVPN-Server zu installieren. Es sollte eine virtuelle Maschine werden - auf einem ESXi-Server (VMware Hypervisor) 5.0 - als Betriebssystem habe ich CentOS in der aktuellen Version 6.3 ausgewählt, weil wir in letzter Zeit sehr erfolgreich einige Domino-Server unter diesem Betriebssystem installiert haben (CentOS ist binärkompatibel zum offiziell unterstützen Red Hat Enterprise Linux (RHEL)-Server). Und als sicherheitskritischer Server sollte der Server möglichst schlank bleiben, also insbesondere ohne grafischen Desktop. Als Startpunkt sollte daher die Minimal-Installation dienen.
Was soll ich sagen? Ich habe viel gelernt...
Herausforderung Nummer 1:
Das Netzwerk ist deaktiviert.
Ich persönlich komme eher aus der Ecke Debian und (K)Ubuntu, da kenne ich die entsprechenden Konfigurationsdateien. CentOS ist anders...
Hier findet man die wesentlichen Dateien etwas tiefer versteckt unter /etc/sysconfig/network-scripts/ifcfg-{ifn}, wobei ifn für das jeweilige Interface, wie z. B. eth0, steht.
Was hier auf alle Fälle fehlt, ist die Zeile:
ONBOOT=”YES”
Die Zeile
BOOTPROTO=DHCP
führt zu sinnvollen Einstellungen, aber beim Server möchte man da vielleicht doch etwas statischer bleiben:
BOOTPROTO=none
IPADDR=192.168.0.33
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
DNS1=192.168.0.1
DNS2=192.168.0.2
So sind die wichtigsten Dinge schon mal gut konfiguriert.
Network Configuration in minimal Linux installs
http://diznix.com/2011/07/11/network-configuration-in-minimal-linux-installs/
Mehr Details zu diesen Konfigurationsdateien gibt es natürlich auch in der CentOS-Dokumentation:
https://www.centos.org/docs/5/html/Deployment_Guide-en-US/s1-networkscripts-interfaces.html
Jetzt kann man auch das System endlich aktualisieren (yum update).
Und anschließend installiere ich noch nano (yum install nano), einen kleinen Texteditor, den ich klar gegenüber vi favorisiere.
Und jetzt noch schnell das OpenVPN-Paket installieren:
yum install openvpn
Aber das Paket gibt es nicht?! Zumindest nicht in den Standard-Repositories.
Naja, es gibt ja die Quellen zum Herunterladen bei openvpn.net und diese Anleitung:
OpenVPN and CentOS 5 Installation and Configuration Guide
www.throx.net/2008/04/13/openvpn-and-centos-5-installation-and-configuration-guide/
Aber eine weitergehende Recherche ergibt: Es gibt ein (recht vertrauenserweckendes) Repository für weitere Pakete namens RPMForge, das auch OpenVPN-Binary-Installationspakete enthalten soll.
Gut, aber wie und wo installiere ich unter CentOS ohne den grafischen Desktop weitere YUM-Repositories. Hatte ich schon erwähnt, das ich eher von Debian und (K)Ubuntu komme? Beim APT wüsste ich schon, wo und wie.
Aber auch das ist ganz einfach - wenn man weiß wie (oder Google bedienen kann).
Installing RPMforge
http://wiki.centos.org/AdditionalResources/Repositories/RPMForge
richtiges RPM-Paket herunterladen
i686: http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.i686.rpm
x86_64: http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
Signatur-Schlüssel importieren
rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
RPM testen
rpm -K rpmforge-release-0.5.2-2.el6.rf.*.rpm
RPM installieren
rpm -i rpmforge-release-0.5.2-2.el6.rf.*.rpm
Und jetzt klappt es auch mit dem OpenVPN.
Die Konfiguration bietet kaum Besonderheiten, aber als ich aus Sicherheitsgründen ("Security by Obscurity")
den UDP-Port geändert habe (weg vom Standardport UDP 1194),
lässt sich der OpenVPN-Server nicht mehr starten.
Anleitungen zur Konfiguration von OpenVPN gibt es u.a. hier:
OpenVPN Server On CentOS 5.2
http://www.howtoforge.com/openvpn-server-on-centos-5.2
Install OpenVPN on CentOS 5
http://wiki.centos.org/EdHeron/CentOS5OpenVPN?highlight=(openvpn)
Wiki des OpenVPN e.V.
http://wiki.openvpn.eu/index.php/Hauptseite
HOWTO-Bereich auf openvpn.net
http://openvpn.net/index.php/open-source/documentation/howto.html
Diesmal habe ich aber schon einen konkreten Verdacht: Standardmäßig ist bei CentOS das Security Enhanced Linux (SELinux) aktiviert.
Man könnte es jetzt einfach ausschalten, indem man in der Datei /etc/selinux/config die Einstellung von enforcing auf disabled stellt. Aber das wäre jetzt doch zu einfach.
Außerdem möchte ich ja ein möglichst sicheres System. Aber wo kann man dann die SELinux-Regeln für Programme wie OpenVPN anpassen. Eine erste Suche im /etc/-Verzeichnis liefert keine heißen Kandidaten.
Suchmaschine, ... Suchmaschine ... auf dem Monitor...
Im CentOS-Wiki werde ich fündig zum Thema SELinux.
http://wiki.centos.org/HowTos/SELinux?highlight=(selinux)
Mit semanage port -l kann ich mir die für die einzelnen Programme freigeschalteten Ports ansehen und mit semanage port -a -t openvpn_port_t -p tcp 11194 auch ändern (hier: neuen TCP-Port 11194 hinzufügen).
Kann? Könnte, wenn das semanage-Paket installiert wäre. Wo bekommt man das schon wieder her?
Das Programm findet man natürlich im Paket policycoreutils-python, wo denn sonst?
Also kurz das Paket installiert, der zusätzliche Port erlaubt, Neustart und glücklich sein.
Last but not least: Die installierten Pakete sollen automatisch aktualisiert werden.
Bei der Desktop-Installation sind das nur wenige Mausklicks, aber wo oder wie macht man das mit ohne Desktop?
Die Antwort ist das Paket yum-cron.
CentOS Yum Automatic Updates
http://scottlinux.com/2010/12/16/centos-yum-automatic-updates/
Alternativ gibt es auch yum-updatesd, mit dem es wohl aber öfter mal Probleme gibt.
Ein Thema, das ich noch nicht lösen konnte, ist, dass ich den OpenVPN-Server eigentlich im Bridging-Modus konfigurieren wollte (mit tap-Device). Ich hatte die Bridge aufgebaut, alles konfiguriert, die Verbindung wurde problemlos aufgebaut, nur kam ich vom VPN-Client (OpenVPN GUI 1.0.3 unter Windows 7 Professional x64, mit Admin-Rechten gestartet) nirgendwo hin. Den letzten Hinweis, den ich dazu fand, war, dass man beim ESXi-Server auf dem Netzwerk-Adapter den Promiscous-Modus erlauben müsse, was ich auch getan habe. Aber falls noch jemand eine Idee hat...
Das Netzwerk ist deaktiviert.
Ich persönlich komme eher aus der Ecke Debian und (K)Ubuntu, da kenne ich die entsprechenden Konfigurationsdateien. CentOS ist anders...
Hier findet man die wesentlichen Dateien etwas tiefer versteckt unter /etc/sysconfig/network-scripts/ifcfg-{ifn}, wobei ifn für das jeweilige Interface, wie z. B. eth0, steht.
Was hier auf alle Fälle fehlt, ist die Zeile:
ONBOOT=”YES”
Die Zeile
BOOTPROTO=DHCP
führt zu sinnvollen Einstellungen, aber beim Server möchte man da vielleicht doch etwas statischer bleiben:
BOOTPROTO=none
IPADDR=192.168.0.33
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
DNS1=192.168.0.1
DNS2=192.168.0.2
So sind die wichtigsten Dinge schon mal gut konfiguriert.
Network Configuration in minimal Linux installs
http://diznix.com/2011/07/11/network-configuration-in-minimal-linux-installs/
Mehr Details zu diesen Konfigurationsdateien gibt es natürlich auch in der CentOS-Dokumentation:
https://www.centos.org/docs/5/html/Deployment_Guide-en-US/s1-networkscripts-interfaces.html
Jetzt kann man auch das System endlich aktualisieren (yum update).
Und anschließend installiere ich noch nano (yum install nano), einen kleinen Texteditor, den ich klar gegenüber vi favorisiere.
Und jetzt noch schnell das OpenVPN-Paket installieren:
yum install openvpn
Aber das Paket gibt es nicht?! Zumindest nicht in den Standard-Repositories.
Naja, es gibt ja die Quellen zum Herunterladen bei openvpn.net und diese Anleitung:
OpenVPN and CentOS 5 Installation and Configuration Guide
www.throx.net/2008/04/13/openvpn-and-centos-5-installation-and-configuration-guide/
Aber eine weitergehende Recherche ergibt: Es gibt ein (recht vertrauenserweckendes) Repository für weitere Pakete namens RPMForge, das auch OpenVPN-Binary-Installationspakete enthalten soll.
Gut, aber wie und wo installiere ich unter CentOS ohne den grafischen Desktop weitere YUM-Repositories. Hatte ich schon erwähnt, das ich eher von Debian und (K)Ubuntu komme? Beim APT wüsste ich schon, wo und wie.
Aber auch das ist ganz einfach - wenn man weiß wie (oder Google bedienen kann).
Installing RPMforge
http://wiki.centos.org/AdditionalResources/Repositories/RPMForge
richtiges RPM-Paket herunterladen
i686: http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.i686.rpm
x86_64: http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
Signatur-Schlüssel importieren
rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
RPM testen
rpm -K rpmforge-release-0.5.2-2.el6.rf.*.rpm
RPM installieren
rpm -i rpmforge-release-0.5.2-2.el6.rf.*.rpm
Und jetzt klappt es auch mit dem OpenVPN.
Die Konfiguration bietet kaum Besonderheiten, aber als ich aus Sicherheitsgründen ("Security by Obscurity")
Anleitungen zur Konfiguration von OpenVPN gibt es u.a. hier:
OpenVPN Server On CentOS 5.2
http://www.howtoforge.com/openvpn-server-on-centos-5.2
Install OpenVPN on CentOS 5
http://wiki.centos.org/EdHeron/CentOS5OpenVPN?highlight=(openvpn)
Wiki des OpenVPN e.V.
http://wiki.openvpn.eu/index.php/Hauptseite
HOWTO-Bereich auf openvpn.net
http://openvpn.net/index.php/open-source/documentation/howto.html
Diesmal habe ich aber schon einen konkreten Verdacht: Standardmäßig ist bei CentOS das Security Enhanced Linux (SELinux) aktiviert.
Man könnte es jetzt einfach ausschalten, indem man in der Datei /etc/selinux/config die Einstellung von enforcing auf disabled stellt. Aber das wäre jetzt doch zu einfach.
Außerdem möchte ich ja ein möglichst sicheres System. Aber wo kann man dann die SELinux-Regeln für Programme wie OpenVPN anpassen. Eine erste Suche im /etc/-Verzeichnis liefert keine heißen Kandidaten.
Suchmaschine, ... Suchmaschine ... auf dem Monitor...
Im CentOS-Wiki werde ich fündig zum Thema SELinux.
http://wiki.centos.org/HowTos/SELinux?highlight=(selinux)
Mit semanage port -l kann ich mir die für die einzelnen Programme freigeschalteten Ports ansehen und mit semanage port -a -t openvpn_port_t -p tcp 11194 auch ändern (hier: neuen TCP-Port 11194 hinzufügen).
Kann? Könnte, wenn das semanage-Paket installiert wäre. Wo bekommt man das schon wieder her?
Das Programm findet man natürlich im Paket policycoreutils-python, wo denn sonst?
Also kurz das Paket installiert, der zusätzliche Port erlaubt, Neustart und glücklich sein.
Last but not least: Die installierten Pakete sollen automatisch aktualisiert werden.
Bei der Desktop-Installation sind das nur wenige Mausklicks, aber wo oder wie macht man das mit ohne Desktop?
Die Antwort ist das Paket yum-cron.
CentOS Yum Automatic Updates
http://scottlinux.com/2010/12/16/centos-yum-automatic-updates/
- yum install yum-cron
- chkconfig yum-cron on
- /etc/init.d/yum-cron start
Alternativ gibt es auch yum-updatesd, mit dem es wohl aber öfter mal Probleme gibt.
Ein Thema, das ich noch nicht lösen konnte, ist, dass ich den OpenVPN-Server eigentlich im Bridging-Modus konfigurieren wollte (mit tap-Device). Ich hatte die Bridge aufgebaut, alles konfiguriert, die Verbindung wurde problemlos aufgebaut, nur kam ich vom VPN-Client (OpenVPN GUI 1.0.3 unter Windows 7 Professional x64, mit Admin-Rechten gestartet) nirgendwo hin. Den letzten Hinweis, den ich dazu fand, war, dass man beim ESXi-Server auf dem Netzwerk-Adapter den Promiscous-Modus erlauben müsse, was ich auch getan habe. Aber falls noch jemand eine Idee hat...

Comments
Ich verwende einen iptable Generator namens Firewallbuilder - ein sehr mächtiges tool das wunderbare startscripts erstellt.
Dummerweise gibts grundsätzlich ein Problem mit iptables.
Setzt du nämlich regeln für ein Interface das noch nicht up ist greifen die regeln nicht wenn es up ist (und andere merkwürdigkeiten können auftreten)
Nun zum Problem - starte ist das script kurtz nachdem netwrking gestartet ist - so solls ja sein - dann ist aber openvpn noch nicht up
starte ich das script erst nachdem openvpn gestartet ist wäre der server unprotected bis openvpn eine verdinsung hat - wäre äußßert übel im fall das der server nicht errreichbar ist aber die client rebootet
ahja zu erwähnung mein server ist im openvpn netz nur client
Meine Lösung in debian war das eledige openvpn als statischen dataper zu definieren (mit pre ups openvpn mktun0 usw)
perfekt
Aber in Centos???
Preup gibts ned, wie definiere ich jetzt also mein statisches interface um openvpn später draufzuhängen?
der vorteil der statischen config ist das egal was passiert das interface immer da bleibt auch wenn openvpn neu einwählt. damit gibts dann auch keine probleme sollte man mal warum auch immer einen dienst auf die openvpnip zu binden und andere späßchen und am wichtigsten - iptables
Hast du eine idee das im centos zu configen?
btw 2 tage cent und langsam hass ich es :))
wenn debian nicht solche merkwürdigne probleme mit kvm in letzter zeit hätte ... (performanceeinbrüche I/O merkügkeiten etc) auch bringt cent os am adaptec bis zu 20% besseres IO für virtuelle gäste wer weis warum seufz
wenn nur das networking nicht wäre....
yum install tunctl - des brauchma
DEVICE=tun1
BOOTPROTO=static
ONBOOT=yes
TYPE=Tap
IPADDR=192.168.1.17
NETMASK=255.255.255.255
NETWORK=192.168.1.18
USERCTL=yes
der trick ist tap sollte eigentlich tunctl ausführen und den virtuellen dataper erstellen
dazu muss aber unbedingt typ=tap gesetzt sein sonst greift das script nicht.
WICHTIG - der adapter muss tunxx heissen - nur wenn tun im adapternamen steht macht tunctl einen tun adapter ansonsten wird ein TAP gemacht - wollen wir so gar nicht.
ich muss es noch testen ob openvpn den adapter akzeptiert - sollte es aber
auf jedenfall erstellt dieses networkscript einen statischen tun adapter
damit sind alle firewallprobleme gelöst wenn openvpn den adapter verwenden mag :))
ps: solltest unbedingt auch am server so machen.
sprich einen statischen tun/tap adapter
und openvpn auch auf statische config setzen
dann ahst vom systemboot bis ende bzw bei network reload immer einen virtuellen adapter drinnen. d.h. du kennst immer den systemstatus, und noch wichtiger firewall,statische routen etc machen sicher keine probleme
das unter linux die adapter dynamisch hinzugefügt werden können ist ja ganz nett aber für einen server weniger gut.
deswegen braucht man ja auch einen arsch voll up und down scripte
deswegen sollte man eigentlich auch nicht ifup oder ifdown auf einem produktionsystem überhaupt in die hand nehmen und wenn nie vergessen die firewall neu zu laden sonst hast ein desaster
am besten alles statisch konfigurieren und bei änderungen rebooten
danahc firewall test , so kennst immer den status der firewall und der adapter
arbeitest du mit ifup und down könnte es passieren das zb firewallregeln nicht greifen, du testet die verbidung von einen neuen daemon - rennt - 5 wochen später reboot - rennt nimmer warum - ahh firewall war nie richtig konfiguriert :)))