So betreiben Sie den Dienst hinter IIS oder einem Proxy
Steht vor dem Dienst ein IIS, ein Lastverteiler oder ein anderer Proxy, sieht der Dienst zunächst nur dessen Adresse. Damit Herkunftsregeln, die Anmelderichtlinie und die Pflicht zu HTTPS richtig greifen, muss der Dienst dem Proxy ausdrücklich vertrauen.
Lösungsübersicht
Der Proxy meldet die Adresse des Aufrufers in X-Forwarded-For, das Schema in X-Forwarded-Proto
und den Host, den der Aufrufer angesprochen hat, in X-Forwarded-Host. Der Dienst glaubt diesen
Kopfzeilen nur, wenn sie von einer Adresse unter Gateway:Security:TrustedProxies kommen. Ohne diesen Eintrag sähe er jeden Aufrufer mit der Adresse des
Proxys – liegt dieser im Firmennetz, gälte jeder als „innen“.
Umsetzung
- Lassen Sie den Dienst nur auf
127.0.0.1lauschen (oder auf einer Adresse, die nur der Proxy erreicht), etwa mitKestrel:Endpoints:Http:Url=http://127.0.0.1:8434. Tragen Sie den Proxy als vertrauenswürdig ein:
"Security": { "TrustedProxies": [ "127.0.0.1", "::1" ] }- Lassen Sie den Proxy
X-Forwarded-For,X-Forwarded-Proto: httpsundX-Forwarded-Hostsetzen. FehltX-Forwarded-For, gilt jede Anfrage als vom Proxy selbst – bei IIS auf demselben Rechner also als127.0.0.1: innen, geschützt, von jeder Netzregel ausgenommen. Prüfen Sie deshalb nach dem Einrichten im Audit, dass dort die wirklichen Herkünfte stehen. Aus Schema und Host bildet der Dienst die absoluten Adressen seiner Antworten: Dienstdokument und Folgeseiten der OData-Oberfläche,Locationnach dem Anlegen, Einmal-Links der Verwaltung. FehltX-Forwarded-Host, zeigen sie auf127.0.0.1und sind von außen nicht erreichbar. Der Dienst nimmt von jeder Kopfzeile den letzten Eintrag, den der nächste Proxy angehängt hat, und vom Host nur einen Rechnernamen oder eine Adresse mit Port. Mit IIS: Das Installationspaket mit
GW_MODE=iiserledigt Schritt 1 und 2 und schreibt eine Vorlageiis\web.configin den Programmordner. Sie leitethttpaufhttpsum, reicht jede Anfrage anhttp://127.0.0.1:<GW_PORT>weiter, setztX-Forwarded-Proto: httpsundX-Forwarded-Hostund erlaubt Adressen bis 8 192 Zeichen. Legen Sie damit eine IIS-Website mit Ihrem Zertifikat an. Die Vorlage braucht die IIS-Module URL Rewrite und Application Request Routing. Erlauben Sie im IIS-Manager unter URL Rewrite > Servervariablen anzeigen die VariablenHTTP_X_FORWARDED_PROTOundHTTP_X_FORWARDED_HOST; ohne diese Freigabe lehnt IIS die Regel ab, die die Kopfzeilen setzt, und antwortet mit500.
Die Regeln der Vorlage unter URL Rewrite.
Die beiden freigegebenen Servervariablen.
Ergebnis: Das Audit nennt die Adresse des Aufrufers, nicht die des Proxys; eine Anfrage über
https am Proxy gilt als geschützte Verbindung, und die Adressen in den Antworten nennen den Proxy
mit https.
Hinweise
- Windows-Anmeldung nur ohne Bündelung von Verbindungen. Die Windows-Anmeldung gilt für die Verbindung, auf der sie geschah. Ein Proxy, der Anfragen verschiedener Benutzer über eine Verbindung zum Dienst leitet, gäbe dem zweiten die Rechte des ersten. IIS mit Application Request Routing leitet Anfragen über gemeinsame Verbindungen weiter.
setup-host --mode iissetzt deshalbAuthModeaufPersonalKey, ohne Windows-Anmeldung; Personen melden sich mit ihrem persönlichen Schlüssel an. StehtWindowsdennoch inAuthModeund ist ein vertrauter Proxy eingetragen, warnt der Dienst beim Start im Protokoll. - Lesen der Herkunft: Der Dienst liest
X-Forwarded-Forvom nächsten Glied aus; die erste Adresse, die selbst kein vertrauter Proxy ist, gilt. Einen Eintrag, den der Client vorn selbst einträgt, zählt er damit nicht. Eine unlesbare Angabe macht die Herkunft unbekannt; eine unbekannte Herkunft hebt keine Sperre auf. - Kopfzeile
Server: Der Dienst selbst nennt seine Server-Software nicht. Hinter IIS fügt IISServer: Microsoft-IIS/10.0an. Ab IIS 10 entferntremoveServerHeader="true"am ElementrequestFilteringder Vorlage diese Kopfzeile:<requestFiltering removeServerHeader="true">. Ältere IIS-Versionen kennen das Attribut nicht und melden mit ihm den Fehler 500.19. Die Vorlage setzt es deshalb nicht. - Lange Adressen: IIS und http.sys lassen ohne Vorlage nur 2 KB Abfragezeichenfolge zu; Clients können lange Bedingungen ohnehin im Rumpf schicken, siehe HTTP: Lange Abfragen.