Die Interessengemeinschaft Perfect Privacy bietet ein umfangreiches Portfolio an Anonymisierungs-Dienstleistungen an, die über einen Pauschalpreis abgerechnet werden. Dazu gehören VPN-Tunnel über OpenVPN, PPTP, IPSec, Proxyserver mittels Squid oder SSH oder Socks. Für jemanden, der im Bereich IT-Sicherheit arbeitet ein wunschlos glücklich machendes Paket.
Aus Gründen der Zurechenbarkeit teilt man sich dort allerdings eine öffentliche IP-Adresse, was dazu führt, dass keine Ports durch die Adressumsetzung an die RFC1918 VPN interne IP-Adresse weitergeleitet werden. Fast, denn fünf Ports werden auf einigen Servern durchgereicht. Möchte man diese nutzen, heisst es rechnen. Gute eineinhalb DIN A4 Seiten Text beschreiben, wie man sich die Ports mittels dem Remote Port Forward genannten System ausknobeln kann.
Mein erster Gedanke: Das geht auch automatisch!
Das PHP-Skript pptables leistet das automatische berechnen und weiterleiten von Ports, die bei Perfect-Privacy mittels RPF zugewiesen wurden. Das Skript funktioniert unter Linux mit IPTables und nur für OpenVPN.
Download: pptables-entwurf1.tar.gz
Installation
1. Abhängigkeiten installieren
apt-get install php5-cli iptables
2. Archiv nach /etc/pptables entpacken
3. OpenVPN-Konfiguration von Perfect-Privacy um folgenden Eintrag ergänzen
# pptables RPF-Helper route-up /etc/pptables/openvpn_helper.php
Konfiguration
Das Skript hat vier Konfigurationvariablen.
$debug
- Wert 0 – Minimale Informationen an Syslog senden
- Wert 1 – Wie 0, mit Informationen zu jeder Portweiterleitung (Standard)
- Wert 2 – Wie 1, mit Ausgabe des erzeugten Firewallskripts
$rules
Speicherort des durch das Skript erzeugten Firewallskripts. Der Speicherort muss beschreibbar sein.
$hosts
Speicherort der Portweiterleitungen. Die Datei ist im CSV-Format mit Trennzeichen , zu halten. Beispiel: 192.168.1.254,8080 leitet den ersten Port des Tunnels an den Host 192.168.1.254 Port 8080 UDP und TCP weiter.
$prefix
Speicherort der benutzerdefinierten Regeln, die vor den Portweiterleitungen geladen werden sollen. Hier können die üblichen Verdächtigen (default-deny, MASQUERADE) eingetragen werden.
Ablauf
Das Skript wird nach dem erfolgreichen Herstellen der VPN-Verbindung aufgerufen. Es berechnet die weiter zu leitenden Ports und erstellt ein Firewallskript. Das Firewallskript enthält eine Prämabel die alle Chains löscht. Darauf folgt der benutzerdefinierte Regelteil. Ans Ende werden die erzeugten Regeln angefügt. So ist sichergestellt, dass bei Skriptfehlern der Netzzugang trotz fehlender Portweiterleitungen funktioniert.
Wenn der ausführende Benutzer root ist, wird das erzeugte Firewallskript ausgeführt.
Die Ausgabe erfolgt via Syslog:
Oct 31 14:36:18 firewall pptables[2370]: PerfectPrivacy tun0 int. IP: 10.0.20.38 Oct 31 14:36:18 firewall pptables[2370]: PerfectPrivacy tun0 freie Ports: 40038 41038 42038 43038 44038 Oct 31 14:36:18 firewall pptables[2370]: Port TCP/UDP 10.0.20.38:44038 --> 172.16.1.21:43123 Oct 31 14:36:18 firewall pptables[2370]: Port TCP/UDP 10.0.20.38:43038 --> 172.16.1.23:23235 Oct 31 14:36:18 firewall pptables[2370]: Port TCP/UDP 10.0.20.38:42038 --> 172.16.1.21:22 Oct 31 14:36:19 firewall pptables[2370]: PerfectPrivacy/pptables online!