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...
x86_64: http://packages.sw.be/rpmforge...
Signatur-Schlüssel importieren
rpm --import http://apt.sw.be/RPM-GPG-KEY.d...
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/
- 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...