aFleX Beispiele

Aktualisiert: Nov 9, 2020
aFleX kann eine große Anzahl von Bedürfnissen erfüllen. Hier sind einige Beispiele:
- Verfügbarkeit
- Security
- Flexibilität
- Protokollierung
Aber vergessen Sie nicht, dass aFleX auch für viele andere Bedürfnisse eingesetzt werden kann.
Verfügbarkeit
Bereitstellen einer Entschuldigungsseite, wenn alle Server oder die Anwendung ausgefallen sind
Das folgende aFleX-Skript antwortet mit einer Entschuldigungsseite, wenn alle Server der Dienstgruppe "Server_HTTP" ausgefallen sind.
when HTTP_REQUEST {
if {[LB::status pool Server_HTTP] equals "down" } {
HTTP::respond 200 content "<html><head><title>Apology
Page</title></head><body>We are sorry for the inconvenience, but
the site is temporarily out of service<br>If you feel you have
reached this page in error, please try again.<p></body></html>"
}
}
Umleitung von Endbenutzern auf das Backup-Rechenzentrum, wenn alle Server ausgefallen sind oder die Anwendung nicht mehr funktioniert
Das folgende aFleX-Skript leitet Endbenutzer auf das Backup-Rechenzentrum (backup.example.com) um, wenn alle Server in der Dienstgruppe "Server_HTTP" ausgefallen sind.
when HTTP_REQUEST {
if {[LB::status pool Server_HTTP] == "down" } {
HTTP::redirect "https://backup.example.com"
}
}
Security
Nur internen Benutzern den Zugriff auf das Webverzeichnis "/private" gestatten
Drei verschiedene aFleX-Skripte werden als Beispiele zur Verfügung gestellt, um diesen Bedarf zu decken.
Hinweis: In diesem Beispiel gehen wir davon aus, dass sich die internen Benutzer im Subnetz 192.168.18.0/24 befinden.
Das erste aFleX-Beispielskript verwirft alle Anfragen von externen Benutzern, die auf den "privaten" Bereich der Website zugreifen.
when HTTP_REQUEST {
if {not [IP::addr [IP::client_addr] equals 192.168.18.0/24] and ([HTTP::uri] starts_with "/private")} {
drop
}
}
Anstatt alle Anfragen von externen Benutzern, die auf den "privaten" Bereich der Website zugreifen, abzulehnen, leitet das folgende aFleX-Skriptbeispiel sie auf eine Seite um, die erklärt, warum sie nicht auf diesen Bereich der Website zugreifen können.
when HTTP_REQUEST {
if {not [IP::addr [IP::client_addr] equals 192.168.18.0/24] and ([HTTP::uri] starts_with "/private")} {
HTTP::redirect "https://www.example.com/not_authorized.html"
}
}
Hinweis: Die Seite not_authorized.html wird auf dem Webserver www.example.com gehostet.
Das folgende aFleX-Skript-Beispiel antwortet direkt mit einer Seite, die erklärt, dass externe Benutzer nicht auf diesen Bereich der Website zugreifen können.
Hinweis: Bei dieser Lösung muss keine Seite auf dem Webserver gehostet werden.
when HTTP_REQUEST {
if {not [IP::addr [IP::client_addr] equals 192.168.18.0/24] and ([HTTP::uri] starts_with "/private")} {
HTTP::respond 200 content "This web section is accessible only from our corporate offices."
}
}
Flexibilität
Transparente Umwandlung einer HTTP-Webanwendung in HTTPS
Dies kann einfach mit einem VIP, der HTTPS abhört, und Servern, die HTTP verwenden, geschehen, aber es gibt zwei Punkte, die Sie beachten sollten:
- Zusätzlich zum VIP für HTTPS können Sie das VIP auch für HTTP konfigurieren. Dieses HTTP-VIP leitet Benutzer über HTTPS immer auf die gleiche Seite um, die sie über HTTP aufrufen. Dies kann z. B. für Endbenutzer mit alten Browser-Lesezeichen, die auf HTTP verweisen, nützlich sein.
- Wenn Webserver Weiterleitungen zu anderen HTTP-Seiten senden, müssen diese mit HTTPS umgeschrieben werden.
Das folgende aFleX-Skript leitet die Endbenutzer von HTTP auf HTTPS um.
Hinweis: Die HTTP-zu-HTTPS-Umleitung kann auch über den CLI-Befehl "redirect-to-https" erfolgen (über GUI: ADC > SLB > Virtuelle Server > "VIP" > Virtueller Port > Erweiterte Felder > Auf HTTPS umleiten).
# redirect HTTP request to https URL
when HTTP_REQUEST {
HTTP::redirect https://[HTTP::host][HTTP::uri]
}
Das folgende aFleX-Skript schreibt die Umleitungen des Webservers um.
Hinweis: Die Webserver-Umleitungen können mit der Option "Redirect Rewrite" in einem HTTP-Template umgeschrieben werden (über GUI: ADC > Templates > Layer 7 Protocols > HTTP > Redirect Rewrite), anstatt ein aFleX-Skript zu verwenden.
# rewrites relative and absolute redirects to absolute HTTPS redirects
when HTTP_REQUEST {
set host [HTTP::host]
}
when HTTP_RESPONSE {
if { [HTTP::is_redirect] } {
if { [HTTP::header Location] starts_with "/" } {
HTTP::header replace Location "https://$host[HTTP::header Location]"
} else {
HTTP::header replace Location "[string map {"http://" "https://"} [HTTP::header Location]]"
}
}
}
Protokollierung
Protokollieren Sie den Namen der Verschlüsselung, die Bits, die Version und das SNI-Feld, die beim SSL (Secure Sockets Layer)/TLS(Transport Layer Security) Handshake verwendet werden.
Das folgende aFleX-Skript protokolliert SSL/TLS-Verschlüsselungsinformationen und das SNI-Feld beim SSL/TLS-Handshake:
when CLIENTSSL_HANDSHAKE {
log "SSL cipher_name is [SSL::cipher name]"
log "SSL cipher_bit is [SSL::cipher bits]"
log "SSL cipher_version is [SSL::cipher version]"
log "SSL SNI is [SSL::hostname]"
}
Hinweis: Syntax und Befehle spiegeln die Version zum Zeitpunkt der Erstellung dieses Blogs wider; für zukünftige Versionen müssen möglicherweise Anpassungen vorgenommen werden.
Verwandte Beiträge
- Was ist aFleX?
- aFleX Tutorial: Scripting-Tool für Thunder-Produkte
- aFleX Erweiterte Skripterstellung
- Optimierung der aFleX-Skriptsprache
- aFleX Scripting Language Fehlerbehebung
aFleX-Skriptsprache und Layer 7 Deep-Packet-Inspection
aFleX ist eine leistungsstarke und flexible Skriptsprache, mit der Sie Ihren Datenverkehr verwalten und erweiterte Vorteile und Dienste anbieten können. Sie ist in den Thunder® Application Delivery Controller (ADC) integriert, eine hochleistungsfähige Load-Balancing-Lösung, mit der Ihre Anwendungen hochsicher, verfügbar und beschleunigt sind.