Für ein Kundenszenrario muss ein Site-to-Site VPN (Standortvernetzung) auf Basis von OpenVPN zwischen einer Securepoint UTM RC100 und einer pfSense realisiert werden. Grundsätzlich untersützen beide Firewalls OpenVPN, allerdings unterscheiden sich die Konfigurationsmöglichkeiten.

In der Zentrale des Kunden wird die RC100 verwendet, die auf Basis dieses Wiki-Eintrags bis zum Punkt “Einrichtung des Clients” konfiguriert wurde. Daraus ergibt sich, das die RC100 den OpenVPN-Server darstellt und die pfSense folglich den Client.

Nachfolgend wird auf die Konfiguration von pfSense eingegangen.

Zertifikate importieren

  • Am Webinterface von pfSense anmelden.
  • Auf “System – Cert Manager” klicken.
  • Auf der Registerkarte “CAs” auf das “+”-Symbol (“add or import ca”) klicken.
  • Im Feld “Descriptive name” einen Namen, der Einfachheit/Übersicht halber den gleichen wie in der UTM, eintragen.
  • Im Feld “Certificate data” den Bereich von “…BEGIN..” bis “…END…” aus der zuvor exportierten “CA.pem”-Datei einfügen. Der private Schlüssel muss nicht eingetragen werden.
  • Auf die Schaltfläche “Save” klicken.
  • Zur Registerkarte “Certificates” wechseln und auf das “+”-Symbol (“add or import certificate”) klicken.
  • Im Feld “Descriptive name” einen Namen, der Einfachheit/Übersicht halber den gleichen wie in der UTM, eintragen.
  • Im Feld “Certificate data” den Bereich von “…BEGIN..” bis “…END…” aus der zuvor exportierten “Client.pem”-Datei einfügen.
  • Im Feld “Private key data” den Bereich von “…BEGIN…” bis “…END…” aus der zuvor exportierten “Client.pem”-Datei einfügen.
  • Auf die Schaltfläche “Save” klicken.

OpenVPN-Client konfigurieren

  • Im Webinterface auf “VPN – OpenVPN” klicken.
  • Zur Registerkarte “Client” wechseln und auf das “+”-Symbol (“add client”) klicken.
  • Im Feld “Service host or address” die WAN-Adresse der UTM eintragen. Ggf. den “Server port” anpassen.
  • Optional: Im Feld “Description” einen Namen für diese Verbindung eingeben.
  • Den Haken bei “TLS Authentication” entfernen.
  • Ggf. bei “Peer Certificate Authority” das CA-Zertifikat auswählen.
  • Bei “Client Certificate” das Client-Zertifikat auswählen.
  • Bei “Encryption algorithm” “BF-CBC (128-bit)” auswählen.
  • Im Feld “IPv4 Tunnel Network” das Transfer-Netz in CIDR-Notation, z.B. 192.168.250.0/24, eintragen.
  • Im Feld “IPv4 Remote Network/s” das entfernte Netzwerk in CIDR-Notation, z.B. 192.168.22.0/24, eintragen.
  • Auf die Schaltfläche “Save” klicken.

Alle anderen Felder bleiben auf den Vorgaben!

Firewall konfigurieren

  • Im Webinterface auf “Firewall – Rules” klicken.
  • Zur Registerkarte “OpenVPN” wechseln und auf das “+”-Symbol (“add new rule”) klicken.
  • Bei “Protocol” “any” auswählen.
  • Im Feld “Description” eine Beschreibung bzw. einen Namen für die Regel eingeben.
  • Auf die Schaltfläche “Save” klicken.
  • Zum Übernehmen der Änderungen auf die Schaltfläche “Apply changes” klicken.

Nun können sich beide Seiten gegenseitig erreichen. Zur Sicherheit sollte man restriktivere Firewall-Regeln verwenden und so z.B. nur gewünschte Dienste zulassen. Das kann ebenfalls dazu führen, unnötigen Verkehr zu vermeiden, was wiederrum zuträglich für die Performance ist.

Troubleshooting

Unter Umständen wird bei pfSense die Route zum Remote-Netzwerk nicht gesetzt. Der Fehler ist an zwei Stellen (abgesehen davon, dass das VPN nicht so funktioniert wie es soll) erkennbar:

Unter “Status – System Logs – OpenVPN” findet sich folgender Eintrag:

Sep 1 15:00:50     openvpn[73599]: ERROR: FreeBSD route add command failed: external program exited with error status: 1

Und unter “Diagnostics – Routes” fehlt ein Eintrag wie z.B.

192.168.22.0/24     192.168.250.2     UGS     0     20     1500     ovpnc1

Über ein shell script kann beim Starten die Route gesetzt werden. Entweder an der lokalen Shell oder via ssh folgende Befehle ausführen:

touch /usr/local/etc/rc.d/static-routes.sh
chmod 755 /usr/local/etc/rc.d/static-routes.sh
echo “route add -net 192.168.22.0/24 192.168.250.2” > /usr/local/etc/rc.d/static-routes.sh

Alternativ kann man das Skript auch über WinSCP anlegen.

Damit es keine unnötige Fehlermeldungen gibt, sollte man das Remote Network aus der Client-Konfiguration entfernen.

Nach diesem Troubleshooting kann man sagen, welche Wege nicht funktionieren:

 earlyshellcmd, shellcmd, rc.local

Beide “shellcmd”-Varianten starten zu früh, zu einem Zeitpunkt, bei dem das Netzwerk noch nicht bereit ist und “rc.local” wird von pfSense nicht unterstützt.

Update 24.10.2014

Um das Problem der fehlenden Route auf der pfSense-Seite (einfacher) zu lösen, kann man das Subnetz in der Konfiguration der Securepoint UTM eintragen. Die Route wird dann automatisch im pfSense-Router gesetzt:

  • Auf “VPN – SSL-VPN” klicken.
  • Zur Registerkarte “REMOTE-CLIENT-PROFILE” wechseln.
  • Die entsprechende Site-to-Site-Verbindung bearbeiten.
  • Im Feld “Subnetzte übermitteln*:” das lokale Subnetz der Securepoint UTM eintragen. Am Beispiel des Wiki-Eintrags wäre das “192.168.22.0/24”.
  • Auf die Schaltflächen “Speichern” und “Schließen” klicken.

Ab dem nächsten Verbindungsaufbau wird die Route auf der Client-Seite automatisch gesetzt.

Quellen

pfSense Docs – Executing commands at boot time

Update 08.08.2019

Dieser Beitrag hat schon gut fünf Jahre auf dem Buckel, von daher anbei die aktuell notwendigen Einstellungen für eine pfSense 2.4.4-RELEASE-p3. Die Gegenstelle ist eine Securepoint UTM 11.8.4 mit frisch eingerichtetem Site-to-Site-Server.

  • Im Webinterface auf “VPN – OpenVPN” klicken.
  • Zur Registerkarte “Client” wechseln und auf das “+”-Symbol (“add client”) klicken.
  • Im Feld “Service host or address” die WAN-Adresse der UTM eintragen. Ggf. den “Server port” anpassen.
  • Optional: Im Feld “Description” einen Namen für diese Verbindung eingeben.
  • Den Haken bei “TLS Configuration – Use a TLS Key” entfernen.
  • Bei “Peer Certificate Authority” das von der UTM importierte CA-Zertifikat auswählen.
  • Bei “Client Certificate” das von der UTM importierte Client-Zertifikat auswählen.
  • Bei “Encryption algorithm” “AES-256-GCM (256 bit Key, 128 bit block)” auswählen.
  • Bei “Auth digest algorithm” “SHA1 (160-bit) auswählen.
  • Im Feld “IPv4 Tunnel Network” das Transfer-Netz in CIDR-Notation, z.B. 192.168.250.0/24, eintragen.
  • Im Feld “IPv4 Remote Network/s” das entfernte Netzwerk in CIDR-Notation, z.B. 192.168.22.0/24, eintragen.
  • Bei “Compression” “Omit Preference, +Disable Adaptive LZO Compression [Legacy style, comp-noadapt]” auswählen.
  • Auf die Schaltfläche “Save” klicken.

Alle anderen Felder bleiben auf den Vorgaben!