pfSense

pfSense ist eine Firewall-Distribution auf der Basis des Betriebssystems FreeBSD. Im Gegensatz zu den anderen vorgestellten Software-Komponenten ist pfSense also ein eigenständiges Betriebssystem.

Im Schulnetzkonzept kommt pfSense aber nicht nur die Aufgabe der Firewall zu. Vielmehr ist es die Kommunikationszentrale mit u. a. folgenden Aufgaben:

  • Firewall und NAT
  • DNS-Server
  • DHCP-Server
  • NTP-Server
  • Proxy-Server
  • URL-Filter
  • Reverse-Proxy
  • Zertifikatsmanagement
  • VPN-Server

Die aktuellen Beschreibungen basieren auf pfSense in der Version 2.4.4.

Grundinstallation

Virtuelle Netzwerke und virtuelle Maschine erzeugen

Laden Sie zunächst das offizielle stabile amd64-CD-Image von der pfSense-Downloadseite herunter, entpacken Sie die heruntergeladene GZ-Datei und legen Sie die entpackte ISO-Datei auf auf dem ESXi-Server ab.

Erzeugen Sie auf dem ESXi-Server eine neue virtuelle Maschine.
Dimensionierungsbeispiel:

  • OS: Other/FreeBSD x64
  • 2 CPU
  • 50 GB Festplattenspeicher
  • 8 GB Arbeitsspeicher
  • 1 Netzwerkkarte mit Zugriff auf das Netzwerk "intern"
  • 1 Netzwerkkarte mit Zugriff auf das Netzwerk "extern"

Wählen Sie in den Einstellungen zur virtuellen Maschine als CD-Laufwerk die Datenspeicher-ISO-Datei und geben Sie den Speicherort der oben heruntergeladenen pfSense-ISO-Datei an. Wählen Sie zudem die Option "beim Einschalten verbinden".

Nach dem Start der virtuellen Maschine öffnen Sie das Konsolenfenster. Nun sollte der textbasierte Installationsassistent von pfSense zu sehen sein.

Installation des Betriebssystems

Folgende Schritte sind bei der Installation zu durchlaufen:

  • Akzeptieren der Lizenzbedingungen
  • "Install pfSense" wählen
  • "Auto (UFS)" als Partitionierungsoption wählen
  • Deutsch als Keyboard-Layout wählen
  • Neustart des Systems nach erfolgter Installation

Nach dem Neustart müssen in der Regel noch die beiden virtuellen Netzwerkkarten richtig zugewiesen werden. Die Netzwerkkarten heißen im System meist em0 und em1 bzw. igb0 und igb1.

  • Zuweisung der WAN-Karte (extern)
    • Geben Sie den richtigen Namen der Netzwerkkarte ein (z. B. "em0")
    • Sofern Sie von Ihrem Internet-Provider eine IP zugewiesen bekommen, wählen Sie "DHCP client"
  • Zuweisung der LAN-Karte (intern)
    • Geben Sie den richtigen Namen der Netzwerkkarte ein (z. B. "em1")
    • Aktivieren Sie den DHCP-Server für die Karte

Die Zuordnung der Netzwerkkarten kann auf der pfSense-Konsole mit der Option "1) Assign Interfaces" wiederholt werden.

Die weitere Konfiguration von pfSense erfolgt überwiegend über die Web-Schnittstelle von pfSense. Diese erreichen Sie nun innerhalb des Schulnetzes (intern) mit der auf der pfSense-Konsole angezeigten LAN-IP-Adresse (i. d. R.: https://192.168.1.1).

Die Default-Zugangsdaten sind:

  • Benutzername: admin
  • Passwort: pfsense

SSH-Zugriff auf die pfSense-Konsole (z. B. via Putty) bzw. SCP-Zugriff auf das pfSense-Dateisystem (z. B. via WinSCP) ist ebenfalls über die LAN-IP und mit den admin-Zugangsdaten möglich.

Erste Konfiguration über die Web-Schnittstelle

Rufen Sie die Web-Schnittstelle auf und melden Sie sich an.

Beim ersten Start der Web-Oberfläche führt Sie ein Setup-Wizard durch wichtige Bestandteile der Erstkonfiguration. Hierbei sind folgende Angaben empfehlenswert:

General Information

  • Hostnamen: z. B. pfsense
  • Domain: z. B. schulnetz.intra
  • Haken bei "Override DNS", sofern sie den DNS-Server Ihres Internet-Providers verwenden wollen.

Time Server Information

  • Timezone: Europe/Berlin

Configure WAN Interface

  • SelectedType: DHCP, sofern sie von Ihrem Internet-Provider eine IP zugewiesen bekommen
  • Haken bei "Block RFC1918 Private Networks"
  • Haken bei "Block bogon networks"

Configure LAN Interface

  • LAN IP Address: z. B. 10.1.1.1
  • Subnet Mask: z. B. 16

Set Admin WebGUI Password

  • Setzen Sie hier ein neues Passwort für die pfSense-Web-Schnittstelle

Nach Klick auf "Reload" werden die Einstellungen neu geladen. Sofern sie die LAN-IP-Adresse geändert haben, müssen Sie im Browser die neue IP eingeben, um die Web-Oberfläche wieder erreichen zu können.

Sie können diesen Setup-Wizard zu einem späteren Zeitpunkt erneut unter System/Setup Wizard aufrufen.

Installation der Open-VM-Tools

Sofern Sie pfSense als virtuelle Maschine betreiben, empfiehlt sich, zur Performance-Steigerung das pfSense-Paket Open-VM-Tools zu installieren:

System/Package Manager/Available Packages/Open-VM-Tools → Install

Konfiguration des DHCP-Servers

Damit im Schulnetz angeschlossene Clients IP-Adressen und weitere Netzwerkinformationen automatisiert zugewiesen bekommen, muss der DHCP-Server für das LAN aktiviert und konfiguriert werden.

Begeben Sie sich hierzu zu Services / DHCP-Server / LAN und tätigen Sie die folgenden Einstellungen:

General Options

  • Haken bei: Enable DHCP server on LAN interface
  • Range: z. B. From 10.1.10.1 To 10.1.15.254

NTP
Sofern Sie pfSense als Zeitserver für angeschlossene Geräte nutzen wollen, hinterlegen Sie hier dessen IP-Adresse.

  • NTP Server 1: z. B. 10.1.1.1

Network Booting
Folgende Einstellungen sind zu tätigen, damit Clients bei PXE-Boot zum Fog-Server geleitet werden:

  • Haken bei: Enables network booting
  • Next-Server (IP Fog-Server): z. B. 10.1.1.6
  • Default BIOS file name: undionly.kpxe
  • UEFI 32 bit file name: ipxe32.efi
  • UEFI 64 bit file name: ipxe.efi

DHCP Static Mappings for this Interface
Sofern Sie statische IPs für Geräte im Netzwerk (z. B. Drucker) via DHCP vergeben wollen, finden Sie zunächst die entsprechende MAC-Adresse des Geräts heraus und erzeugen einen neuen statischen Eintrag durch Klick auf den Button "Add", z. B.:

  • MAC Address: XX:XX:XX:XX:XX:XX
  • IP Address: 10.1.3.1
  • Hostname: PRN-EDV-3
  • Description: Drucker im Raum EDV 3

Konfiguration der zur Verfügung stehenden Internetgeschwindigkeit

Durch den Traffic Shaper kann pfSense im Sinne des Quality of Service (QoS) die zur Verfügung stehende Internetbandbreite bestmöglich ausnutzen:

Firewall / Traffic Shaper / Wizards → traffic_shaper_wizard_multi_all.xml

  • Enter number of WAN type connections: 1
  • Enter number of LAN type interfaces: 1
  • WAN-Upload: <geben Sie hier die für Ihren Internetanschluss zur Verfügung stehende Upload-Geschwindigkeit an>
  • WAN-Download: <geben Sie hier die für Ihren Internetanschluss zur Verfügung stehende Download-Geschwindigkeit an>

Es könnten an dieser Stelle noch zahlreiche weitere Einstellungen für den Trafic Shaper getätigt werden - u. a. für die Priorisierung von Voice-Over-IP-Telefonaten o. ä.

Installation und Konfiguration des Squid-Proxy-Servers

Das Schulnetzkonzept geht davon aus, dass der Aufruf von Webseiten nur über den zwischengeschalteten Proxy möglich ist. Nur dann können mithilfe des URL-Filters squidGuard (s. weiter unten) Webseitenaufrufe via Port 80 (http) bzw. Port 443 (https) effektiv gefiltert werden. Folglich müssen alle Clients die Proxy-Informationen kennen, damit sie Webseiten laden können.

Für klassische Betriebssysteme (Windows, macOS, zahlreiche Linux-Systeme mit Desktopoberfläche) und deren Anwendungen erfragen die Proxy-Information beim DHCP-Server, sodass keinerlei Einstellungen an den Clients notwendig sind.

Die mobilen Betriebssysteme (Android, iOS, ...) unterstützen das Entdecken der Proxy-Information via DHCP leider nicht. In den W-LAN-Einstellungen des Endgeräts sind zusätzlich folgende Einstellungen zu tätigen:

  • Proxy: manuell
  • Proxy-Hostname: proxy.intra
  • Proxy-Port: 3128

Installation und Konfiguration des Pakets squid

Der squid-Proxy-Server muss zunächst im Paketmanager installiert werden:

System / Package Manager / Available Packages / squid → Install

Anschließend sind folgende Anpassungen an den Default-Einstellungen zu tätigen:

Services / Squid Proxy Server / General

  • Squid General Settings
    • Haken bei: Enable Squid Proxy
    • Haken bei: Keep Settings Data
    • Proxy Interfaces: LAN
    • Proxy Port: 3128
    • Haken bei: Allow Users on Interface
    • Haken bei: Resolve DNS IPv4 First
  • Transparent Proxy Settings
    Der transparente Proxy bleibt deaktiviert, da er ohnehin nur für unverschlüsselte Webseiten (http) greifen würde.
  • SSL Man In the Middle Filtering
    Diese Option ist nicht zu empfehlen und in meinen Augen rechtlich mehr als fragwürdig, da sie verschlüsselte Verbindungen mit einer Man-In-The-Middle-Attacke aufbricht. Sie bleibt folglich deaktiviert.
  • Logging Settings
    Hier können Sie bei Bedarf den Zugriff auf den Proxy-Server mitloggen.
  • Headers Handling, Language and Other Customizations
    • Visible Hostname: z. B. pfsense
    • Administrator's Email: z. B. admins@ihre-schule.de
    • Error Language: de

Services / Squid Proxy Server / Local Cache
Die Cache-Einstellungen beeinflussen maßgeblich die Performance der Internetnutzung. Für genauere Informationen besuchen Sie z. B. squid-handbuch.de.

  • Squid Hard Disk Cache Settings
    • Hard Disk Cache Size: 10240
    • Minimum Object Size: 2
  • Squid Memory Cache Settings
    • Memory Cache Size: 264
  • Dynamic and Update Content
    Mit den nachfolgenden Einstellungen erreicht man, dass pfSense erkennt, wenn ein Windows-Computer Updates bezieht. Diese werden dann zwischengespeichert und für weitere Clients im lokalen Netzwerk bereitgestellt. Dies vermindert die Belastung der Internetleitung in hohem Maße.
    • Haken bei: Cache Dynamic Content
    • Custom refresh_patterns:

      refresh_pattern -i microsoft.com/.*\.(cab|exe|ms[i|u|f]|[ap]sf|wm[v|a]|dat|zip) 4320 80% 43200 reload-into-ims
      refresh_pattern -i windowsupdate.com/.*\.(cab|exe|ms[i|u|f]|[ap]sf|wm[v|a]|dat|zip) 4320 80% 43200 reload-into-ims
      refresh_pattern -i windows.com/.*\.(cab|exe|ms[i|u|f]|[ap]sf|wm[v|a]|dat|zip) 4320 80% 43200 reload-into-ims

      # DONT MODIFY THESE LINES
      refresh_pattern \^ftp: 1440 20% 10080
      refresh_pattern \^gopher: 1440 0% 1440
      refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
      refresh_pattern . 0 20% 4320

Proxy im Netzwerk unumgänglich machen

Ausgehende DNS-Anfragen über PFSense erzwingen

Damit der Proxy nicht umgangen werden kann ist u. a. erforderlich, dass kein Client im Schulnetz einen anderen DNS als pfSense selbst nutzt.

Dies erreichen Sie durch eine Regel in der Firewall:

Firewall / NAT / Port Forward → Add

  • Interface: LAN
  • Protocol: TCP/UDP
  • Destination port Range: from Port: DNS to Port: DNS
  • Redirect Target IP: 127.0.0.1
  • Redirect Target Port: DNS
  • Description: DNS-Anfragen via pfSense erzwingen

Ausgehende Anfragen über die Ports 80 und 443 blockieren

Die beiden Haupt-Ports für Internetseitenaufrufe werden über die Firewall blockiert:

Firewall / Rules / LAN → Regeln vor den beiden "Default allow LAN ..." Regeln erzeugen:

1. Regel

  • Action: Block
  • Interface: LAN
  • Source: any
  • Destination: any
  • Destination Port Range: From: HTTP To: HTTP
  • Description: Proxy-Zwang HTTP

2. Regel

  • Action: Block
  • Interface: LAN
  • Source: any
  • Destination: any
  • Destination Port Range: From: HTTPS To: HTTPS
  • Description: Proxy-Zwang HTTPS

Von nun an können Clients nur noch dann das Internet nutzen, wenn sie den Proxy über den Port 3128 verwenden.

Proxy für bestimmte Clients umgehen

Sofern Netzwerkteilnehmer (z. B. die Serversysteme Samba, Nextcloud und Fog) nicht über den Proxy und den ggf. damit verbundenen URL-Filter das Internet nutzen sollen, müssen Sie für diese Ausnahmen in der Firewall erzeugen.

Firewall / Rules / LAN → Regeln nach der "Anti-Lockout Rule" und vor jeglichen Regeln mit der Aktion "Block" einfügen (Beispiel: uneingeschränkte Kommunikation nach außen für den Nextcloud-Server mit der IP 10.1.1.8):

  • Action: Pass
  • Interface: LAN
  • Adress Family: IPv4
  • Protocol: Any
  • Source: Single host or alias: 10.1.1.8
  • Destination: any
  • Description: Nextcloud

Automatische Verteilung der Proxy-Informationen im Netzwerk

Web-Oberflächen-Zugriff auf Port 80 festlegen

Für die automatische Verteilung der Proxy-Informationen ist ein Webserver notwendig, der entsprechende Dateien über Port 80 bereitstellt. Der fachlich sauberste Weg hierfür wäre die Installation eines gesonderten Webservers. Da der Aufwand aber nicht im Verhältnis zum Nutzen steht, empfehle ich den bereits vorhandenen Webserver für die Web-Schnittstelle von pfSense zu verwenden.

Der im pfSense installierte Webserver lauscht standardmäßig auf Port 443. Dieser muss auf Port 80 umgestellt werden:

System / Advanced / Admin Access → Protocol: http

Ein Nachteil daran ist, dass die Web-Schnittstelle nun unverschlüsselt zu erreichen ist. Durch Einsatz des Reverse-Proxy (s. später) kann man dieses Problem beheben und wieder gesichert auf die pfSense-Einstellungen zugreifen.

wpad.da-Datei und symbolische Verknüpfungen erzeugen

Klassische Betriebssysteme (Windows, macOS, zahlreiche Linux-Systeme mit Desktopoberfläche) entnehmen die Proxy-Information einer Datei namens wpad.da (bzw. wpad.dat oder proxy.pac). Begeben Sie sich für die nächsten Aufgaben zunächst auf die pfSense-Konsole und wählen Sie 8 (Shell).

# Datei wpad.da erzeugen und öffnen
vi /usr/local/www/wpad.da
Datei wpad.da
function FindProxyForURL(url, host) 
{ 
    if (isPlainHostName(host) ||
        shExpMatch(host, "*.local") ||
        isInNet(dnsResolve(host), "10.1.0.0",  "255.255.0.0"))
        return "DIRECT";
 
    return "PROXY 10.1.1.1:3128";
}

Achten Sie in der Datei auf die richtigen Angaben für:

  • Netzwerk (z. B. 10.1.0.0)
  • Netzmaske (z. B. 255.255.0.0)
  • pfSense-IP (z. B. 10.1.1.1)
  • Proxy-Port (z. B. 3128)
# Verknüpfungen für die alternativen Namen wpad.dat und proxy.pac
# zur Datei wpad.da anlegen
ln -s /usr/local/www/wpad.da /usr/local/www/wpad.dat
ln -s /usr/local/www/wpad.da /usr/local/www/proxy.pac

DHCP-Server-Einstellungen

Damit Clients bei Verbindung ins Schulnetz nun vom DHCP-Server den Ort der proxy-Datei(en) erfahren, müssen an diesem entsprechende Einstellungen vorgenommen werden:

Services / DHCP Server / LAN → Additional BOOTP/DHCP Options

  • Option: 252 / String / "http://10.1.1.1/wpad.dat" (inklusive Anführungszeichen!)
  • Option: 252 / String / "http://10.1.1.1/wpad.da" (inklusive Anführungszeichen!)
  • Option: 252 / String / "http://10.1.1.1/proxy.pac" (inklusive Anführungszeichen!)

DNS-Weiterleitungen

Einige Programme nutzen nicht die vom System via DHCP eingefangenen Proxy-Informationen. Vielmehr suchen sie selbst unter folgenden URLs - bei der Annahme, dass schulnetz.intra die Schuldomain ist - nach der Datei wpad.dat:

  • http://wpad.schulnetz.intra/wpad.dat
  • http://wpad/wpad.dat

Damit die Namensauflösung für diese URL funktioniert müssen im DNS-Server des pfSense entsprechende Einträge hinterlegt werden:

Services / DNS Resolver / General Settings

  • Host: schulnetz / Parent domain of host: intra / IP to return for host: 10.1.1.1 (pfSense-IP)
  • Host: wpad / Parent domain of host: schulnetz.intra / IP to return for host: 10.1.1.1 (pfSense-IP)
  • Host: <leer> / Parent domain of host: wpad / IP to return for host: 10.1.1.1 (pfSense-IP)

Eine zusätzliche Weiterleitung empfiehlt sich für die Einstellung des Proxys auf mobilen Endgeräten. Hier sollte aus diversen Gründen bei der Einstellung Proxy-Host nicht die IP-Adresse von pfSense sondern ein Hostname wie z. B. proxy.intra angegeben werden:

  • Host: proxy / Parent domain of host: intra / IP to return for host: 10.1.1.1 (pfSense-IP)

Installation und Konfiguration des Squid-Guards

Hauptziel des Einsatzes eines Proxys an Schulen ist die Verwendung in Kombination mit einem URL-Filter, welcher Schüler vor ungewünschten Inhalten im Netz schützen soll.

Das Schulnetzkonzept verwendet als URL-Filter das Paket squidGuard, welches wie folgt installiert wird:

System / Package Manager / Available Packages / squidGuard → Install

Grundeinstellungen

Services / SquidGuard Proxy Filter / General Settings

  • Enable
  • Enable GUI log / Enable log / Enable log rotation
    Anhand dieser Einstellungen können Sie unter Services / SquidGuard Proxy Filter / Log entsprechende Log-Informationen einsehen.
  • Blacklist (enable)
  • Blacklist URL: http://www.shallalist.de/Downloads/shallalist.tar.gz

Die Shallalist-Blacklist ist eine regelmäßig aktualisierte und in Form von Kategorien organisierte Liste, welche zusammen mit dem squidGuard verwendet werden kann, um Webseitenaufrufe themenbasiert (z. B. Pornographie, Gewaltverherrlichung, soziale Netzwerke, ...) zu sperren. An dieser Stelle muss erwähnt werden, dass dies zwar sehr gut funktioniert, es eine 100%ige Absicherung gegenüber Webinhalten aber niemals geben wird.

Blacklist automatisch aktualisieren

Leider bietet pfSense bis dato keine integrierte Möglichkeit, die Blacklist automatisch zu aktualisieren. Anhand eines selbst erstellen Skripts, welches regelmäßig ausgeführt wird, lässt sich diese Lücke schließen.

Zunächst wird das Skript erstellt:

# Datei anlegen und editieren
vi /root/squidGuard_blacklist_update.sh
Datei squidGuard_blacklist_update.sh
#!/usr/local/bin/php-cgi -f
<?php
    $incl = "/usr/local/pkg/squidguard_configurator.inc";
    if (file_exists($incl)) {
        require_once($incl);
        sg_reconfigure_blacklist( "http://www.shallalist.de/Downloads/shallalist.tar.gz", "" );
    }
    exit;
?>
# Datei ausführbar machen
chmod 755 /root/squidGuard_blacklist_update.sh

Nun muss noch dafür Sorge getragen werden, dass das Skript automatisiert ausgeführt wird.

Hierzu muss zunächst das für die Verwaltung wiederkehrender Aufgaben (Cronjobs) zuständige Paket Cron installiert werden:

System / Package Manager / Available Packages / Cron → Install

Anschließend kann eine z. B. wöchentlich am Montag um 00:00 Uhr wiederkehrende Aufgabe für die Ausführung des Skripts angelegt werden:

Services / Cron / Settings → Add

  • Minute: 0
  • Hour: 0
  • Day of the Month: *
  • Month of the Year: *
  • Day of the Week: *
  • User: root
  • Command: /root/squidGuard_blacklist_update.sh

Benutzerdefinierte Whitelists und Blacklists

Services / Squid Proxy Server / Target Categories → Add

Für Domains/URLs, die Sie sperren möchten, die aber nicht in der Shallalist enthalten sind:

  • Name: Blacklist
  • Domain List/URL List: <mit Leerzeichen getrennte Angabe ungewünschter Einträge>

Für Domains/URLs, die Sie nicht sperren möchten, aber durch die Shallalist geblockt sind:

  • Name: Whitelist
  • Domain List/URL List: <mit Leerzeichen getrennte Angabe gewünschter Einträge>

Es empfiehlt sich in jedem Fall, diese beiden Listen anzulegen, auch wenn sie noch keine ungewünschten / gewünschten Domains haben. Hierdurch kann man schnell auf entsprechende Situationen reagieren.

Allgemeine Filtereinstellungen festlegen

An dieser Stelle legen Sie nun das grundsätzliche Filterverhalten fest. Dieses betrifft u. a. die Kategorien der Shallalist sowie die benutzerdefinierten Listen Whitelist und Blacklist.

Services / Squid Proxy Server / Common ACL Target Rule List → Plus-Symbol zum Aufklappen anklicken

  • Whitelist → whitelist
  • Blacklist → deny
  • Sperrempfehlungen (Sperrungen sollten in Absprache mit Schulleitung und Kollegium erfolgen):
    • [blk_BL_anonvpn] → deny (Anonymisierungsdienste)
    • [blk_BL_chat] → deny (Chatdienste)
    • [blk_BL_dating] → deny (Datingwebsites)
    • [blk_BL_dynamic] → deny (Zugriff auf DynDNS-Adressen; z. B. Heimnetz des Schülers)
    • [blk_BL_gamble] → deny (Glücksspiel)
    • [blk_BL_hacking] → deny (Hacking)
    • [blk_BL_hobby_games-misc] → deny (Onlinespiele)
    • [blk_BL_hobby_games-online] → deny (Onlinespiele)
    • [blk_BL_porn] → deny (Pornografie)
    • [blk_BL_sex_lingerie] → deny (Pornografie)
    • [blk_BL_socialnet] → deny (Soziale Netzwerke)
    • [blk_BL_spyware] → deny (Spyware)
    • [blk_BL_violence] → deny (Gewalt)
    • [blk_BL_warez] → deny (Hacking)
  • Default access [all] → allow

Ich empfehle eine Einstellung, die grundsätzlich alle Kategorien erlaubt (Default access [all] → allow). Somit ist jede nicht einer Berechtigung zugeordneten Kategorie (---) erlaubt. Lediglich die ungewünschten Kategorien werden explizit gesperrt (deny).

Weitere Einstellungen:

  • Haken bei: Do not allow IP-Addresses in URL
    Der URL-Filter sollte nicht dadurch umgangen werden können, dass man die korrespondierende IP in den Browser eingibt.
  • Haken bei: Use SafeSearch engine
  • Haken bei: Check this option to enable logging for this ACL
    ... sofern Sie den Einsatz des Filters mitloggen wollen

Damit getätigte Einstellungen in squidGuard greifen, müssen die gespeicherten Einstellungen übernommen und der Dienst neu gestartet werden:

Services / Squid Proxy Server /General Settings / General Options → Apply

Vollqualifizierte Domänennamen für Schulnetzdienste

Subdomains beim Webhoster einrichten

Die Zugriffe auf Dienste im Schulnetz sollen aus Gründen der Sicherheit ausschließlich verschlüsselt erfolgen. Um hierfür gültige Zertifikate generieren zu können, ist für jeden Dienst ein vollqualifizierter öffentlicher Domänenname erforderlich. Somit ist es auch möglich, gesichert auf Dienste von außen zuzugreifen (kann auf Wunsch unterbunden werden).

Die meisten Schulen haben sich für ihre Schulhomepage bereits einen entsprechenden Domänennamen (hier im weiteren als Beispiel: ihre-schule.de) gesichert. Sofern Ihr Webhoster dies unterstützt, können Sie für die Dienste im Schulnetz entsprechende Subdomains anlegen, welche dann auf den Internetanschluss der Schule geleitet werden sollen - z. B.:

  • Webdienste
    • nextcloud.ihre-schule.de (Zugriff auf die Nextcloud)
    • collabora.ihre-schule.de (Collabora für Nextcloud)
    • usermanagement.ihre-schule.de (Zugriff auf den LDAP-Account-Manager zur Benutzerverwaltung)
    • selfservice.ihre-schule.de (Zugriff auf den Self-Service-Password-Dienst)
    • pfsense.ihre-schule.de (Zugriff auf Web-Oberfläche von pfSense)
  • Andere Dienste
    • ldap.ihre-schule.de (Zugriff für externe ldap-Anfragen)

pfSense wird im Abschnitt "Installation und Konfiguration des Reverse-Proxy-Servers" so konfiguriert, dass die angegebenen Domänennamen sowohl von innerhalb des Schulnetzes und wenn gewünscht auch von außerhalb für den Zugriff auf die Dienste verwendet werden können. So nutzt z. B. ein Schüler sowohl von zu Hause als auch vom Schulnetz aus die Nextcloud durch Angabe der URL https://nextcloud.ihre-schule.de (und nicht durch Angabe einer IP-Adresse).

Subdomains beim Webhoster weiterleiten

Damit die angelegten Subdomains auf die IP-Adresse des Internetanschlusses für das Schulnetz zeigen, gibt es zwei Möglichkeiten:

Möglichkeit 1: Sie erhalten eine feste IP-Adresse von Ihrem Internet-Provider → A-Record

In diesem Fall legen Sie beim Webhoster unter den Nameservereinstellungen für jede angelegte Subdomain einen A-Record mit der festen IP-Adresse des Schulnetz-Internetanschlusses fest.

Möglichkeit 2: Die IP-Adresse des Schulnetz-Internetanschlusses ändert sich in regelmäßigen Abständen → CNAME-Record

In diesem Fall benötigen Sie einen DynDNS-Anbieter, aus dessen Pool Sie sich einen Domänennamen reservieren, der auf die IP-Adresse des Schulnetz-Internetanschlusses zeigt. Damit die regelmäßig stattfindenden Änderungen der IP-Adresse für den beim DynDNS-Anbieter reservierten Domänennamen aktualisiert werden, können Sie den von pfSense integrierten Aktualisierungs-Client verwenden:

Services / Dynamic DNS / Dynamic DNS Clients → Add

  • Service Type: hier können Sie aus zahlreichen DynDNS-Anbietern auswählen
  • Interface to monitor: WAN
  • Hostname: z. B. schule-xyz.dynanbieter.org
  • Username / Password: Zugangsdaten für den DynDNS-Anbieter

Nach erfolgreicher Einrichtung des DynDNS-Dienstes legen Sie beim Webhoster unter den Nameservereinstellungen für jede angelegte Subdomain einen CNAME-Record mit dem DynDNS-Domänennamen des Schulnetz-Internetanschlusses fest.

Installation und Konfiguration des Reverse-Proxy-Servers

Warum eigentlich ein Reverse-Proxy?

Der Reverse-Proxy entscheidet für an ihn - meist von außen - gerichtete Anfragen, ob und an wen er diese Weiterleitet.

Sofern man nur einen Dienst von außen zugänglich machen möchte (z. B. die Nextcloud), könnte man auch den einfacheren Weg wählen und im Router mit entsprechend NAT-Regeln (z. B. für die Ports 80 und 443) arbeiten.

Im Schulnetzkonzept gibt es aber gute Gründe dafür, einen Reverse-Proxy einzusetzen:

  • Es gibt mehrere Dienste, die von außen über die gleichen Ports zugänglich sein sollen (z. B. Nextcloud, Collabora, Passwort-Service), sodass NAT-Regeln hierfür nicht ausreichen.
  • Der Reverse-Proxy wird im Schulnetzkonzept auch dafür eingesetzt, für Anfragen die dazu passenden Zertifikate bereitzustellen. Dies entlastet den dahinter liegenden Webserver (z. B. der Nextcloud) enorm.
  • Der Reverse-Proxy wird auch für Anfragen von innerhalb des Schulnetzes verwendet, sodass Dienste wie die Nextcloud auch von dort verschlüsselt über ihren vollqualifizierten Domänennamen erreichbar sind aber hierzu nicht die Internetleitung belastet wird.

Installation und Konfiguration des Pakets HAProxy

Der Reverse-Proxy mit Namen HAProxy muss zunächst im Paketmanager installiert werden:

System / Package Manager / Available Packages / haproxy → Install

Anschließend sind folgende Grundeinstellungen zu tätigen:

Services / HAProxy / Settings

  • General Settings
    • Haken bei: Enable HAProxy
    • Maximum Connections: 5000
  • Stats tab, 'internal' stats port
    • Internal stats port: 2200
  • Tuning
    • Max SSL Diffie-Hellman size: 2048

Einrichtung virtueller IPs und zugehöriger Namen (Aliases) für den HAProxy

Um zwischen Anfragen an den HAProxy unterscheiden zu können, die ausschließlich von intern (lan) oder von intern und extern (lan_wan) zulässig sind, werden zwei virtuelle LAN-IP-Adressen benötigt, auf denen der HAProxy lauschen kann:

Firewall / Virtual IPs → Add

  • HAProxy-Interface für interne und externe Anfragen
  • Type: IP Alias
  • Interface: LAN
  • Address(es): 10.1.1.2 / 32
  • Description: HAProxy_lan_wan

Firewall / Virtual IPs → Add

  • HAProxy-Interface ausschließlich für interne Anfragen
  • Type: IP Alias
  • Interface: LAN
  • Address(es): 10.1.1.3 / 32
  • Description: HAProxy_lan

Zusätzlich werden für beide IP-Adressen Alias-Namen im pfSense hinterlegt, auf die später zugegriffen wird:

Firewall / Aliases / IP → Add

  • HAProxy-Interface für interne und externe Anfragen
  • Name: HAProxy_lan_wan
  • Type: Host(s)
  • IP or FQDN: 10.1.1.2

Firewall / Aliases / IP → Add

  • HAProxy-Interface ausschließlich für interne Anfragen
  • Name: HAProxy_lan
    Type: Host(s)
    IP or FQDN: 10.1.1.3

Einrichtung von Backends

Backends sind jene Server, welche hinter dem HAProxy erreicht werden sollen.

Richten Sie für jeden Ihrer Webdienste - unabhängig davon, ob diese von außen erreichbar sein sollen oder nicht - ein Backend ein:

  • nextcloud.ihre-schule.de
  • collabora.ihre-schule.de
  • usermanagement.ihre-schule.de
  • selfservice.ihre-schule.de
  • pfsense.ihre-schule.de

Beispiel für den Webdienst nextcloud.ihre-schule.de:

Services / HAProxy / Backend → Add

  • Name: nextcloud (der Name muss in den späteren Frontend-Einstellungen übereinstimmen)
  • Server-List → Add
    • Mode: active
    • Name: nextcloud
    • Forwardto: Address+Port
    • Address: z. B. 10.1.1.8 (IP-Adresse Ihrer Nextcloud)
    • Port: 80
    • Encryption(SSL): kein Haken
    • SSL checks: kein Haken
  • Health checking
    • Health check method: none

Einrichtung von Nameserver-Weiterleitungen

Damit schulhausinterne Aufrufe der Webdienste beim Reverse-Proxy landen, müssen entsprechende Nameserver-Weiterleitungen zur virtuellen IP-Adresse des gewünschten HAProxy-Moduls existieren.

Richten Sie für jeden Ihrer Webdienste eine Weiterleitung ein. Sofern der Webdienst nur innerhalb des Schulhauses erreichbar sein soll, leiten Sie zur virtuellen IP von HAProxy_lan ansonsten zu HAProxy_lan_wan weiter.

Beispiel für den Webdienst Nextcloud, welcher auch von außen erreichbar sein soll:

Services / DNS Resolver / General Settings / Host Overrides → Add

  • Host: nextcloud
  • Domain: z. B. ihre-schule.de
  • IP Address: z. B. 10.1.1.2 (virtuelle IP von HAProxy_lan_wan)

Einrichtung der Frontends

Die Frontends des HAProxys sind die Anlaufstellen, die interne bzw. externe Anfragen entgegennehmen.

Für das Schulnetzkonzept werden 3 Frontends benötigt:

  • eines für interne und externe Anfragen über http,
  • eines für interne und externe Anfragen über https und
  • eines für ausschließlich interne Anfragen über https.

Dabei ist anzumerken, dass das erste Frontend für die http-Anfragen lediglich zwei Aufgaben zukommen:

  • Weiterleitung unverschlüsselter http-Anfragen an Webdienste wie die Nextcloud auf https
  • Weiterleitung von Anfragen für die Zertifikatsgenerierung an pfSense selbst

Einrichtung des Frontends für interne und externe Anfragen über http

Services / HAProxy / Frontend → Add

  • Edit HAProxy Frontend
    • Name: http_lan_wan
    • Status: active
    • External addresses
      • Listen address: z. B. 10.1.1.2 (HAProxy_lan_wan)
        • Port: 80
        • kein Haken bei SSL Offloading
      • Listen address: z. B. 10.1.1.3 (HAProxy_lan)
        • Port: 80
        • kein Haken bei SSL Offloading
      • Listen address: WAN address (IPv4)
        • Port: 80
        • kein Haken bei SSL Offloading
    • Type: http / https(offloading)
  • Default backend, access control lists and actions
    Hier werden Regeln für unterschiedliche Anfragen an das Frontend definiert.
    • Definieren Sie hier für jeden Ihrer Webdienste eine Regel für den Aufruf anhand des Hostnamens, z. B. für Nextcloud:
      • Name: nextcloud
      • Expression: Host matches
      • Value: z. B. nextcloud.ihre-schule.de
    • Definieren Sie zusätzlich Regeln für die Validierung durch die Zertifikatsverwaltung:
      • Regel 1:
        • Name: acme
        • Expression: Path contains within slashes
        • Value: acme-challenge
      • Regel 2 (= Gegenteil zur Regel 1):
        • Name: not-acme
        • Expression: Path contains within slashes
        • Haken bei Not
        • Value: acme-challenge
  • Actions
    Hier wird festgelegt, wie das Frontend reagiert, wenn eine oder eine Kombination der obigen Regeln eintritt.
    Hier müssen nun für jeden Webdienst zwei Fälle unterschieden bzw. definiert werden:
    • Gilt die Anfrage direkt dem Webdienst? (z. B. http://nextcloud.ihre-schule.de/apps/files/?dir=...)
      → Die Anfrage wird an https weitergeleitet. Beispiel für Nextcloud:
      • Action: http-requst redirect
      • Rule: scheme https code 301
      • Conditional acl names: nextcloud not-acme (= Anfrage an nextcloud.ihre-schule.de aber ohne "acme-challenge" in der URL)
    • Gilt die Anfrage der Validierung durch die Zertifikatsverwaltung (z. B. http://nextcloud.ihre-schule.de/.well-known/acme-challenge/...)
      → Die Anfrage wird an das Backend pfsense weitergeleitet. Beispiel für Nextcloud
      • Action: Use Backend
      • Backend: pfsense
      • Conditional acl names: nextcloud acme (= Anfrage an nextcloud.ihre-schule.de mit "acme-challenge" in der URL)

Einrichtung des Frontends für interne und externe Anfragen über https

Services / HAProxy / Frontend → Add

  • Edit HAProxy Frontend
    • Name: https_lan_wan
    • Status: active
    • External addresses
      • Listen address: z. B. 10.1.1.2 (HAProxy_lan_wan)
        • Port: 443
        • Haken bei: SSL Offloading
      • Listen address: WAN address (IPv4)
        • Port: 43
        • Haken bei: SSL Offloading
    • Type: http / https(offloading)
  • Default backend, access control lists and actions
    Definieren Sie hier für jeden Ihrer Webdienste, die von außen erreichbar sein sollen, eine Regel für den Aufruf anhand des Hostnamens, z. B. für Nextcloud:
      • Name: nextcloud
      • Expression: Host matches
      • Value: z. B. nextcloud.ihre-schule.de
  • Actions
    Definieren Sie hier für jeden Ihrer Webdienste, die von außen erreichbar sein sollen, eine Aktion, z. B. für Nextcloud:
    • Action: Use Backend
    • Backend: nextcloud
    • Conditional acl names: nextcloud
  • Advanced settings
    • Use "forwardfor" option: Haken bei: Use "forwardfor" option.
  • SSL Offloading
    • Certificate: Hier wählen Sie nach der Konfiguration der automatischen Zertifikatsverwaltung ein Zertifikat zu den in diesem Frontend verwendeten Webdiensten.
    • Haken bei: Add ACL for certificate CommonName. (host header matches the "CN" of the certificate)
    • kein Haken bei: Add ACL for certificate Subject Alternative Names.
  • Additional certificates
    • Sofern sie in diesem Frontend mehr als einen Webdienst verwenden, wählen Sie hier die weiteren Zertifikate zu den in diesem Frontend verwendeten Webdiensten.
    • Haken bei: Add ACL for certificate CommonName. (host header matches the "CN" of the certificate)
    • kein Haken bei: Add ACL for certificate Subject Alternative Names.

Einrichtung des Frontends für ausschließlich interne Anfragen über https

Services / HAProxy / Frontend → Add

  • Edit HAProxy Frontend
    • Name: https_lan
    • Status: active
    • External addresses
      • Listen address: z. B. 10.1.1.3 (HAProxy_lan)
        • Port: 443
        • Haken bei: SSL Offloading
    • Type: http / https(offloading)
  • Default backend, access control lists and actions
    Definieren Sie hier für jeden Ihrer Webdienste, die ausschließlich von innerhalb des Schulhauses erreichbar sein sollen, eine Regel für den Aufruf anhand des Hostnamens, z. B. für pfSense:
      • Name: pfsense
      • Expression: Host matches
      • Value: z. B. pfsense.ihre-schule.de
  • Actions
    Definieren Sie hier für jeden Ihrer Webdienste, die ausschließlich von innerhalb des Schulhauses erreichbar sein sollen, eine Aktion, z. B. für pfSense:
    • Action: Use Backend
    • Backend: pfsense
    • Conditional acl names: pfsense
  • Advanced settings
    • Use "forwardfor" option: Haken bei: Use "forwardfor" option.
  • SSL Offloading
    • Certificate: Hier wählen Sie nach der Konfiguration der automatischen Zertifikatsverwaltung ein Zertifikat zu den in diesem Frontend verwendeten Webdiensten.
    • Haken bei: Add ACL for certificate CommonName. (host header matches the "CN" of the certificate)
    • kein Haken bei: Add ACL for certificate Subject Alternative Names.
  • Additional certificates
    • Sofern sie in diesem Frontend mehr als einen Webdienst verwenden, wählen Sie hier die weiteren Zertifikate zu den in diesem Frontend verwendeten Webdiensten.
    • Haken bei: Add ACL for certificate CommonName. (host header matches the "CN" of the certificate)
    • kein Haken bei: Add ACL for certificate Subject Alternative Names.

Installation und Konfiguration der automatisierten Zertifikatsverwaltung

Mit dem ACME-Paket können Sie für Ihre Webdienste kostenlos gültige X.509-Zertifikate von der Zertifizierungsstelle Let's Encrypt generieren. Dies ermöglicht eine verschlüsselte Nutzung Ihrer Webdienste über https ohne Zertifikatswarnungen. Auch für verschlüsselte ldap-Anfragen an den Samba-Server können Let's-Encrypt-Zertifikate eingesetzt werden.

Installation und Konfiguration des Pakets acme

Das acme-Paket muss zunächst über den Paketmanager installiert werden:

System / Package Manager / Available Packages / acme → Install

Grundkonfiguration:

Services / Acme / Settings

  • Haken bei: Cron Entry
  • Haken bei: Write Certificates

Anlegen von Let's-Encrypt-Konten

Es empfiehlt sich, zwei Let's-Encrypt-Konten anzulgen:

  • eines zum Testen
  • eines für den Produktivbetrieb

Services / Acme / Accountkeys → Add

  • Name: Lets-Encrypt-Test
  • ACME Server: Let's Encrypt Staging ACME v2 (for TESTING purposes)
  • E-Mail Address: z. B. admins@ihre-schule.de
  • Klick auf "Create new account key"
  • Klick auf "Register ACME account key"
  • Klick auf "Save"

Services / Acme / Accountkeys → Add

  • Name: Lets-Encrypt-Production
  • ACME Server: Let's Encrypt Production ACME v2 (Applies rate limits to certficate requests)
  • E-Mail Address: z. B. admins@ihre-schule.de
  • Klick auf "Create new account key"
  • Klick auf "Register ACME account key"
  • Klick auf "Save"

Besonderheit: Zertifikat für verschlüsselte ldap-Anfragen an den Samba-Server

Da der HAProxy die ldap-Anfragen nicht verarbeiten kann, wird der betroffene Port 636 für Anfragen von außen über eine NAT-Regel an den Samba-Server weitergeleitet:

Firewall / NAT / Port Forward→ Add

  • Interface: WAN
  • Protocol: TCP/UDP
  • Desintation: WAN Adress From Port 636 To Port 636
  • Redirect Target IP: 10.1.1.7 (IP Samba-Server)
  • Redirect Target Port: 636
  • Description: samba-ldap

Die Zertifikatsgenerierung für ldap.ihre-schule.de soll aber trotzdem über das pfSense-Modul ACME nach obigen Beispiel erfolgen.

Da der HAProxy die ldap-Anfragen aber nicht entgegennimmt, muss der Samba-Server selbst die Zertifikatsinformationen erhalten und ausgeben. Nachdem das ACME-Modul das Zertifikat für ldap.ihre-schule.de generiert bzw. erneuert hat, soll es die Zertifikatsdateien also auf den Samba-Server kopieren. Die hierfür erforderlichen Befehle zum Kopieren der Zertifikatsdatei, zum Berechtigungen Setzen und zum Neustart des Samba-Dienstes kann man beim Zertifikat ldap.ihre-schule.de hinterlegen in der Aktionsliste hinterlegen:

Services / Acme / Certificates → ldap.ihre-schule.de → edit

  • Action list → add
    • Mode: enabled
    • Command: scp -i /root/.ssh/id_rsa_samba /tmp/acme/ldap.rsarnstorf.de/ldap.rsarnstorf.de/* root@10.1.1.7:/etc/samba/tls
  • Action list → add
    • Mode: enabled
    • Command: ssh -i /root/.ssh/id_rsa_samba root@10.1.1.7 "chmod -R 0600 /etc/samba/tls && service samba-ad-dc restart"

Installation und Konfiguration des OpenVPN-Servers

Grundinstallation

Mithilfe des OpenVPN-Servers können Sie z. B. als Administrator von außen auf das interne Netzwerk zugreifen.

Der OpenVPN-Server selbst ist bereits vorinstalliert. Zusätzlich empfiehlt sich die Installation des Pakets openvpn-client-export, mit welchem man bequem die Clientsoftware samt Konfiguration individuell für jeden Benutzer herunterladen kann.:

System / Package Manager / Available Packages / openvpn-client-export → Install

Für die Einrichtung des OpenVPN-Servers steht ein Wizard zur Verfügung, der auch die notwendigen Firewall-Einstellungen hinterlegt:

VPN / OpenVPN / Wizard

  • Type of Server: Local User Access
  • Certificate Authority: Hier nehmen Sie die bei der Installation standardmäßig angelegte Zertifizierungsstelle (i. d. R. "<Domänenname>-ca", z. B.: "schulnetz-ca"). Sollte keine lokale Zertifizierungsstelle vorhanden sein, können Sie durch Klick auf "Add new CA" eine neue erstellen.
  • Certificate: Hier nehmen Sie das bei der Installation standardmäßig erzeugte Zertifikat (i. d. R. "<Domänenname>", z. B.: "schulnetz"). Sollte kein lokales Zertifikat vorhanden sein, können Sie durch Klick auf "Add new Certificate" ein neues erstellen.
  • Interface: WAN
  • Protocol: UDP IPv4 and IPv6 an all interfaces (multihome)
  • Local Port: 1194
  • Cryptographic Settings: vorgegebene Einstellungen verwenden
  • Tunnel Settings:
    • Tunnel Network: z. B. 10.0.8.0/24 (muss außerhalb des IP-Raums des internen Schulnetzes liegen)
    • Local Network: z. B. 10.1.0.0/16 (IP-Raum des internen Schulnetzes)
  • Client Settings: vorgegebene Einstellungen verwenden
  • Haken bei: Firewall Rule
  • Haken bei: OpenVPN rule

Konfiguration des Client-Export-Tools

VPN / OpenVPN / Client Export

  • Host Name Resolution: sofern der Schulnetz-Internetanschluss über eine feste IP verfügt, welche pfSense auf der WAN-Seite zugewiesen wird, geben Sie hier "Interface IP Address" an. Ansonsten empfiehlt sich die Verwendung eines dynamischen Hostnamens.
  • Haken bei: Use Random Local Port, sodass sich mehrere Clients gleichzeitig mit dem VPN-Server verbinden können
  • Klick auf "Safe as Default"

Anlegen einer VPN-Gruppe

Durch Anlage einer Gruppe für den VPN-Zugriff, kann man folgende Festlegungen tätigen:

  • Berechtigung für die VPN-Einwahl nur die Mitglieder der Gruppe
  • Beschränkung der pfSense-Web-Oberfläche für die Gruppenmitglieder, sodass zugehörige Benutzer lediglich ihr eigenes Passwort ändern können

System User Manager Groups → Add

  • Group Properties:
    • Name: openvpnusers
    • Scope: Local
  • Assigned Privileges → Add:
    • Name: WebCfg - System: User Password Manager

Group name: openvpnusers
Assigned Privileges: WebCfg - System: User Password Manager
→ Somit kann jeder user nach erfolgreichem Login an der PFSense-Web-Schnittstelle sein eigenes Passwort ändern.

Anlegen von VPN-Benutzern

Durch Anlage einer Gruppe für den VPN-Zugriff, kann man folgende Festlegungen tätigen:

  • Berechtigung für die VPN-Einwahl nur die Mitglieder der Gruppe
  • Beschränkung der pfSense-Web-Schnittstelle für die Gruppenmitglieder, sodass zugehörige Benutzer lediglich ihr eigenes Passwort ändern können

System / User Manager / Users → Add

  • Username: <gewünschter Benutzername>
  • Password: <gewünschtes Passwort>
  • Full Name: <Vollständiger Name>
  • Group membership: openvpnusers
  • Certificate: Haken bei: Click to create a user certificate
    • Descriptive name: <geben Sie hier den gleichen Namen an wie oben bei Username>
    • Certificate authority: <geben Sie hier die gleiche Zertifizierungsstelle an wie bei der Einrichtung des OpenVPN-Servers>

Client-Installationsdateien und Konfigurationsdateien ausgeben

Nach Anlage eines VPN-Users können Sie diesem für sein System (z. B. Windows, Mac, ...) personalisierte Dateien für Installation und Konfiguration des OpenVPN-Clients aushändigen:

VPN / OpenVPN / Client Export

→ OpenVPN Clients
Wahl der gewünschten Dateien des entsprechenden Users