Denne tråd er over 6 måneder gammel
Er du sikker på, at du har noget relevant at tilføje?
Opsætning af "Reverse Proxy"Af Guru Fiskemanden | 21-07-2020 15:36 | 1251 visninger | 17 svar, hop til seneste
Hey
Håber der sidder nogle derude, som kan bistå i den videre fejlsøgning her ved mig.
Er ved at opsætte en reverse proxy server.
Serveren er en Win2019, Workgroup, stående i DMZ. (Hermed kaldt DMZ1)
FW regler fra public tillader HTTP trafik ind imod den.
FW regler fra DMZ tillader port 7147 ind imod LAN.
Domain Server står i LAN og lytter til 7147. (Hermed kaldt LAN1)
Software.
Reverse Proxy i IIS er oprettet.
Reverse Proxy med NGNIX (gratis udgaven) er testet med.
Reverse Proxy med Caddy er testet med.
Problemstilling:
IIS
Når jeg tilgår ReverseProxy adressen, bliver jeg smidt til LAN1 serveren, som svare mig retur med et promp boks for at logge ind.d domain credentials.
Indtastning af brugernavn / Password giver desværre blot samme login boks, og dette gentager sig så et utal af gange, indtil Error 401 Unauthrozied.
NGINX
Når jeg tilgår ReverseProxy adressen, bliver jeg smidt til LAN1 serveren.
Her får jeg blot Error 401 Unauthorized, 2 gange og så en Error 400 Bad Request.
Ingen prompt, men kan se i trafikken at den prøver at logge mig ind.
Caddy
Når jeg tilgår ReverseProxy adressen, får jeg følgende fejl i Caddy loggen:
2020/07/21 13:33:14.982 ERROR http.log.error making dial info: upstream ServerNavn:7147/Instance/WS/Navn/Page/Tabel: invalid dial address ServerNavn:7147/Instance/WS/Navn/Page/Tabel: address Instance/WS/Navn/Page/Tabel: missing port in address {"request": {"method": "GET", "uri": "/", "proto": "HTTP/1.1", "remote_addr": "127.0.0.1:49804", "host": "supermand.domain.dk", "headers": {"Connection": ["Keep-Alive"], "Authorization": ["Negotiate TlRMTVNTUAABAAAAl4II4gAAAAAAAAAAAAAAAAAAAAAKAGNFAAAADw=="], "Accept": ["image/gif, image/jpeg, image/pjpeg, application/x-ms-application, application/xaml+xml, application/x-ms-xbap, */*"], "Accept-Language": ["da-DK"], "User-Agent": ["Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E)"], "Accept-Encoding": ["gzip, deflate"], "Dnt": ["1"]}}, "duration": 0}
Nogle som har kendskab til Reverse Proxy løsninger, imod en Domain Server, hvor brugerne skal foretage auth imod som sikkerhed.
F. --
#1> Smider den lige ind i morgen, når jeg er tilbage på kontoret. -- #0 - Virker det, hvis du på LAN-siden, prøver fra et non-domain-device tilgår webapplikationen på LAN1? -- FFHAU! Hej
Min Caddy fil ser således ud:
localhost:80 {
reverse_proxy / {
to Server.domain:7147/Instance/WS/Selskab/Page/Selskab
health_path /health
health_status 200
transport http_ntlm {
read_buffer 4096
}
}
}
Jeg får desværre blot en blank side op nu, inden password prompts.
Har været inde på LAN serveren og definere at den skal benytte NTLM
F. -- #8> Lad mig prøve at uddybe.
Jeg har lavet reverse proxy i både IIS, NGINX og CADDY (Forskellige servere).
IIS:
Når jeg tilgå siden " http://dnsnavn.domain.dk[...] så bliver jeg ført videre til " http://internalsite.domain.dk[...]
Der bliver jeg så præsenterede med et login boks hvor jeg skal indtaste brugernavn / Password.
Intet jeg måtte indtaste her, bliver godkendt. Og til sidst, får jeg en HTTP Error 401.1 - Unauthorized.
Her ser min webconfig fil således ud:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<allowedServerVariables>
<add name="HTTP_JESPA_CONNECTION_ID" />
<add name="HTTP_X_ORIGINAL_ACCEPT_ENCODING" />
<add name="Subsystem" />
</allowedServerVariables>
<outboundRules>
<rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1">
<match filterByTags="A, Form, Img" pattern="^http(s)?://internalsite.domain.dk:7147(.*)" />
<action type="Rewrite" value="http{R:1}://external.domainname.dk/{R:2}" />
</rule>
<rule name="RestoreAcceptEncoding" preCondition="NeedsRestoringAcceptEncoding">
<match serverVariable="HTTP_ACCEPT_ENCODING" pattern="^(.*)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="true" />
<action type="Rewrite" value="{HTTP_X_ORIGINAL_ACCEPT_ENCODING}" />
</rule>
<preConditions>
<preCondition name="ResponseIsHtml1">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
</preCondition>
<preCondition name="NeedsRestoringAcceptEncoding">
<add input="{HTTP_X_ORIGINAL_ACCEPT_ENCODING}" pattern=".+" />
</preCondition>
</preConditions>
</outboundRules>
<rules>
<rule name="ReverseProxyInboundRule1" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite" url="http(s)?://internalsite.domain.dk:7147/{R:1}" />
<serverVariables>
</serverVariables>
</rule>
<rule name="set header">
<match url=".*" />
<serverVariables>
<set name="HTTP_X_ORIGINAL_ACCEPT_ENCODING" value="{HTTP_ACCEPT_ENCODING}" />
<set name="HTTP_ACCEPT_ENCODING" value="" />
</serverVariables>
<action type="None" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
#######################################################
Har så læst en masse op omkring, at IIS ikke er glad for at videresende user auth, men har ikke kunne finde en workaround dette :-(
=======================================================
Så prøvede jeg med en NGINX løsning, da dette også kan fixe en revese DNS løsning.
Her ser min fil således ud:
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
gzip on;
upstream Servernavn {
server internal.domain.dk;
keepalive 16;
}
server {
listen 80;
server_name publicserver.domain.dk;
access_log logs/host.access.log main;
error_log logs/ debug;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect $scheme://$host:4244/windows_authentication/ $scheme://$http_host/windows_authentication/;
proxy_pass http://internaldserver.domain.dk:7147;
proxy_http_version 1.1;
proxy_pass_header Authorization;
proxy_redirect off;
proxy_buffering off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Origin "";
proxy_set_header Accept-Encoding "";
}
}
}
###########################################################
Her kommer jeg pt. længst :)
Hvis jeg tilgå "publicserver.domain.dk" så bliver jeg promptet for username / password.
Hvis jeg så indtaster mine oplsyninger der godkendes af NTLM, får jeg blot en blank side op.
Dog så viser browsere loggen mig en Error 400 på den side jeg tilgår.
===========================================================
Og til sidst kommer så Caddy
Det sidste forsøg jeg har prøvet med, i håb om at dette var lettere at sætte op, end IIS og NGINX.
Her ser filen således ud:
ExternalServer.Domain.dk:80
reverse_proxy / {
to InternalServer.domain.dk:7147
header_up Host {http.request.host}
header_up X-Real-IP {http.request.remote}
header_up X-Forwarded-For {http.request.remote}
header_up X-Forwarded-Port {http.request.port}
header_up X-Forwarded-Proto {http.request.scheme}
health_path /health
health_status 200
transport http_ntlm {
read_buffer 4096
}
}
}
###########################################################
Her kommer jeg så "kortest" :-(
Bliver blot præsenteret med en hvid skærm og browseren siger Status 200 kun.
Ser dog også dette i Caddy programmet:
2020/07/22 09:31:23.909 [34mINFO[0m http.handlers.reverse_proxy.health_checker.active unexpected status code {"status_code": 404, "host": "InternalServer.domain.dk:7147"}
===========================================================
Håber dette gav blot lidt mere mening :-) -- #5> Har jeg kigget på tidligere.
Synes ikke jeg kan finde ud af, hvad eller hvor det skal sættes ind, for at gøre mig gavn. -- Jeg prøver lige igen. Virker applikationen uden reverse proxy? Både fra devices der er domain-joined og devices der ikke er? -- FFHAU! #12> Ja. Desværre er problemet ikke applikationen. Det virker fint.
Det er reverse proxy, som fucker noget.
Har netop prøvet at lave en ny instance af applikationen og sætte den til IKKE at køre KERBEROS eller NTLM auth.
Så kan jeg godt få min reverse proxy til at virke.
Kæft det er mærkeligt.
Hvis alt går galt, så må jeg jo køre videre med dette :(
F. -- Der er noget om problemstillingen her og at nogle har det til at virke i Apache.
Løsningen kan måske overføres til en af de andre proxier du har prøvet.
https://stackoverflow.com[...] -- FFHAU! #14> Har godt gennemlæst det link også.
Efter at have nær gennemgået det, så burde denne entry i NGINX filen gøre det samme:
keepalive 16;
Desværre uden held.
Det virker helt klart til at være et problem med NTLM auth imod den interne server, som "reverse proxy" serveren fucker helt op :-(
Ved testen, hvor jeg har ændret instancen til at køre med egen auth, og ikke Windows Domain auth i den interne server, så virkede det med det samme i NGINX softwaret.
Meget mystisk. -- #15 Nej det er ikke mystisk.
Du skal bruge er en TCP proxy og ikke en HTTP proxy.
NTLM kræver at TCP forbindelse holdes åben hele tiden.
NTLM bryder med HTTP standarden, så efter min forståelse kan hverken Nginx (gratis udgaven) eller Apache hjælpe dig.
Caddy ser ud til at kunne håndtere det, men jeg kender den ikke og funktionaliteten ser relativt ny ud.
HAProxy tro jeg kraftigt på, kan løse problemet - det er goto værktøjet hvis man kan proxy noget.
Jeg prøver lige at gentage mit link: https://stackoverflow.com[...] -- https://twitter.com[...]
https://linuxmint.com[...] - Få dit privatliv tilbage.
https://cinnamon-spices.linuxmint.com[...] --
Sidst redigeret 22-07-2020 15:01
Grundet øget spam aktivitet fra gæstebrugere, er det desværre ikke længere muligt, at oprette svar som gæst.
Hvis du ønsker at deltage i debatten, skal du oprette en brugerprofil.
Opret bruger | Login
|
Du skal være logget ind for at tilmelde dig nyhedsbrev.
Hvilken udbyder har du til internet? 200 personer har stemt - Mit energiselskab (Ewii f.eks) 10%
|