Reglas de aplicación utilizadas habitualmente.

Redireccionamiento de HTTP/HTTPS basado en condición

Un perfil de aplicación permite especificar una redirección HTTP/HTTPS, en la cual el tráfico se redirige siempre, independientemente de las direcciones URL de solicitud. También se obtiene flexibilidad para especificar las condiciones en las que se debe redirigir el tráfico HTTP/HTTPS.

move the login URL only to HTTPS. 
acl clear dst_port 80
acl secure dst_port 8080
acl login_page url_beg /login 
acl logout url_beg /logout 
acl uid_given url_reg /login?userid=[^&]+ 
acl cookie_set hdr_sub(cookie) SEEN=1
redirect prefix https://mysite.com set-cookie SEEN=1 if !cookie_set
redirect prefix https://mysite.com if login_page !secure
redirect prefix http://mysite.com drop-query if login_page !uid_given
redirect location http://mysite.com/ if !login_page secure
 redirect location / clear-cookie USERID= if logout

Enrutamiento por nombre de dominio

Es posible crear una regla de aplicación para dirigir las solicitudes a un grupo de equilibradores de carga específico según el nombre de dominio. La siguiente regla dirige las solicitudes de foo.com a pool_1 y las solicitudes de bar.com a pool_2.

acl is_foo hdr_dom(host) -i foo
  acl is_bar hdr_dom(host) -i bar
  use_backend pool_1 if is_foo
  use_backend pool_2  if is_bar

Protección y equilibrio de carga RDP de Microsoft

En el siguiente escenario de prueba, el equilibrador de carga envía un nuevo usuario al servidor menos cargado y reanuda una sesión interrumpida. La dirección IP de la interfaz interna de NSX Edge para este escenario es 10.0.0.18, la dirección IP de la interfaz interna es 192.168.1.1 y los servidores virtuales son 192.168.1.100, 192.168.1.101, y 192.168.1.102.

  1. Cree un perfil de aplicación para el tráfico de TCP con persistencia de Escritorio remoto de Microsoft (MSRDP).

  2. Cree una supervisión de estado de TCP (tcp_monitor).

  3. Cree un grupo (llamado rdp-pool) con 192.168.1.100:3389, 192.168.1.101:3389 y 192.168.1.102:3389 como miembros.

  4. Asocie tcp_monitor con rdp-pool.

  5. Cree la siguiente regla de aplicación.

    tcp-request content track-sc1 rdp_cookie(mstshash) table rdp-pool
    tcp-request content track-sc2 src table ipv4_ip_table
     
    #   each single IP can have up to 2 connections on the VDI infrastructure
    tcp-request content reject if { sc2_conn_cur ge 2 }
    
    #   each single IP can try up to 5 connections in a single minute
    tcp-request content reject if { sc2_conn_rate ge 10 }
    
    # Each user is supposed to get a single active connection at a time, block the second one
    tcp-request content reject if { sc1_conn_cur ge 2 }
    
    # if a user tried to get connected at least 10 times over the last minute, 
    # it could be a brute force
    tcp-request content reject if { sc1_conn_rate ge 10 }
    
    
  6. Cree un servidor virtual (con el nombre rdp-vs).

  7. Asocie el perfil de aplicación a este servidor virtual y agregue la regla de aplicación creada en el paso 4.

Esta regla aplicada recientemente en el servidor virtual protege los servidores RDP.

Registro avanzado

De forma predeterminada, el equilibrador de carga de NSX es compatible con el inicio de sesión básico. Es posible crear una regla de aplicación mediante los siguientes pasos para ver mensajes de registro más detallados para la solución de problemas.

 # log the name of the virtual server
 capture request  header Host len 32

 # log the amount of data uploaded during a POST
 capture request  header Content-Length len 10
# log the beginning of the referrer
capture request  header Referer len 20

# server name (useful for outgoing proxies only)
capture response header Server len 20

# logging the content-length is useful with "option logasap"
capture response header Content-Length len 10

# log the expected cache behaviour on the response
capture response header Cache-Control len 8

# the Via header will report the next proxy's name
 capture response header Via len 20

# log the URL location during a redirection
capture response header Location len 20

Después de asociar la regla de aplicación al servidor virtual, los registros incluirán mensajes detallados como los que se muestran en el siguiente ejemplo.

2013-04-25T09:18:17+00:00 edge-187 loadbalancer[18498]: [org1]: 10.117.7.117 - - [25/Apr/2013:09:18:16 +0000] "GET /favicon.ico HTTP/1.1" 404 1440 "" "" 51656 856 "vip-http-complete" 
"pool-http-complete" "m2" 145 0 1 26 172 --NI 1 1 0 0 0 0 0 "" "" "10.117.35.187" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 
(KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31" "Apache/2.2.15 (Linux" ""

2013-04-25T09:18:17+00:00 edge-187 loadbalancer[18498]: [org1]: 10.117.7.117 - - [25/Apr/2013:09:18:16 +0000] "GET /favicon.ico HTTP/1.1" 404 1440 "" "" 51657 856 "vip-http-complete" 
"pool-http-complete" "m2" 412 0 0 2 414 --NI 0 0 0 0 0 0 0 "" "" "10.117.35.187" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 
(KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31" "Apache/2.2.15 (Linux" ""

Para solucionar problemas en el tráfico HTTPS, es posible que sea necesario agregar más reglas. La mayoría de las aplicaciones web utilizan respuestas 301/302 con un encabezado de ubicación para redirigir el cliente a una página (casi siempre después de un inicio de sesión o una llamada POST) y también requieren una cookie de aplicación. Es por eso que el servidor de aplicaciones puede tener dificultades para conocer la información de conexión del cliente y no pueda proporcionar las respuestas correctas; incluso puede impedir que la aplicación funcione.

Para permitir que una aplicación web admita la descarga de SSL, agregue la siguiente regla.

# See clearly in the log if the application is setting up response for HTTP or HTTPS
capture response header Location   len 32
capture response header Set-Cookie len 32

# Provide client side connection info to application server over HTTP header
http-request set-header X-Forwarded-Proto https if  { ssl_fc }
http-request set-header X-Forwarded-Proto http  if !{ ssl_fc }

El equilibrador de carga insertará el siguiente encabezado cuando la conexión se establezca mediante SSL.

X-Forwarded-Proto: https

El equilibrador de carga insertará el siguiente encabezado cuando la conexión se establezca mediante HTTP.

X-Forwarded-Proto: http

Bloquear URL específicas

Es posible bloquear solicitudes que tengan palabras clave específicas en la URL. La siguiente regla comprueba si la solicitud empieza por /private o /finance y bloquea las solicitudes que tienen dichos términos.

# Check if the request starts with "/private" or "/finance" (case insensitive)
acl block_url_list path_beg -i /private /finance

# If the request is part of the list forbidden urls,reply "Forbidden"(HTTP response code
 403)
block if block_url_list

Redireccionamiento de autenticación HTTP si no hay cookies

Es posible redireccionar la solicitud de un cliente que no tenga cookies para obtener una autenticación. La siguiente regla comprueba si la solicitud de HTTP es auténtica y tiene cookies en el encabezado. Si la solicitud no tiene cookies, la regla redirecciona la solicitud a / authent.php para la autenticación.

acl authent_url url /authent.php
acl cookie_present hdr_sub(cookie) cookie1=
redirect prefix /authent.php if !authent_url !cookie_present

Redireccionamiento de la página predeterminada

Es posible redireccionar la solicitud del cliente / a una página predeterminada. La siguiente regla comprueba si la solicitud de HTTP es / y redirecciona la solicitud a la página de inicio de sesión predeterminada.

acl default_url url /
redirect prefix /login.php if default_url

Redireccionamiento al sitio de mantenimiento

Cuando el grupo primario esté fuera de servicio, puede usar un grupo de servidores de mantenimiento y redireccionar la URL a la página web de mantenimiento.

redirect location http://maitenance.xyz.com/maintenance.htm

Autenticación NT LAN Manager (NTLM)

De forma predeterminada en el lado del servidor, NSX cierra la conexión TCP después de cada solicitud. Si no desea cerrar la sesión del servidor tras cada solicitud, puede mantener dicha sesión activa y segura con el protocolo NTLM.

no option http-server-close

De forma predeterminada en el lado del cliente, NSX mantiene la conexión TCP establecida entre las solicitudes. Sin embargo, con la opción "Reenvío de X" (X-Forwarded-For), la sesión se cierra después de cada solicitud. La siguiente opción mantiene abierta la conexión del cliente entre las solicitudes, incluso si XFF está configurado.

no option httpclose

Reemplazar el encabezado del servidor

Puede eliminar el encabezado del servidor de la respuesta existente y reemplazarlo por otro servidor. La siguiente regla de ejemplo elimina el encabezado del servidor y lo reemplaza por el servidor web NGINX que puede actuar como servidor proxy inverso para los protocolos HTTP, HTTPS, SMTP, POP3, y IMAP, la caché HTTP y un equilibrador de carga.

rspidel Server
rspadd Server:\ nginx

Volver a escribir el redireccionamiento

Puede cambiar el encabezado de ubicación de HTTP a HTTPS. La siguiente regla de ejemplo identifica el encabezado de ubicación y reemplaza HTTP por HTTPS.

rspirep ^Location:\ http://(.*)  Location:\ https://\1

Seleccionar un grupo específico basado en un host

Puede redireccionar solicitudes con un host específico a los grupos definidos. La siguiente regla de ejemplo revisa la solicitud de los hosts específicos app1.xyz.com, app2.xyz.com y host_any_app3 y redirecciona estas solicitudes respectivamente a los grupos definidos pool_app1, o pool_app2 y pool_app3. El resto de las solicitudes se redireccionan a los grupos existentes definidos en el servidor virtual.

acl host_app1 hdr(Host) -i app1.xyz.com
acl host_app2 hdr(Host) -i app2.xyz.com
acl host_any_app3 hdr_beg(host) -i app3

Use un grupo específico para cada nombre de host.

use_backend pool_app1 if host_app1
use_backend pool_app2 if host_app2
use_backend pool_app3 if host_any_app3

Seleccionar un grupo específico basado en URL

Puede redireccionar solicitudes con palabras clave de URL a los grupos específicos. La siguiente regla de ejemplo comprueba si la solicitud comienza por /private o /finance y las redirecciona a los grupos definidos, pool_private o pool_finance. El resto de las solicitudes se redireccionan a los grupos existentes definidos en el servidor virtual.

acl site_private path_beg -i /private
acl site_finance path_beg -i /finance
use_backend pool_private if site_private
use_backend pool_finance if site_finance

Redireccionar cuando el grupo principal está fuera de servicio

Si los servidores están fuera de servicio en el grupo principal, puede redireccionar usuarios para utilizar los servidores en el grupo secundario. La siguiente regla de ejemplo comprueba que pool_production está fuera de servicio y transfiere los usuarios a pool_sorry_server.

acl pool_production_down nbsrv(pool_production) eq 0
use_backend pool_sorry_server if pool_production_down

Conexión a TCP de la lista blanca

Puede bloquear las direcciones IP cliente para que no accedan al servidor. La siguiente regla de muestra bloquea la dirección IP definida y restablece la conexión si la dirección IP del cliente no está en la lista blanca.

acl whitelist src 10.10.10.0 20.20.20.0
tcp-request connection reject if !whitelist

Habilitar sslv3 y tlsv1

Las extensiones de supervisión de servicio sslv3 y tlsv1 están deshabilitadas de forma predeterminada. Puede habilitarlas mediante la siguiente regla de aplicación.

sslv3 enable
tlsv1 enable

Configurar el tiempo de espera de la sesión del cliente

El tiempo de espera de la sesión es el tiempo de inactividad de conexión máximo en el lado de cliente. El tiempo de espera de inactividad se aplica cuando se espera que el cliente confirme o envíe datos. En el modo HTTP, es importante considerar este tiempo de espera durante la primera fase, cuando el cliente envía la solicitud y durante la respuesta mientras el cliente está leyendo los datos enviados por el servidor. El valor del tiempo de espera por defecto es de cinco minutos.

La siguiente regla de muestra establece el periodo de tiempo de espera en 100 segundos.

timeout client 100s

Se puede establecer el tiempo como número entero con milisegundos, segundos, minutos, horas o días.

Redireccionamiento al sitio HTTPS

Puede redirigir los clientes que llegan sobre HTTP a la misma página en HTTPS.

# Redirect all HTTP requests to same URI but HTTPS redirect scheme
https if !{ ssl_fc }

También dispone de otra opción:

rspirep ^Location:\ http://(.*) Location:\ https://\1 

Redirigir los clientes no autenticados

Redirige las peticiones de clientes a "/authent.php" si no tienen una cookie.

# Check the HTTP request if request is "/authent.php"
acl authent_url url /authent.php
# Check the cookie "cookie1" is present
acl cookie_present hdr_sub(cookie) cookie1=
# If the request is NOT "/authent.php" and there is no cookie, then redirect to "/authent.php"
redirect prefix /authent.php if !authent_url !cookie_present 

Reescritura de encabezado de respuesta HTTP

Sustituya el encabezado del servidor de respuesta "Servidor" (Server) por el valor "nginx".

# Delete the existing Response Server header "Server"
rspidel Server
# Add the Response Server header "Server" with the value "nginx"
rspadd Server:\ nginx

Servidor de respaldo

En caso de que todos los servidores del grupo principal estén inactivos, utilice los servidores del grupo secundario,

# detect if pool "pool_production" is still up
acl pool_production_down nbsrv(pool_production) eq 0
# use pool "pool_sorry_server" if "pool_production" is dead
use_backend pool_sorry_server if pool_production_down
# Option 1: # Redirect everything to maintenance site
redirect location http://maintenance.xyz.com/maintenance.htm
# Option 2: #Use a specific maintenance server pool and rewrite all URLs to maintenance.php
acl match_all always_true
use_backend maint_pool if match_all
reqirep ^GET\(.*)\HTTP/(.*) GET\ /maintenance.php\ HTTP/\2