nginx reverse proxy SPNEGO per cluster Domino

spnego cluster nginx reverse proxy http

  • 4 commenti
Ciao a tutti,
condivido questa esperienza sistemistica perchè credo possa giovare a molti. (an English language adaption is available here. )

Il caso è questo:

Ho due server di posta IBM Domino su Linux in cluster
Ho due server applicativi IBM Domino su Windows in cluster

Richiesta del cliente:


Vorrei attivare SSO tra i browser della mia azienda (IE,Firefox, Chrome) e le mie applicazioni XPages che risiedono sui server in cluster Domino su Window nonchè i miei server di posta che risiedono su un cluster Domino su Linux  per gestire l'alta affidabilità (HA) come posso fare?


Ecco la mia soluzione utilizzando un server NGINX come revese proxy:



Implementazione cluster e SSO Spnego con due server cluster Domino windows


Per implementare ed attivare SSO tra AD e Domino  e fare in modo che un browser possa essere trustato senza ulteriore richiesta di credenziali sulle vostre applicazioni e/o posta basta riguardare l'articolo di Andrea Fontana a questa pagina.

Ricordo solo che il concetto è valido se e solo se il sever Domino gira su piattaforma Windows agganciato al Dominio AD.

Nel nostro caso abbiamo 2 server  Windows in cluster Domino (su cui risiedono diverse applicazioni XPages).
Se vogliamo utilizzare un reverse proxy In modalità cluster Domino,  IBM raccomanda di far eseguire il servizio windows di Domino di entrambi i server applicativi con una specifica utenza AD (per esempio admdomino.- grazie Stefano Benassi per la dritta! n.d.r)

Successivamente se le applicazioni risponderanno all'indirizzo web http://apps.acme.local  , ci collegheremo sulla nostra macchina AD e digiteremo il comando:

 
SETSPN -a HTTP/apps.acme.local admdomino


Va ricordato che affinchè il browser funzioni in maniera trasparente è necessario settare alcuni parametri  (o pusharli con  le policy di AD)

Ecco alcune semplici note sui browser per passare in automatico le credenziali Windows
--------------------------------------------------------------

INTERNET EXPLORER

è necessario mettere *.acme.local nei TRUSTED SITE
Poi per Local Zone --> Automatic Login only in Intranet Zone
Per Trusted Zone --> Automatic Logon with current username and Password

FIREFOX

digitare about:config nell'URL del Browser nelle chiavi:
network.negotiate-auth.trusted-uris
network.automatic-ntlm-auth.trusted-uris
ed inserire .acme.local

CHROME E SAFARI

Dovrebbero ereditare entrambi le impostazioni di IE  
--------------------------------------------------------------


L'implementazione in NGINX (reverse proxy che ho scelto n.d.r.) per la gestione del cluster Domino in https o https è a dir poco banale; basta solo definire quali server partecipano al cluster ed in che modo gestirlo (nel nostro esempio è un classico failover) con la direttiva upstream

 
upstream apps {
server 192.168.10.1:80 max_fails=1 fail_timeout=5s;
server 192.168.10.2:80 backup;    
}


successivamente con questa sintassi si associa l'indirizzo http://apps.acme.local al cluster appena definito sopra
 
server {
listen       80;
server_name  apps.acme.local;
client_max_body_size 100m;
access_log  /var/log/nginx/apps_acme_local_access.log  main;
error_log   /var/log/nginx/apps_acme_local_error.log;
location / {
proxy_set_header X-Real-IP  $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_set_header        X-Forwarded-Proto $scheme;
proxy_pass http://apps;
}
}



All'interno del nostra infrastruttura Domino invece abiliteremo gli internet site web e faremo in modo che sull'internet site apps.acme.local rispondano entrambi i server Domino (apps e apps2) con il token LtpaToken con integrazione Windows attiva.

Image:nginx reverse proxy SPNEGO per cluster Domino


Infine se da vostro DNS interno farete un HOST record che risolve apps.acme.local verso l'IP del vostro server NGINX farete due cose:
metterete in Web HA cluster anche le vostre apps ed abiliterete in contemporanea SPNEGO su un cluster applicativo.
Quello che abbiamo appena realizzato si chiama alta affidabilità :-)


Implementazione cluster e SSO Spnego con due server cluster Domino Linux


Qui le cose invece si sono complicate un pochino, e grazie al supporto di Giuseppe Grasso, si è trovata una soluzione elegante ed allo stesso modo efficente per gestire la richiesta del cliente:

"Voglio fare in modo che digitando http://mail.acme.local si possa accedere in SSO diretto sul cluster dei miei server di posta Linux"

Qui il problema principale è legato al fatto che il servizio SPNEGO funziona solamente su ambienti server Windows. Come fare quindi per Linux?
Esistono diverse strade (DSAPI da sviluppare, login su server Windows e redirect 301 verso Linux etc..)

Una soluzione che nemmeno io pensavo si potesse fare con un reverse proxy come NGINX è stata questa

"Facciamo loggare l'utente al cluster Windows per ottenere trust SSO così una volta ottenuto il cookie Ltpatoken redirezioniamo il traffico verso i server di posta Linux, in modo che sia tutto trasparente per l'utente finale"

In questo modo per l'utente finale risulta essere tutto più semplice e quello che è stato fatto in backend su NGINX è stato questo:

 

upstream apps {
server 192.168.10.1:80 max_fails=1 fail_timeout=5s;
server 192.168.10.2:80 backup;
}

upstream mail {
server 192.168.10.3:80 max_fails=1 fail_timeout=5s;
server 192.168.10.4:80 backup;
}

map $http_cookie $autenticato{
default http://apps;
~LtpaToken http://mail;
}



server {
listen       80;
server_name  mail.acme.local;
client_max_body_size 100m;
access_log  /var/log/nginx/mailSSO_acme_local_access.log  main;
error_log   /var/log/nginx/mailSSO_acme_local_error.log;
location / {
proxy_set_header X-Real-IP  $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_set_header        X-Forwarded-Proto $scheme;
proxy_pass $autenticato;
}
}



I primi due blocchi di upstream definiscono il cluster dei rispettivi server.
Mentre la direttiva map (ed è qui la chiave di volta n.d.r) controlla la presenza del cookie LtpaToken ed associa alla variabile $autenticato lo stream sul quale dirottare il traffico.
Infine la direttiva  proxy_pass $autenticato; effettua un redirect dinamico in funzione del valore associato a questa variabile!

Ricordo solo che così come nello scenario Windows è necessario dapprima mettere a posto la sicurezza active directory con l'apposito comando SETSPN

 
SETSPN -a HTTP/mail.acme.local admdomino


e successivamente creare un internet site associato a tutti i server (Linux e non) per gestire la chiamata mail.acme.local

Image:nginx reverse proxy SPNEGO per cluster Domino


Sfruttando il template iNotes redirect presente in qualunque server Domino diventa automatico il redirect alla propria casella di posta

Image:nginx reverse proxy SPNEGO per cluster Domino


In tutto questo passaggio l'utente non sa che in realtà si è autenticato sul server Windows e poi è andato a finire su Linux ..tutto è trasparente!

L'utente digiterà http://mail.acme.local e NGINX farà il resto

Infine Per i soli server di posta consiglio di inserire nel Notes.ini i parametri INOTES_WA_SECURITY_NONCECHECK=0
NOTES_WA_SECURITY_REFERERCHECK=0 come indicato in questa techNotes IBM

A presto

4 Commenti:

  • #1 Giorgio 04/19/2016 10:21:51 AM

    Ottimo articolo ed ottima risorsa!

  • #2 Giuseppe 04/18/2016 3:15:33 PM

    @Uwe: we've made an english version: { Link }

  • #3 Daniele 04/18/2016 12:44:38 PM

    hello @ Uwe Brahm,

    this is a blog in Italian. We know that in English would have a wider audience.

    But we have no time because this activity is purely voluntary :-)

    But you can try using Google Translate and it seems that the translation is also good.

    { Link }

    Have you a good day!

  • #4 Uwe Brahm 04/18/2016 12:36:12 PM

    Could you provide an English version?

    You can reach far more people if you document your work in English.

    Thanks,

    Uwe

Commenta articolo
 

Questo spazio web è stato creato da per un uso pubblico e gratuito. Qualsiasi tipo di collaborazione sarà ben accetta.
Per maggiori informazioni, scrivete a info@dominopoint.it

About Dominopoint
Social
Dominopoint social presence: