SharePoint proxypass za pomocí nginx

SharePoint proxypass za pomocí nginx
« kdy: 17. 11. 2017, 10:36:24 »
Už, nějaký den den se snažím rozeběhnout pomocí nginxu (ne plus), proxypass na sharepoint 2016 - až na daném sharepointu se provádí daná autorizace pomocí ntlm. Zkoušel jsem i strýčka google, ale moc mi v mém případě nepomohl .. též přikládám svůj config .. Až na danou stránku se dostanu, ale pořád dokola se mně to ptá na heslo - jako kdyby opomíjel session či něco podobného... Neřešil někdo z Vás něco podobného ..? děkuji moc ..

Kód: [Vybrat]
upstream sharepoint_backend {
    server 192.168.1.2:8080;
    keepalive 180;
}

server {
    listen 80;
    server_name sharepoint.domena.cz;
    return 301 https://$host$request_uri;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

}


server {
    listen 443;
    server_name sharepoint.domena.cz;

    access_log /var/log/nginx/ssl-access.log;
    error_log /var/log/nginx/ssl-error.log;

    # Certificate(s) and private key
     ssl_certificate '/etc/nginx/certs/wildcard.domena.crt';
     ssl_certificate_key '/etc/nginx/certs/wildcard.domena.key';
     ssl_session_cache shared:SSL:10m;
     ssl_session_timeout 5m;

     add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains';

    location / {
     # reset connection to 1.1
     proxy_http_version      1.1;
     proxy_set_header    Connection "";

     # buffers
     proxy_buffering     on;
     proxy_buffers       128 4k;

     # headers
     proxy_read_timeout      360;
     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
     proxy_pass       http://sharepoint_backend;
     proxy_redirect      default;

    }
}
« Poslední změna: 19. 11. 2017, 20:41:30 od Petr Krčmář »


Re:sharepoint proxypass za pomocí nginx
« Odpověď #1 kdy: 17. 11. 2017, 10:54:32 »
NTLM Vám přes nginx neprojde, to jde jen s komerční variantou Nginx Plus.
Musíte na IIS vypnout NTLM (úplně) a pak mám nastavení (je možné, že je něco nadbytečné, nezaručuji):

Kód: [Vybrat]
proxy_buffering off;
proxy_request_buffering off;
proxy_ignore_client_abort off;
proxy_http_version 1.1;

proxy_pass_request_headers on;
proxy_headers_hash_max_size 1024;
proxy_headers_hash_bucket_size 128;

proxy_pass_header Date;
proxy_pass_header Server;

proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Accept-Encoding "";
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;

more_set_input_headers 'Authorization: $http_authorization';
more_set_headers -s 401 'WWW-Authenticate: Basic realm="$host"';

Základem je však vypnutí NTLM na IIS.
Obdobně se řeší Exchange, tam se ještě musí navýšit timeouty a max sizes apod.

Re:sharepoint proxypass za pomocí nginx
« Odpověď #2 kdy: 17. 11. 2017, 19:39:20 »
Děkuji, vyzkouším snad pomůže co máš prosím ještě nastavené v té autorizaci ..? Jsou tam možnosti buď NTLM, Negation a Negation:Kerberos a Negation:PKU2U ..

Re:sharepoint proxypass za pomocí nginx
« Odpověď #3 kdy: 17. 11. 2017, 20:10:50 »
Děkuji, vyzkouším snad pomůže co máš prosím ještě nastavené v té autorizaci ..? Jsou tam možnosti buď NTLM, Negation a Negation:Kerberos a Negation:PKU2U ..

Podle mě se tam musí ručně narvat basic, ale už si nevzpomenu, jestli to bylo přes powershell nebo jak.
NTLM ani Negotiate neprojdou, a NTLM na tutti přes nginx free nenastavíte. Omouvám se, víc pomoct nemůžu, aktuálně bych mohl kouknout leda na Exchange, kde se to nastavuje podobně.

Tady je něco pro 2013, víc jsem nehledal, bude to asi podobné: https://technet.microsoft.com/cs-cz/library/gg576953.aspx.

M.

asdf123

Re:sharepoint proxypass za pomocí nginx
« Odpověď #4 kdy: 18. 11. 2017, 16:33:40 »
NTLM nie je stateless, HTTP je stateless protokol, cize to principialne nejde. Ono to nie je zlozite rozbehat, len si to vyzaduje narusenie bezstavovosti HTTP protokolu a prinutit proxy aby ten NTLM handshake robila stale cez rovnaky source port voci backend servru. A toto nikto z opensource komunity robit kvoli microsoftu nebude :) Prave preto to podporuju len komercne riesenia, kde im je jedno ci nieco dodrzuje nejake RFC, hlavne z klienti platia :)


Re:sharepoint proxypass za pomocí nginx
« Odpověď #5 kdy: 18. 11. 2017, 21:10:40 »
NTLM nie je stateless, HTTP je stateless protokol, cize to principialne nejde. Ono to nie je zlozite rozbehat, len si to vyzaduje narusenie bezstavovosti HTTP protokolu a prinutit proxy aby ten NTLM handshake robila stale cez rovnaky source port voci backend servru. A toto nikto z opensource komunity robit kvoli microsoftu nebude :) Prave preto to podporuju len komercne riesenia, kde im je jedno ci nieco dodrzuje nejake RFC, hlavne z klienti platia :)

To je trochu zjednodušené. Pravověrná OSS komunita má jen velmi malý překryv znalostí s komerčními platformami. Zjednodušeně řečeno: v OSS komunitě je jen zlomeček lidí, kteří znají a mají přístup k těmto technologiím. To není věc jejich zásadovosti, ale spíš izolovanosti. Prosím nechytat za slovo, vím, že existují profesionálové, co znají oba "světy". Ti bohužel, bezcharakterní prevíti, dávají přednost dobré mzdě u komerčních projektů, než živoření OSS contributora.

DK

Re:sharepoint proxypass za pomocí nginx
« Odpověď #6 kdy: 18. 11. 2017, 21:50:46 »
Negotiation:Kerberos by mohlo být SPNEGO, se kterým nginx problém mít nebude, tak bych zkusil ten

Nicméně je taky třeba zvýšit max limit velikosti hlaviček, protože SPNEGO hlavičky můžou mít i lehce přes 32k

asdf123

Re:sharepoint proxypass za pomocí nginx
« Odpověď #7 kdy: 18. 11. 2017, 23:52:55 »
NTLM nie je stateless, HTTP je stateless protokol, cize to principialne nejde. Ono to nie je zlozite rozbehat, len si to vyzaduje narusenie bezstavovosti HTTP protokolu a prinutit proxy aby ten NTLM handshake robila stale cez rovnaky source port voci backend servru. A toto nikto z opensource komunity robit kvoli microsoftu nebude :) Prave preto to podporuju len komercne riesenia, kde im je jedno ci nieco dodrzuje nejake RFC, hlavne z klienti platia :)

To je trochu zjednodušené. Pravověrná OSS komunita má jen velmi malý překryv znalostí s komerčními platformami. Zjednodušeně řečeno: v OSS komunitě je jen zlomeček lidí, kteří znají a mají přístup k těmto technologiím. To není věc jejich zásadovosti, ale spíš izolovanosti. Prosím nechytat za slovo, vím, že existují profesionálové, co znají oba "světy". Ti bohužel, bezcharakterní prevíti, dávají přednost dobré mzdě u komerčních projektů, než živoření OSS contributora.

problem NTLM je uplne jednoduchy a jeho implementovanie stoji asi 5 riadkov kodu:) akurat ze vedome porusuje HTTP protokol. Microsoft ako firma podporujuca vlastne proprietarne technologie si to moze dovolit, vsak robi to co je v jej komercnom zaujme. Samotne reverse proxy  na NTLM fungovalo v apache verzii tusim 2.2 out of the box, ale prave apache maintaineri to vedome odstranili, aby boli 100% podla standardu. v nginx to asi nikdy nefungovalo, lebo asi podporovali stale HTTP standardy na 100%.

Re:sharepoint proxypass za pomocí nginx
« Odpověď #8 kdy: 19. 11. 2017, 07:03:07 »
v nginx to asi nikdy nefungovalo, lebo asi podporovali stale HTTP standardy na 100%.

Opak je pravdou: http://nginx.org/en/docs/http/ngx_http_upstream_module.html#ntlm