Reglas de aplicación utilizadas habitualmente.
Redireccionamiento de HTTP/HTTPS basado en condición
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
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
- Cree un perfil de aplicación para el tráfico de TCP con persistencia de Escritorio remoto de Microsoft (MSRDP).
- Cree una supervisión de estado de TCP (tcp_monitor).
- 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.
- Asocie tcp_monitor con rdp-pool.
- 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 }
- Cree un servidor virtual (con el nombre rdp-vs).
- 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
# 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 20Despué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.
# 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 }
X-Forwarded-Proto: https
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) http-request deny 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 location /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