Manchmal möchte man auch ausgefallene Dinge mit dem eigenen Server anstellen, wie zum Beispiel vor einigen Tagen so geschehen mit einem KVM Gast. Dieser Gast sollte als Zielsetzung nur Zugriff auf einen einzelnen VPN-Server im Internet bekommen, um dorthin eine VPN-Verbindung aufzubauen. Wie ist das am einfachsten zu erreichen?
Die einfachste Art einen KVM Gast in das eigene Heimnetzwerk zu hängen ist, ihn über eine Netzwerkbrücke einzubinden. So auch hier geschehen. Eine Verbindung sollte per OpenVPN aufgebaut werden, die dieser Gast transparent nutzen kann, um Verbindungen mit dem Internet aufzubauen, wenn nötig.
Die optimale Lösung wäre natürlich, eine weitere Netzwerkbrücke einzurichten, über die das VPN-Interface mit dem Interface des KVM Gasts gebrückt wird. So müsste der Gast nichts vom lokalen Netzwerk wissen. Die Vorraussetzung für eine Netzwerkbrücke ist aber, dass Ethernet-Frames ausgetauscht werden können. Diese Fähigkeit bietet OpenVPN grundsätzlich zwar, aber nicht in der angemieteten Konfiguration. Dort wurde nur geroutet. Was also tun?
Die Lösung bestand darin, den Gast die OpenVPN-Verbindung direkt aufbauen zu lassen.
Das lässt leider dem Gast die Möglichkeit offen, Verbindungen in das lokale Netzwerk zu öffnen, um so zum Beispiel einen Portscan oder anderen Angriff gegen das LAN durchzuführen. Um dieses Problem zu lösen, könnte man iptables Regeln auf dem Host hinzufügen, die den Datenverkehr des Gastes im LAN einschränken. Die dafür notwendigen iptables Regeln könnten so aussehen:
VMHOST=10.0.0.1 VMGAST=10.0.0.2 GW_DNS=10.0.0.254 VPNSER=192.168.10.10 iptables -A FORWARD -s $VMGAST -d $GW_DNS -j ACCEPT iptables -A FORWARD -s $VMGAST -d $VPNSER -j ACCEPT iptables -A FORWARD -s $VMGAST -j DROP iptables -A INPUT -s $VMGAST -j DROP
Die Regeln erlauben es dem Gast nur mit dem Router und dem VPN-Server auszutauschen. Zu beachten ist hier, dass statt die Pakete abzuweisen (REJECT) die Pakete verworfen (DROP) werden, um bei Portscans durch den Gast keine offenen Ports erkennen zu können.
Mit diesen Regeln bleibt aber immer noch die Möglichkeit des Gastes, seine IP-Adresse zu ändern. Um diese Änderung zumindest erkennen zu können, wird die MAC-Adresse des Gasts statisch der IP-Adresse zugeordnet:
arp -i br0 -s 10.0.0.2 -s 00:AB:CD:EF:00:AB
Die Lösung ist leider noch nicht optimal, aber läuft sehr zuverlässig.