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.
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
Sfruttando il template iNotes redirect presente in qualunque server Domino diventa automatico il redirect alla propria casella di posta
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:
Ottimo articolo ed ottima risorsa!
@Uwe: we've made an english version: { Link }
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!
Could you provide an English version?
You can reach far more people if you document your work in English.
Thanks,
Uwe