iNotes con Reverse Proxy Apache – Parte IV

Bueno vamos a terminar la parte de configuración de Domino para que Inotes funcione como esperamos.

Si recordais la configuración de Apache, habíamos definido tantos “balancer” como cluster domino tenemos detras

<Proxy balancer://CLUSTERSL1>
BalancerMember http://srv1.internal.local:80/ route=SRV1
BalancerMember http://srv2.internal.local:80/ route=SRV2
ProxySet lbmethod=byrequests
</Proxy>
.......

Luego definiamos los ProxyPass y ProxyPassReverse y nos ayudabamos de la cookie de tipo stickysessioninotesses” que realmente indica el servidor final del usuario para nuestro ejemplo la cookie inotesses tendra un valor del tipo blablabla.SRVx y lo que importa es .SRVx que como veis en la definición BalanceMember de arriba ( route=SRVx)

ProxyPass / balancer://CLUSTERSL1 stickysession=inotesses 
nofailover=Off 
ProxyPassReverse / http://srv1.internal.local/ 
ProxyPassReverse / http://srv2.internal.local/

Por ultimo teniamos los Rewrite, que se apoyaban en la cookie _clusterses

RewriteCond %{HTTP_COOKIE} _clusterses=CLUSTERSL1 [NC]
RewriteRule ^/((mail|iNotes|icons|domjava)/.*)$ balancer://CLUSTERSL1/$1 [P]

Con toda esta teoria, nos queda decirle a Domino que cuando un usuario haga login, busque su servidor de correo y lo ponga en la cookie “inotesses” y una vez localizado el servidor ponga el cluster al que pertenece ese servidor en la cookie “_clusterses”.

A trabajar en iwaredir.nsf

Primero configuraremos iwaredir.nsf para que el tipo de redirección sea dinámica (como si trabajaramos en un unico servidor), ya que el trabajo duro estará en las cookies.

iwaredir-config

Todo esto lo tendremos que hacer en el formulario “Autologin” de nuestra base de datos de Redirección basada en la plantilla de servidor “iwaredir.ntf”. Este formulario es el que aparece después de que el usuario se identifica y que acaba redirigiendonos a nuestro buzón.

En este ejemplo he añadido un campo “Apache” para que quede mas limpia la solución pero podríamos trabajar directamente sobre el campo “$$HTMLHead”

Abrimos el formulario Autologin en Notes Designer, añadimos un campo “Calculado al visualizar” que vamos a llamar “Apache” y le indicamos la siguiente @Formula

iwaredir-autologin

 

Como veis, el campo no aporta nada, pero si añade las dos cookies en el Reverse Proxy necesarias a las cabeceras de la página.

NOTA: el texto blablabla no vale de nada (es paja) bastaria con un “.”+nodecookievalue

LTPATOKEN

Ahora se nos plantea un ultimo problema, si recordais definimos la cookie de session multiservidor LTPATOKEN para el dominio “.internal.local” y sin embargo estamos entrando por el dominio externo “.miempresa.com”, lo que significa que me quedare todo el rato en la pantalla de Login. ya que el servidor me da una cookie de sesion del dominio local y mi navegador no la aceptara, ni presentara

Para solucionar esto en nuestro apache añadiremos la directiva ProxyPassReverseCookieDomain donde cambiaremos el dominio de nuestras cookies por el dominio “publico”

NOTA: Domino antes solo soportaba una LTPATOKEN, pero desde que existen Internet Sites podemos usar mas de una para diferentes dominios. (en este ejemplo no lo usamos)

Esto nos permite crear en Domino una cookie LTPATOKEN para el dominio local y otra para el dominio publico definiendo distintos Internet Sites. Pero tendríamos que hacer que apache se conecte a los servidores finales usando hosts con el dominio publico que podríamos incorporar en la tabla host de Apache. Sobre todo si estamos hartos del apache jeje.

Se que ha sido una serie un poco larga y quizas muy tecnica, espero haberme explicado bien y que os ayude en vuestros proyectos.

Escribiré un último artículo resumen y estaré encantado de recibir vuestras opiniones o dudas (incluso por privado), además para aquellos que se apunten al RSS, añadiré un poco mas de información como premio a la fidelidad.

[solofeed] Prueba de contenido Extra en RSS[/solofeed]

  15 comments for “iNotes con Reverse Proxy Apache – Parte IV

  1. marzo 11, 2013 at 4:37 pm

    Hello Again,

    Finally, my multi-cluster Domino setup is up and running… Hurray !! :0)

    Just 2 modifications required to your wonderful article:
    1. Need to add ‘/’ after Cluster name in the following line i.e.
    ProxyPass / balancer:/ /CLUSTERSL1/ stickysession = inotesses
    NOFAILOVER = Off
    2. In iwaredir.nsf configuration, changed mode to “Fixed” and added the external URL to it.

    Thanks again for all your help !

    • Daniel Recio
      marzo 11, 2013 at 8:37 pm

      Thanks for feedback

  2. mayo 15, 2013 at 6:21 pm

    Buenas tardes,
    en nuestro caso hemos realizado la configuración sin la opción de Cluster, pero tenemos un problema, y es que al acceder al panel lateral del iNotes, aparece el siguiente mensaje de error: “Error al ejecutar la acción de perfil de widget “GetAll”: Tipo de contenido no válido: text/html; charset=UTF-8″
    La solución parece ser que es “Take steps to allow the ShimmerS cookie and the “X-IBM-INOTES-NONCE” field to pass freely and untouched between the browser and Domino”, pero no sabemos como hacer esto. ¿Nos podrías ayudar con esto?.
    Muchas gracias

    • Daniel Recio
      mayo 15, 2013 at 8:46 pm

      Bueno, habria que empezar por saber un poco mas. Version de Servidor, version de la plantilla usada en el buzon, con que navegador….

      Intuyo que la version que tienes es la 8.5.2 y que tu proxy no esta dejando pasar o no esta sobreescribiendo la cookie X-IBM-INOTES-NONCE entre el navegador y el servidor final.

      REFERENCIAS: http://www-01.ibm.com/support/docview.wss?uid=swg21453878

      Otra posible solucion (sobreescribir cabeceras) http://forums.juniper.net/t5/SSL-VPN/Lotus-Notes-iNotes-not-working/td-p/48397

      For iNotes 8.5.2, can you try adding a Custom Header policy to allow custom headers?

      It looks like iNotes has introduced a HTTP header called X-IBM-NOTES-NONCE to combat some XSS vulnerabilities but this is not a standard HTTP header so the SA will block it by default.

      Go to Users > Resource Policies > Web > Custom Headers
      Click ‘New Policy..’
      Create the policy with:
      Name: iNotes custom header policy
      Resources: enter your iNotes URL e.g. https://inotes.company.acme:443/*
      Roles: Select Roles that have iNotes access
      Action: Allow Custom Headers

      4. Click ‘Save Changes’

      • mayo 17, 2013 at 1:42 pm

        Buenas tardes Daniel,

        no encuentro en el Domino Administrator el menú Go to Users > Resource Policies > Web > Custom Headers para poder crear la política de las cabeceras.
        Nuestra versión de Domino es la 9 Social Edition.

        Muchas gracias por tu ayuda

  3. Prem
    septiembre 13, 2013 at 1:55 pm

    Hi Daniel

    In Apache reverse proxy, what code can we add in the http configuration file to destroy the cookie after Logout Action.

    I mean, when user clicks on “Logout”, cookies which is storing server name should be destroy.

    • Daniel Recio
      septiembre 13, 2013 at 3:48 pm

      Hi Prem, thanks for your comment.
      You could destroy them in “AutoLogin” form when User is Anonymous.

      • dean
        octubre 3, 2013 at 8:31 am

        Hi Daniel

        What could be the code which will destroy the cookie after logout, when user is Anonymous.

        • Daniel Recio
          octubre 4, 2013 at 9:35 am

          Hi dean.

          Prem wrote a great solution, with rewrite

          # Rule 0 : If Cookie is set and user logs out, remove the cookie
          RewriteCond %{HTTP_COOKIE} ^.*inotesses=.*
          RewriteCond %{QUERY_STRING} ^Logout
          RewriteRule ^/.* - [CO=inotesses:blablabla:.acme.com:1]
          • dean
            octubre 5, 2013 at 12:39 pm

            Hi Daniel

            Thanks For Reply.

            I have tried that code and able to rewrite the cookie to specified value.

            But one strange thing is happening, that when user logs in, Browser receives the cookie value equal to home server, but when user logs out i can see the two cookies values in the browser

            inotesses=mailsrv1
            inotesses=blablabla.

          • Daniel Recio
            octubre 8, 2013 at 11:35 pm

            Hi dean.

            I found this , perhaps it is better solution

            I will try it and write a summary post

    • Daniel Recio
      septiembre 13, 2013 at 10:22 pm
      • dean
        octubre 28, 2013 at 9:38 am

        Hi Daniel

        Did you find something?

  4. Prem
    septiembre 17, 2013 at 1:47 pm

    Hi Daniel

    Thanks for help. Now i am able to change the value of cookie after logout.

    But i have some point on which i need help from you.

    First let me share my complete test environment.
    ——————————————————————————-
    I have prepared a Domino test environment with following details:

    1. Two Domino Server (8.5.3)
    1st server name: mailsrv1/acme (webmail1.acme.com)
    2nd server name: mailsrv2/s_srv/acme (webmail2.acme.com)

    2. Both servers are in cluster (abccluster)

    3. Created Multiple SSO with Ltpa Token

    4. Created web redirector database (iwaredir-new.nsf)

    5. Created a field “Apache” in the Autologin Form in
    iwaredir-new.nsf database. and paste following code

       nodecookievalue:= @Name([CN];@NameLookup([NoUpdate];@UserName;"MailServer"));
    clustercookievalue:=@DbLookup("":"";@Subset(@DbName;1):
    "names.nsf";"($ServersLookup)";nodecookievalue;"clustername");
    nodecookie:=@SetHTTPHeader("Set-Cookie";"inotesses="+@LowerCase(nodecookievalue));
    @Success
    

    ——-Now on RHEL 5.4 Apache server configuration————

    I put following entries in httpd.conf

    ServerName mailproxy.acme.com
    ProxyRequests Off
    RewriteEngine On
    ProxyPreserveHost On
    
    
    BalancerMember http://webmail1.acme.com:80/ route=webmail1 loadfactor=50
    
    BalancerMember http://webmail2.acme.com:80/ route=webmail2 loadfactor=50
    
    ProxySet lbmethod=byrequests
    
    
    ProxyPass / balancer://cluster1/ stickysession=inotesses nofailover=off
    
    ProxyPassReverse / http://webmail1.acme.com/
    
    ProxyPassReverse / http://webmail2.acme.com/
    
    RewriteCond %{HTTP_COOKIE} inotesses=webmail1 [NC]
    
    RewriteRule ^/((mail|iNotes|icons|domjava)/.*)$ balancer://cluster1/$1 [P]
    
    RewriteCond %{HTTP_COOKIE} inotesses=webmail2 [NC]
    
    RewriteRule ^/((mail|iNotes|icons|domjava)/.*)$ balancer://cluster1/$1 [P]
    
    # Rule 0 : If Cookie is set and user logs out, remove the cookie
    RewriteCond %{HTTP_COOKIE} ^.*inotesses=.*
    RewriteCond %{QUERY_STRING} ^Logout
    RewriteRule ^/.* - [CO=inotesses:blablabla:.acme.com:1]
    

    ——————————————————————————

    Now when i hit the URL mailproxy.acme.com (Apache reverse proxy hostname) it present me with the login page.

    After providing accurate credentials for a user (notes admin) whose home server is mailsrv1,
    when i execute the command “tell http sh users”, on both servers
    shows me that notes admin is login.

    But when i logout, then session on the Home server immediately destroy, but secondary servers still show that user is logged on.
    and remain valid till LTPA token expiration period reached.

    Second thing is that, if user database is present only on one server.
    Ex. If a user Prem Yadav, whose home server is mailsrv1, and his database is present only on mailsrv1, not on cluster mate.

    When he provide login credential, i find error message on secondary server that database not present. and can not login.

    So basically what could be the reason for session remain open on secondary server,
    and why user can not login if his database is present only on one server..

    • Daniel Recio
      octubre 4, 2013 at 9:49 am

      Hi Prem.

      Thanks a lot for your code

      First question, I think that you are logged out correctly, but perhaps Domino Console has cache of last users that accesed to web server.

      Second Question. You could redirect 404 pages to another that rewrite cookie inotessess to correct server (another server of cluster)

      ErrorDocument 404 http://uri.example/page-that-rewrite-or-set-correct-cookie
      

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *