OPNsense/Domainname: Unterschied zwischen den Versionen

Aus Foxwiki
K Dirkwagner verschob die Seite OPNsense:Domänennamen nach Opnsense:Domänennamen, ohne dabei eine Weiterleitung anzulegen: Textersetzung - „OPNsense“ durch „Opnsense“
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
= Domänennamen =
= Domänennamen =
== Subdomains beim Webhoster einrichten ==
== 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 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).


Zeile 12: Zeile 11:
** ldap.ihre-schule.de (Zugriff für externe ldap-Anfragen)  
** ldap.ihre-schule.de (Zugriff für externe ldap-Anfragen)  
* WWW-SubdomainsFalls gewünscht legen sich auch die WWW-Subdomains für Ihre Dienste an, z. B. www.nextcloud.ihre-schule.de  
* WWW-SubdomainsFalls gewünscht legen sich auch die WWW-Subdomains für Ihre Dienste an, z. B. www.nextcloud.ihre-schule.de  


Opnsense 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).
Opnsense 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 ==
== Subdomains beim Webhoster weiterleiten ==
Damit die angelegten Subdomains auf die IP-Adresse des Internetanschlusses für das Schulnetz zeigen, gibt es zwei Möglichkeiten:
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 ===
=== 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.
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 ===
=== 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 Opnsense integrierten Aktualisierungs-Client verwenden:
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 Opnsense integrierten Aktualisierungs-Client verwenden:


 
Services / Dynamic DNS → Add
{| style="border-spacing:0;width:15.011cm;"
* Haken bei Enable  
|- style="border:none;padding:0.049cm;"
|| Services / Dynamic DNS → Add* Haken bei Enable  
* Service Type: hier können Sie aus zahlreichen DynDNS-Anbietern auswählen  
* Service Type: hier können Sie aus zahlreichen DynDNS-Anbietern auswählen  
* Interface to monitor: WAN  
* Interface to monitor: WAN  
Zeile 38: Zeile 30:
* Username / Password: Zugangsdaten für den DynDNS-Anbieter  
* 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 =
 
|-
|}
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? ==
== Warum eigentlich ein Reverse-Proxy? ==
Der Reverse-Proxy entscheidet für an ihn gerichtete Anfragen, ob und an wen er diese Weiterleitet.
Der Reverse-Proxy entscheidet für an ihn 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.
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.  
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. den der Nextcloud) enorm.  
* 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. den 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 und intern und nicht über das Internet geroutet werden.  
* 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 und intern und nicht über das Internet geroutet werden.  


== Installation und Konfiguration des HAProxy-Plugins ==
== Installation und Konfiguration des HAProxy-Plugins ==
Der Reverse-Proxy mit Namen HAProxy muss zunächst installiert werden:
Der Reverse-Proxy mit Namen HAProxy muss zunächst installiert werden:


System / Firmware / Plugins / os-haproxy → Install


{| style="border-spacing:0;width:9.121cm;"
|- style="border:none;padding:0.049cm;"
|| System / Firmware / Plugins / os-haproxy → Install
|-
|}
Anschließend muss der HAProxy aktiviert werden:
Anschließend muss der HAProxy aktiviert werden:


Services / HAProxy / Settings / Service Settings
* Haken bei: Enable HAProxy


{| style="border-spacing:0;width:8.497cm;"
|- style="border:none;padding:0.049cm;"
|| Services / HAProxy / Settings / Service Settings* Haken bei: Enable HAProxy
|-
|}
== Einrichtung virtueller IPs und zugehöriger Namen (Aliases) für den HAProxy ==
== 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:
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 / Settings → Add


{| style="border-spacing:0;width:12.278cm;"
1. Virtual IP (HAProxy-Interface für interne und externe Anfragen)
|- style="border:none;padding:0.049cm;"
* Mode: IP Alias  
|| Firewall / Virtual IPs / Settings → Add
 
1. Virtual IP (HAProxy-Interface für interne und externe Anfragen)* Mode: IP Alias  
* Interface: LAN_SERVER  
* Interface: LAN_SERVER  
* Address: 10.1.100.2/32  
* Address: 10.1.100.2/32  
* Description: HAProxy_lan_wan  
* Description: HAProxy_lan_wan  


 
2. Virtual IP (HAProxy-Interface ausschließlich für interne Anfragen)
 
* Mode: IP Alias  
2. Virtual IP (HAProxy-Interface ausschließlich für interne Anfragen)* Mode: IP Alias  
* Interface: LAN_SERVER  
* Interface: LAN_SERVER  
* Address: 10.1.100.3/32  
* Address: 10.1.100.3/32  
* Description: HAProxy_lan  
* Description: HAProxy_lan  


|-
|}
Zusätzlich werden für beide IP-Adressen Alias-Namen in Opnsense hinterlegt, auf die später zugegriffen wird:
Zusätzlich werden für beide IP-Adressen Alias-Namen in Opnsense hinterlegt, auf die später zugegriffen wird:


Firewall / Aliases → Add


{| style="border-spacing:0;width:11.485cm;"
1. Alias (HAProxy-Interface für interne und externe Anfragen)
|- style="border:none;padding:0.049cm;"
* Name: HAProxy_lan_wan  
|| Firewall / Aliases → Add
 
1. Alias (HAProxy-Interface für interne und externe Anfragen)* Name: HAProxy_lan_wan  
* Type: Host(s)  
* Type: Host(s)  
* Content: 10.1.100.2  
* Content: 10.1.100.2  


 
2. Alias (HAProxy-Interface ausschließlich für interne Anfragen)
 
* Name: HAProxy_lan  
2. Alias (HAProxy-Interface ausschließlich für interne Anfragen)* Name: HAProxy_lan  
* Type: Host(s)  
* Type: Host(s)  
* Content: 10.1.100.3  
* Content: 10.1.100.3  


|-
|}
== Interne und externe Anfragen Webserveranfragen (Ports 80/443) auf den HAProxy weiterleiten ==
== Interne und externe Anfragen Webserveranfragen (Ports 80/443) auf den HAProxy weiterleiten ==
Sowohl externe als auch interne HTTP- und HTTPS-Anfragen sollen auf die entsprechenden HAProxy-Interfaces weitergeleitet werden.
Sowohl externe als auch interne HTTP- und HTTPS-Anfragen sollen auf die entsprechenden HAProxy-Interfaces weitergeleitet werden.


=== Weiterleitung externer Anfragen ===
=== Weiterleitung externer Anfragen ===
Firewall / NAT / Port Forward → Add


 
1. Weiterleitung (auf Port 80)
{| style="border-spacing:0;width:10.063cm;"
* Interface: WAN  
|- style="border:none;padding:0.049cm;"
|| Firewall / NAT / Port Forward → Add
 
1. Weiterleitung (auf Port 80)* Interface: WAN  
* TCP/IP Version: IPv4  
* TCP/IP Version: IPv4  
* Protocol: TCP  
* Protocol: TCP  
Zeile 147: Zeile 100:
* Description: HAProxy_lan_wan  
* Description: HAProxy_lan_wan  


 
2. Weiterleitung (auf Port 443)
 
* Interface: WAN  
2. Weiterleitung (auf Port 443)* Interface: WAN  
* TCP/IP Version: IPv4  
* TCP/IP Version: IPv4  
* Protocol: TCP  
* Protocol: TCP  
Zeile 158: Zeile 110:
* Description: HAProxy_lan_wan  
* Description: HAProxy_lan_wan  


|-
|}
=== Weiterleitung interner Anfragen ===
=== Weiterleitung interner Anfragen ===
Damit schulhausinterne Aufrufe der Webdienste direkt beim Reverse-Proxy landen und nicht über das Internet geroutet werden, müssen entsprechende Nameserver-Weiterleitungen zur virtuellen IP-Adresse des gewünschten HAProxy-Moduls existieren. Sofern der Webdienst nur innerhalb des Schulhauses erreichbar sein soll, leiten Sie zur virtuellen IP von HAProxy_lan ansonsten zu HAProxy_lan_wan weiter.
Damit schulhausinterne Aufrufe der Webdienste direkt beim Reverse-Proxy landen und nicht über das Internet geroutet werden, müssen entsprechende Nameserver-Weiterleitungen zur virtuellen IP-Adresse des gewünschten HAProxy-Moduls existieren. 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:
Beispiel für den Webdienst Nextcloud, welcher auch von außen erreichbar sein soll:


 
Services / Unbound DNS / Overrides / Host Overrides → Add
{| style="border-spacing:0;width:11.486cm;"
* Host: nextcloud  
|- style="border:none;padding:0.049cm;"
|| Services / Unbound DNS / Overrides / Host Overrides → Add* Host: nextcloud  
* Domain: z. B. ihre-schule.de  
* Domain: z. B. ihre-schule.de  
* Type: A or AAAA (IPv4 or IPv6 address)  
* Type: A or AAAA (IPv4 or IPv6 address)  
* IP: z. B. 10.1.100.2 (virtuelle IP von HAProxy_lan_wan)  
* IP: z. B. 10.1.100.2 (virtuelle IP von HAProxy_lan_wan)  


|-
|}
== Einrichtung von Real Servers ==
== Einrichtung von Real Servers ==
Real Servers sind jene Dienste, welche hinter dem HAProxy erreicht werden sollen.
Real Servers sind jene Dienste, welche hinter dem HAProxy erreicht werden sollen.


Zeile 191: Zeile 129:
* selfservice.ihre-schule.de  
* selfservice.ihre-schule.de  
* fog.ihre-schule.de  
* fog.ihre-schule.de  


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


| style="border-spacing:0;width:11.89cm;"


{| style="border-spacing:0;width:11.89cm;"
Services / HAProxy / Settings / Real Servers → Add
|- style="border:none;padding:0.049cm;"
* Name: nextcloud_host  
|| Services / HAProxy / Settings / Real Servers → Add* Name: nextcloud_host  
* FQDN or IP: z. B. 10.1.100.8 (IP-Adresse Ihrer Nextcloud)  
* FQDN or IP: z. B. 10.1.100.8 (IP-Adresse Ihrer Nextcloud)  
* Port: 80  
* Port: 80  
Zeile 205: Zeile 141:
* Verify SSL CA: kein Haken  
* Verify SSL CA: kein Haken  


|-
|}
== Einrichtung von Backend Pools ==
== Einrichtung von Backend Pools ==
Mit einem Backend Pool können ein oder mehrere Real Server gebündelt werden. Auch wenn für jeden Webdienst jeweils nur einen Real Server (z. B. gibt es nur einen Nextcloud-Server) bereitgehalten wird, muss an dieser Stelle für jeden Dienst ein Backend Pool eingerichtet werden.
Mit einem Backend Pool können ein oder mehrere Real Server gebündelt werden. Auch wenn für jeden Webdienst jeweils nur einen Real Server (z. B. gibt es nur einen Nextcloud-Server) bereitgehalten wird, muss an dieser Stelle für jeden Dienst ein Backend Pool eingerichtet werden.


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


| style="border-spacing:0;width:12.704cm;"


{| style="border-spacing:0;width:12.704cm;"
Services / HAProxy / Settings / Virtual Services / Backend Pools → Add
|- style="border:none;padding:0.049cm;"
* Name: nextcloud_backend  
|| Services / HAProxy / Settings / Virtual Services / Backend Pools → Add* Name: nextcloud_backend  
* Servers: nextcloud_host  
* Servers: nextcloud_host  


|-
|}
== Einrichtung der Public Services ==
== Einrichtung der Public Services ==
Die Public Services des HAProxys sind die Anlaufstellen, die interne bzw. externe Anfragen entgegennehmen.
Die Public Services des HAProxys sind die Anlaufstellen, die interne bzw. externe Anfragen entgegennehmen.


Für das Schulnetzkonzept werden 3 Public Services benötigt:* eines für interne und externe Anfragen über http,  
Für das Schulnetzkonzept werden 3 Public Services benötigt:
* eines für interne und externe Anfragen über http,  
* eines für interne und externe Anfragen über https und  
* eines für interne und externe Anfragen über https und  
* eines für ausschließlich interne Anfragen über https.  
* eines für ausschließlich interne Anfragen über https.  


=== Einrichtung des Public Service für interne und externe Anfragen über http ===
=== Einrichtung des Public Service für interne und externe Anfragen über http ===
| style="border-spacing:0;width:12.795cm;"


 
Services / HAProxy / Settings / Virtual Services / Public Services → Add
{| style="border-spacing:0;width:12.795cm;"
* Name: http_lan_wan  
|- style="border:none;padding:0.049cm;"
|| Services / HAProxy / Settings / Virtual Services / Public Services → Add* Name: http_lan_wan  
* Description: interne und externe http-Anfragen  
* Description: interne und externe http-Anfragen  
* Listen Addresses:  
* Listen Addresses:  
Zeile 252: Zeile 174:
* X-Forwarded-For header: Haken  
* X-Forwarded-For header: Haken  


|-
|}
=== Einrichtung des Public Service für interne und externe Anfragen über https ===
=== Einrichtung des Public Service für interne und externe Anfragen über https ===
 
Services / HAProxy / Settings / Virtual Services / Public Services → Add
 
* Name: https_lan_wan  
{| style="border-spacing:0;width:17cm;"
|- style="border:none;padding:0.049cm;"
|| Services / HAProxy / Settings / Virtual Services / Public Services → Add* Name: https_lan_wan  
* Description: interne und externe https-Anfragen  
* Description: interne und externe https-Anfragen  
* Listen Addresses:  
* Listen Addresses:  
Zeile 273: Zeile 187:
* X-Forwarded-For header: Haken  
* X-Forwarded-For header: Haken  


|-
|}
=== Einrichtung des Public Service für ausschließlich interne Anfragen über https ===
=== Einrichtung des Public Service für ausschließlich interne Anfragen über https ===
 
Services / HAProxy / Settings / Virtual Services / Public Services → Add
 
* Name: https_lan  
{| style="border-spacing:0;width:17cm;"
|- style="border:none;padding:0.049cm;"
|| Services / HAProxy / Settings / Virtual Services / Public Services → Add* Name: https_lan  
* Description: ausschließlich interne https-Anfragen  
* Description: ausschließlich interne https-Anfragen  
* Listen Addresses:  
* Listen Addresses:  
Zeile 293: Zeile 199:
* X-Forwarded-For header: Haken  
* X-Forwarded-For header: Haken  


|-
|}
=== Einrichtung von Conditions ===
=== Einrichtung von Conditions ===
Conditions sind vordefinierte Bedingungen die für die späteren Regeln für die Reaktionen des HAProxy notwendig sind.
Conditions sind vordefinierte Bedingungen die für die späteren Regeln für die Reaktionen des HAProxy notwendig sind.


Zunächst benötigen Sie für jeden Webdienst eine Bedingung, die greift, falls eine Anfrage mit dem entsprechenden Domänennamen an den HAProxy gerichtet wird.Beispiel für den Webdienst nextcloud.ihre-schule.de:
Zunächst benötigen Sie für jeden Webdienst eine Bedingung, die greift, falls eine Anfrage mit dem entsprechenden Domänennamen an den HAProxy gerichtet wird.Beispiel für den Webdienst nextcloud.ihre-schule.de:


 
Services / HAProxy / Settings / Rules & Checks / Conditions → Add
{| style="border-spacing:0;width:12.054cm;"
* Name: nextcloud  
|- style="border:none;padding:0.049cm;"
|| Services / HAProxy / Settings / Rules & Checks / Conditions → Add* Name: nextcloud  
* Condition type: Host ends with  
* Condition type: Host ends with  
* Host Suffix: nextcloud.ihre-schule.de  
* Host Suffix: nextcloud.ihre-schule.de  


|-
|}
Weiterhin benötigen Sie eine Bedingung, mit der der HAProxy erkennt, dass eine Anfrage an ihn nicht verschlüsselt erfolgt ist:
Weiterhin benötigen Sie eine Bedingung, mit der der HAProxy erkennt, dass eine Anfrage an ihn nicht verschlüsselt erfolgt ist:


 
Services / HAProxy / Settings / Rules & Checks / Conditions → Add
{| style="border-spacing:0;width:12.054cm;"
* Name: not-ssl  
|- style="border:none;padding:0.049cm;"
|| Services / HAProxy / Settings / Rules & Checks / Conditions → Add* Name: not-ssl  
* Condition type: Traffic is SSL (locally deciphered)  
* Condition type: Traffic is SSL (locally deciphered)  
* Negate condition: Haken  
* Negate condition: Haken  


|-
|}
=== Einrichtung von Rules ===
=== Einrichtung von Rules ===
Rules sind vordefinierte Regeln, wie der HAProxy bei Eintreten einer oder mehrere Bedingungen reagieren soll.
Rules sind vordefinierte Regeln, wie der HAProxy bei Eintreten einer oder mehrere Bedingungen reagieren soll.


Zunächst benötigen Sie für jeden Webdienst eine Regel, die den HAProxy dazu verleitet, dass er eine an ihn gerichtete Anfrage an den entsprechenden Backend Pool weiterleitet.Beispiel für den Webdienst nextcloud.ihre-schule.de:
Zunächst benötigen Sie für jeden Webdienst eine Regel, die den HAProxy dazu verleitet, dass er eine an ihn gerichtete Anfrage an den entsprechenden Backend Pool weiterleitet.Beispiel für den Webdienst nextcloud.ihre-schule.de:


 
Services / HAProxy / Settings / Rules & Checks / Rules → Add* Name: nextcloud  
{| style="border-spacing:0;width:11.158cm;"
|- style="border:none;padding:0.049cm;"
|| Services / HAProxy / Settings / Rules & Checks / Rules → Add* Name: nextcloud  
* Test type: if  
* Test type: if  
* Select conditions: nextcloud  
* Select conditions: nextcloud  
Zeile 345: Zeile 227:
* Use backend pool: nextcloud_backend  
* Use backend pool: nextcloud_backend  


|-
|}
Weiterhin benötigen Sie eine Regel, die nicht verschlüsselte htttp-Anfragen auf https umleitet:
Weiterhin benötigen Sie eine Regel, die nicht verschlüsselte htttp-Anfragen auf https umleitet:


 
Services / HAProxy / Settings / Rules & Checks / Rules → Add* Name: redirect_ssl  
{| style="border-spacing:0;width:11.158cm;"
|- style="border:none;padding:0.049cm;"
|| Services / HAProxy / Settings / Rules & Checks / Rules → Add* Name: redirect_ssl  
* Test type: if  
* Test type: if  
* Select conditions: not-ssl  
* Select conditions: not-ssl  
Zeile 361: Zeile 235:
* HTTP Redirect: scheme https code 301  
* HTTP Redirect: scheme https code 301  


|-
|}
== Zuweisung von Rules zu Backend-Pools ==
== Zuweisung von Rules zu Backend-Pools ==
Da jede http-Anfrage an einen der Webdienste auf https umgeleitet werden soll, weisen sie jedem Backend Pool dir Rule redirect_ssl zu.
Da jede http-Anfrage an einen der Webdienste auf https umgeleitet werden soll, weisen sie jedem Backend Pool dir Rule redirect_ssl zu.


Beispiel für den Backend Pool nextcloud_backend:
Beispiel für den Backend Pool nextcloud_backend:


 
HAProxy / Settings / Virtual Services / Backend Pools / nextcloud_backend → Edit
{| style="border-spacing:0;width:14.573cm;"
|- style="border:none;padding:0.049cm;"
|| HAProxy / Settings / Virtual Services / Backend Pools / nextcloud_backend → Edit


Select Rules: redirect_ssl
Select Rules: redirect_ssl


|-
|}
== Zuweisung von Rules zu Public Services ==
== Zuweisung von Rules zu Public Services ==
Der Public Service http_lan_wan soll alle an ihn gestellte Anfragen an den entsprechenden Backend-Poll weiterleiten:
Der Public Service http_lan_wan soll alle an ihn gestellte Anfragen an den entsprechenden Backend-Poll weiterleiten:


HAProxy / Settings / Virtual Services / Public Services / http_lan_wan → Edit


{| style="border-spacing:0;width:13.674cm;"
Select Rules: z. B.: nextcloud  fog usermanagement opnsense collabora
|- style="border:none;padding:0.049cm;"
|| HAProxy / Settings / Virtual Services / Public Services / http_lan_wan → Edit


Select Rules: z. B.: nextcloud  fog usermanagement opnsense collabora
|-
|}
Der Public Service https_lan soll nur auf https-Anfragen reagieren, die ausschließlich intern zugänglich sein sollen:
Der Public Service https_lan soll nur auf https-Anfragen reagieren, die ausschließlich intern zugänglich sein sollen:


HAProxy / Settings / Virtual Services / Public Services / https_lan → Edit


{| style="border-spacing:0;width:12.917cm;"
Select Rules: z. B.: fog usermanagement opnsense
|- style="border:none;padding:0.049cm;"
|| HAProxy / Settings / Virtual Services / Public Services / https_lan → Edit


Select Rules: z. B.: fog usermanagement opnsense
|-
|}
Der Public Service https_lan_wan soll auf sowohl interne als auch externe https-Anfragen reagieren:
Der Public Service https_lan_wan soll auf sowohl interne als auch externe https-Anfragen reagieren:


 
HAProxy / Settings / Virtual Services / Public Services / https_lan_wan → Edit
{| style="border-spacing:0;width:13.831cm;"
|- style="border:none;padding:0.049cm;"
|| HAProxy / Settings / Virtual Services / Public Services / https_lan_wan → Edit


Select Rules: z. B.: nextcloud collabora
Select Rules: z. B.: nextcloud collabora
|-
|}


[[Kategorie:Opnsense]]
[[Kategorie:Opnsense]]

Version vom 9. September 2022, 23:14 Uhr

Domänennamen

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)
    • usermanagement.ihre-schule.de (Zugriff auf den LDAP-Account-Manager zur Benutzerverwaltung)
    • selfservice.ihre-schule.de (Zugriff auf den Self-Service-Password-Dienst)
    • fog.ihre-schule.de (Zugriff auf den Image-Server FOG)
  • Andere Dienste
    • ldap.ihre-schule.de (Zugriff für externe ldap-Anfragen)
  • WWW-SubdomainsFalls gewünscht legen sich auch die WWW-Subdomains für Ihre Dienste an, z. B. www.nextcloud.ihre-schule.de

Opnsense 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 Opnsense integrierten Aktualisierungs-Client verwenden:

Services / Dynamic DNS → Add

  • Haken bei Enable
  • 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 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. den 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 und intern und nicht über das Internet geroutet werden.

Installation und Konfiguration des HAProxy-Plugins

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

System / Firmware / Plugins / os-haproxy → Install

Anschließend muss der HAProxy aktiviert werden:

Services / HAProxy / Settings / Service Settings

  • Haken bei: Enable HAProxy

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 / Settings → Add

1. Virtual IP (HAProxy-Interface für interne und externe Anfragen)

  • Mode: IP Alias
  • Interface: LAN_SERVER
  • Address: 10.1.100.2/32
  • Description: HAProxy_lan_wan

2. Virtual IP (HAProxy-Interface ausschließlich für interne Anfragen)

  • Mode: IP Alias
  • Interface: LAN_SERVER
  • Address: 10.1.100.3/32
  • Description: HAProxy_lan

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

Firewall / Aliases → Add

1. Alias (HAProxy-Interface für interne und externe Anfragen)

  • Name: HAProxy_lan_wan
  • Type: Host(s)
  • Content: 10.1.100.2

2. Alias (HAProxy-Interface ausschließlich für interne Anfragen)

  • Name: HAProxy_lan
  • Type: Host(s)
  • Content: 10.1.100.3

Interne und externe Anfragen Webserveranfragen (Ports 80/443) auf den HAProxy weiterleiten

Sowohl externe als auch interne HTTP- und HTTPS-Anfragen sollen auf die entsprechenden HAProxy-Interfaces weitergeleitet werden.

Weiterleitung externer Anfragen

Firewall / NAT / Port Forward → Add

1. Weiterleitung (auf Port 80)

  • Interface: WAN
  • TCP/IP Version: IPv4
  • Protocol: TCP
  • Destination: any
  • Destination port range: from: HTTP to: HTTP
  • Redirect target IP: HAProxy_lan_wan
  • Redirect target Port: http
  • Description: HAProxy_lan_wan

2. Weiterleitung (auf Port 443)

  • Interface: WAN
  • TCP/IP Version: IPv4
  • Protocol: TCP
  • Destination: any
  • Destination port range: from: HTTPS to: HTTPS
  • Redirect target IP: HAProxy_lan_wan
  • Redirect target Port: https
  • Description: HAProxy_lan_wan

Weiterleitung interner Anfragen

Damit schulhausinterne Aufrufe der Webdienste direkt beim Reverse-Proxy landen und nicht über das Internet geroutet werden, müssen entsprechende Nameserver-Weiterleitungen zur virtuellen IP-Adresse des gewünschten HAProxy-Moduls existieren. 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 / Unbound DNS / Overrides / Host Overrides → Add

  • Host: nextcloud
  • Domain: z. B. ihre-schule.de
  • Type: A or AAAA (IPv4 or IPv6 address)
  • IP: z. B. 10.1.100.2 (virtuelle IP von HAProxy_lan_wan)

Einrichtung von Real Servers

Real Servers sind jene Dienste, welche hinter dem HAProxy erreicht werden sollen.

Richten Sie für jeden Ihrer Webdienste - unabhängig davon, ob dieser von außen erreichbar sein soll oder nicht - einen Real Server ein:* nextcloud.ihre-schule.de

  • collabora.ihre-schule.de
  • usermanagement.ihre-schule.de
  • selfservice.ihre-schule.de
  • fog.ihre-schule.de

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

| style="border-spacing:0;width:11.89cm;"

Services / HAProxy / Settings / Real Servers → Add

  • Name: nextcloud_host
  • FQDN or IP: z. B. 10.1.100.8 (IP-Adresse Ihrer Nextcloud)
  • Port: 80
  • SSL: kein Haken
  • Verify SSL CA: kein Haken

Einrichtung von Backend Pools

Mit einem Backend Pool können ein oder mehrere Real Server gebündelt werden. Auch wenn für jeden Webdienst jeweils nur einen Real Server (z. B. gibt es nur einen Nextcloud-Server) bereitgehalten wird, muss an dieser Stelle für jeden Dienst ein Backend Pool eingerichtet werden.

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

| style="border-spacing:0;width:12.704cm;"

Services / HAProxy / Settings / Virtual Services / Backend Pools → Add

  • Name: nextcloud_backend
  • Servers: nextcloud_host

Einrichtung der Public Services

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

Für das Schulnetzkonzept werden 3 Public Services 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.

Einrichtung des Public Service für interne und externe Anfragen über http

| style="border-spacing:0;width:12.795cm;"

Services / HAProxy / Settings / Virtual Services / Public Services → Add

  • Name: http_lan_wan
  • Description: interne und externe http-Anfragen
  • Listen Addresses:
    • z. B. 10.1.100.2:80 (HAProxy_lan_wan)
    • z. B. 10.1.100.3:80 (HAProxy_lan)
  • Type: HTTP / HTTPS (SSL offloading)
  • Default Backend Pool: none
  • Enable SSL offloading: kein Haken
  • X-Forwarded-For header: Haken

Einrichtung des Public Service für interne und externe Anfragen über https

Services / HAProxy / Settings / Virtual Services / Public Services → Add

  • Name: https_lan_wan
  • Description: interne und externe https-Anfragen
  • Listen Addresses:
    • z. B. 10.1.100.2:443 (HAProxy_lan_wan)
    • z. B. 10.1.100.3:443 (HAProxy_lan)
  • Type: HTTP / HTTPS (SSL offloading)
  • Default Backend Pool: none
  • Enable SSL offloading: Haken
  • Certificates: Web GUI SSL certificate (wird später durch Let's-Encrypt-Zertifikate ersetzt)
  • X-Forwarded-For header: Haken

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

Services / HAProxy / Settings / Virtual Services / Public Services → Add

  • Name: https_lan
  • Description: ausschließlich interne https-Anfragen
  • Listen Addresses:
    • z. B. 10.1.100.3:443 (HAProxy_lan)
  • Type: HTTP / HTTPS (SSL offloading)
  • Default Backend Pool: none
  • Enable SSL offloading: Haken
  • Certificates: Web GUI SSL certificate (wird später durch Let's-Encrypt-Zertifikate ersetzt)
  • X-Forwarded-For header: Haken

Einrichtung von Conditions

Conditions sind vordefinierte Bedingungen die für die späteren Regeln für die Reaktionen des HAProxy notwendig sind.

Zunächst benötigen Sie für jeden Webdienst eine Bedingung, die greift, falls eine Anfrage mit dem entsprechenden Domänennamen an den HAProxy gerichtet wird.Beispiel für den Webdienst nextcloud.ihre-schule.de:

Services / HAProxy / Settings / Rules & Checks / Conditions → Add

  • Name: nextcloud
  • Condition type: Host ends with
  • Host Suffix: nextcloud.ihre-schule.de

Weiterhin benötigen Sie eine Bedingung, mit der der HAProxy erkennt, dass eine Anfrage an ihn nicht verschlüsselt erfolgt ist:

Services / HAProxy / Settings / Rules & Checks / Conditions → Add

  • Name: not-ssl
  • Condition type: Traffic is SSL (locally deciphered)
  • Negate condition: Haken

Einrichtung von Rules

Rules sind vordefinierte Regeln, wie der HAProxy bei Eintreten einer oder mehrere Bedingungen reagieren soll.

Zunächst benötigen Sie für jeden Webdienst eine Regel, die den HAProxy dazu verleitet, dass er eine an ihn gerichtete Anfrage an den entsprechenden Backend Pool weiterleitet.Beispiel für den Webdienst nextcloud.ihre-schule.de:

Services / HAProxy / Settings / Rules & Checks / Rules → Add* Name: nextcloud

  • Test type: if
  • Select conditions: nextcloud
  • Execute function: Use specified Backend Pool
  • Use backend pool: nextcloud_backend

Weiterhin benötigen Sie eine Regel, die nicht verschlüsselte htttp-Anfragen auf https umleitet:

Services / HAProxy / Settings / Rules & Checks / Rules → Add* Name: redirect_ssl

  • Test type: if
  • Select conditions: not-ssl
  • Execute function: http-request-redirect
  • HTTP Redirect: scheme https code 301

Zuweisung von Rules zu Backend-Pools

Da jede http-Anfrage an einen der Webdienste auf https umgeleitet werden soll, weisen sie jedem Backend Pool dir Rule redirect_ssl zu.

Beispiel für den Backend Pool nextcloud_backend:

HAProxy / Settings / Virtual Services / Backend Pools / nextcloud_backend → Edit

Select Rules: redirect_ssl

Zuweisung von Rules zu Public Services

Der Public Service http_lan_wan soll alle an ihn gestellte Anfragen an den entsprechenden Backend-Poll weiterleiten:

HAProxy / Settings / Virtual Services / Public Services / http_lan_wan → Edit

Select Rules: z. B.: nextcloud fog usermanagement opnsense collabora

Der Public Service https_lan soll nur auf https-Anfragen reagieren, die ausschließlich intern zugänglich sein sollen:

HAProxy / Settings / Virtual Services / Public Services / https_lan → Edit

Select Rules: z. B.: fog usermanagement opnsense

Der Public Service https_lan_wan soll auf sowohl interne als auch externe https-Anfragen reagieren:

HAProxy / Settings / Virtual Services / Public Services / https_lan_wan → Edit

Select Rules: z. B.: nextcloud collabora