Meine Kollegen bei Edgenexus sind der Meinung, dass die F5 LTM Load Balancer zwar extrem leistungsfähig und flexibel sind, dass aber die Verwendung von iRules-Skripten zur Ausführung einiger grundlegender Funktionen zu unnötiger Komplexität führt.
Sie brauchen nur im Internet nach F5 iRules zu suchen, um festzustellen, wie viele IT-Experten sich mit der Erstellung funktionaler iRules herumschlagen müssen. Es stimmt zwar, dass durch die Erweiterung der Funktionalität der ‚Local Traffic Policies‘ in den letzten F5 Software-Releases die Erstellung von iRules für gängige Funktionen zur Manipulation von HTTP-Headern teilweise überflüssig geworden ist, aber es gibt immer noch viele Benutzer, die mit veralteten iRules in ihrer Systemkonfiguration feststecken.
Lokale Verkehrsrichtlinien scheinen keine Manipulation von HTML-Daten zuzulassen, obwohl die Stream-Richtlinien dies tun, aber sie sind ziemlich klobig und schwer zu kontrollieren. Standardmäßig wirken sie sich auf den Datenverkehr in beide Richtungen auf die gleiche Weise aus, obwohl dies in der Regel nicht erwünscht ist. Das bedeutet, dass Sie auf iRules zurückgreifen müssen, um Funktionen wie die Ersetzung eines URL-Textes von http:// nach https:// durchzuführen, die möglicherweise in Verbindung mit einer Umleitung von http:// nach https erforderlich ist, die mit lokalen Verkehrsrichtlinien durchgeführt werden kann.
Geben Sie Edgenexus flightPATH ein – Verkehrsmanagement leicht gemacht
Wir bei Edgenexus sind zu Recht stolz auf die Leistungsfähigkeit und die Einfachheit der Konfiguration unserer flightPATH Layer 7 HTTP-Manipulationsfunktion.
Wenn Sie bereits ein F5-Anwender sind und iRules für HTTP- oder HTML-Manipulationen verwenden, würden wir uns freuen, Ihnen eine Demonstration des Edgenexus ALB-X Load Balancers geben zu können und Ihnen zu zeigen, wie einfach flightPATH zu konfigurieren ist, um einige relativ komplexe Funktionen zu erreichen. Wir würden uns freuen, wenn wir Ihnen helfen könnten, Ihre bestehenden iRules-Funktionen in flightPATH-Regeln zu übersetzen.
Als Beispiel haben wir unten eine Auswahl von F5 iRules mit den entsprechenden Edgenexus flightPATH Regelkonfigurations-Screenshots wiedergegeben.
Quell-IP-Inhaltsserver-Steuerung
Hier ist ein Beispiel dafür, wie F5 iRules verwendet werden kann, um Benutzer aus einem bestimmten IP-Adressbereich zu einem Server-Pool und Benutzer aus einem anderen Bereich zu einem anderen Server-Pool zu leiten.
F5:
Name: | IP_Auswahl |
Definition: | when HTTP_REQUEST { if { ( [IP::addr [IP::client_addr] ist gleich 24.24.15.100] ) oder ( [IP::addr [IP::client_addr] ist gleich 10.1.1.2] ) } { pool pool2 } } |
Edgenexus:
Klicken Sie hier zum Vergrößern
- Erstellen Sie über die Web-GUI eine neue flightPATH-Regel mit dem Namen IP_Choice_Pool_1. Fügen Sie eine kurze Beschreibung hinzu, damit Sie erkennen können, welche Funktion die flightPATH-Regel erfüllt.
- Fügen Sie eine neue Bedingung hinzu und wählen Sie Source IP aus der umfangreichen Dropdown-Liste. Wählen Sie „Tut“ aus der Dropdown-Liste Sinn. Eine Option ist die Auswahl von „Start“ aus der Dropdown-Checkliste (alternativ können Sie andere Optionen wie RegEx verwenden, um mehr Flexibilität für die IP-Adresse „Wert“ zu erhalten). Geben Sie den Start-IP-Bereich in das Feld Wert ein.
- Fügen Sie eine neue Aktion hinzu. Wählen Sie in der Dropdown-Liste Aktion die Option Server verwenden (bei Bedarf gibt es auch die Option Sicheren Server verwenden). Geben Sie in das Feld Ziel die IP-Adresse und den Port des gewünschten Ziels ein. In der Regel handelt es sich dabei um eine andere Schnittstelle des virtuellen Dienstes, um einen Lastausgleich über einen anderen Pool von realen Servern zu ermöglichen.
Umleitung von HTTP zu HTTPS
Obwohl F5 jetzt eine Alternative zur Verwendung von iRules für die HTTP-zu-HTTPs-Umleitung anbietet, gibt es viele Fälle, in denen Benutzer weiterhin iRules für diese Funktion verwenden. iRules ermöglicht auch eine bessere Anpassung der Umleitungsparameter.
F5:
Name: | HTTP_HTTPs Umleitung |
Definition: | when HTTP_REQUEST { HTTP::redirect „https://[HTTP::host][HTTP::uri]“ } |
Edgenexus:
Klicken Sie hier zum Vergrößern
- Erstellen Sie eine neue flightPATH-Regel mit dem Namen HTTP zu HTTPS umleiten über die Web-GUI. Fügen Sie eine kurze Beschreibung hinzu, damit Sie erkennen können, welche Funktion die flightPATH-Regel ausführt.
- Bei den meisten Anwendungen muss die Umleitung von HTTP zu HTTPS für den gesamten Datenverkehr, der auf den HTTP-Dienst trifft, durchgeführt werden. In diesem Fall muss keine Bedingungsregel erstellt werden. Die Erstellung von Bedingungsregeln ist sehr flexibel, wenn die flightPATH-Regel nur einen bestimmten Datenverkehr betreffen soll.
- Fügen Sie eine neue Aktion hinzu und wählen Sie Redirect 302 aus der Dropdown-Box Aktion (Redirect 301 ist ebenfalls verfügbar). Edgenexus ALB-X erstellt automatisch Variablen für bestimmte Schlüsselparameter für den von ALB-X verarbeiteten Datenverkehr, darunter den Host, den Pfad und den Query-String. Geben Sie im Feld Ziel die Details ein, wohin die Anfrage umgeleitet werden soll. In diesem Fall stellen Sie den Eintrag https:// voran und verwenden die Variablen $host$$path$$querystring$, um die Daten aus der ursprünglichen http-Anfrage einzufügen. Wie Sie sehen können, sind Sie hier flexibel und können bei Bedarf ein völlig anderes Ziel definieren.
Kreditkartennummern maskieren
Hier ist ein Beispiel für die Komplexität von iRules und die Art und Weise, wie F5 die Manipulation des HTML-Bodys handhabt.
F5:
Name: | Maskierung der Kreditkartennummer |
Definition: | wenn HTTP_REQUEST { # Verhindern Sie, dass der Server eine komprimierte Antwort sendet. # Entfernen Sie die Komprimierungsangebote vom Client HTTP::header entfernen „Accept-Encoding“ # Antwortdaten dürfen nicht gechunked werden. if { [HTTP::version] eq „1.1“ } { # Erzwingen Sie ein Downgrade auf HTTP 1.0, aber lassen Sie weiterhin Keep-alive-Verbindungen zu. # Da HTTP 1.1 standardmäßig keep-alive ist, 1.0 aber nicht, # Wir müssen sicherstellen, dass die Kopfzeilen den keep-alive-Status widerspiegeln. # Prüfen Sie, ob dies eine Keep Alive-Verbindung ist. if { [HTTP::header is_keepalive] } { # Ersetzen Sie den Wert des Verbindungs-Headers durch „Keep-Alive“. HTTP::header replace „Verbindung“ „Keep-Alive“ } # Version der serverseitigen Anfrage auf 1.0 setzen # Dies zwingt den Server, ohne Chunking zu antworten. HTTP::Version „1.0“ } } wenn HTTP_RESPONSE { # Überprüfen Sie nur Antworten, die einen Textinhaltstyp haben (text/html, text/xml, text/plain usw.). if { [HTTP::header „Content-Type“] beginnt_mit „text/“ } { # Ermitteln Sie die Länge des Inhalts, damit wir die Daten sammeln können (zur Verarbeitung im Ereignis HTTP_RESPONSE_DATA). # Begrenzen Sie die Sammlung auf 1Mb (1048576 abzüglich einer kleinen Reserve) – Siehe SOL6578 für Details if { [HTTP::header exists „Content-Length“] } { if { [HTTP::header „Content-Length“] > 1048000 }{ # Content-Length über 1Mb also 1Mb sammeln Inhalt_Länge 1048000 einstellen } sonst { # Content-Length unter 1Mb, also tatsächliche Länge erfassen Inhalt_Länge einstellen [HTTP::header „Content-Length“] } } sonst { # Die Antwort hatte keinen Content-Length-Header, also verwenden Sie den Standardwert von 1Mb. Inhalt_Länge 1048000 einstellen } # Inhalt nicht sammeln, wenn der Wert des Content-Length-Headers 0 war if { $content_length > 0 } { HTTP::collect $Inhalt_Länge } } } wenn HTTP_RESPONSE_DATA { # Finden Sie ALLE möglichen Kreditkartennummern in einem Durchgang. set card_indices [regexp -all -inline -indices\ {(?:3[4|7]\d{2})(?:[ ,-]?(?:\d{5}(?:\d{1})?)){2}|(?:4\d{3})(?:[ ,-]?(?:\d{4})){3}|(?:5[1-5]\d{2})(?:[ ,-]?(?:\d{4})){3}|(?:6011)(?:[ ,-]?(?:\d{4})){3}}\ [HTTP::payload]] foreach card_idx $card_indices { Karte_Start setzen [lindex $card_idx 0] Karte_Ende setzen [lindex $card_idx 1] set card_len [expr {$card_end – $card_start + 1}] set card_number [string bereich [HTTP::payload] $card_start $card_end] # Entfernen Sie Bindestriche oder Leerzeichen, wenn sie vorhanden sind, und zählen Sie die Vorkommen in variablen Ausschnitten. Ausschnitte setzen [regsub -all {[-]} $card_number „“ card_number] # Passen Sie die Variable card_len an, aber behalten Sie sie für eine spätere Verwendung. set new_card_len [expr {$card_len – $cutouts}] set double [expr {$new_card_len & 1}] chksum 0 setzen isCard ungültig setzen # Berechnen Sie MOD10 for { set i 0 } { $i < $neue_karte_len } { incr i } { setzen c [string index $card_number $i] wenn {($i & 1) == $double} { wenn {[incr c $c] >= 10} {incr c -9} } incr chksum $c } # Kartentyp bestimmen switch [string index $card_number 0] { 3 { set type AmericanExpress } 4 { Typ Visa einstellen } 5 { set type MasterCard } 6 { set type Entdecken } default { set type Unknown } } # Wenn die Kartennummer gültig ist, dann maskieren Sie die Zahlen mit X’s. wenn { ($chksum % 10) == 0 } { isCard gültig setzen HTTP::payload ersetzen $card_start $card_len [string repeat „X“ $card_len] } # Ergebnisse protokollieren log local0. „Gefunden $istKarte $Typ CC# $Kartennummer“ } } |
Edgenexus:
Klicken Sie hier zum Vergrößern
- Erstellen Sie eine neue flightPATH-Regel und geben Sie eine aussagekräftige Beschreibung
- Dies ist ein weiteres Beispiel, bei dem ein Bedingungsabgleich nicht erforderlich ist, da Sie normalerweise alle Serverantworten schützen möchten. Die Option ist natürlich vorhanden, falls erforderlich.
- Fügen Sie eine neue ‚Aktion‘ hinzu und wählen Sie ‚Body Replace All‘ aus dem Dropdown-Menü. Es werden reguläre Ausdrücke verwendet, um den Zieltext zu finden, der durch diese Aktion ersetzt werden soll. Verwenden Sie \b(?:\d[ \t-]?){12}\b als Ziel für die Erkennung und Ersetzung der ersten 12 Ziffern von Kreditkartennummern. Geben Sie in das Feld Daten xxxx-xxxx-xxxx als Ersetzungstext ein. Dadurch bleiben die üblichen letzten 4 Ziffern als Erkennungszeichen intakt.
- Wiederholen Sie den obigen Vorgang für andere sensible Datentypen wie Sozialversicherungsnummern, indem Sie \b(?:\d[ \t-]?){7}\b durch xxx-xxxx und \b(?:\d[ \t-]?){6}\b durch xxx.xxx ersetzen.
- Durch den gezielten Einsatz von regulären Ausdrücken kann eine Vielzahl von Zeichensequenzen abgeglichen und maskiert werden, indem Sie einfach die Aktion Body Replace verwenden. Body Replace First und Body Replace Last sind weitere Aktionsoptionen, die verwendet werden können, wenn nur die erste oder letzte Instanz einer Zeichenfolge auf einer Seite ersetzt werden muss.
Potenziell sicherheitsgefährdende X-Header entfernen
Es wird oft als gute Praxis angeführt, die Bereitstellung unnötiger Informationen über die Serverinfrastruktur, die für die Bereitstellung einer Anwendung verwendet wird, zu vermeiden, indem bestimmte HTTP-Header, die standardmäßig von der Anwendung oder der Servertechnologie eingefügt werden, entfernt werden. Je mehr ein Hacker über das System weiß, das er ausnutzen will, desto einfacher ist es. Zwischen der Veröffentlichung von Systemschwachstellen und der Bereitstellung von Patches liegt oft eine gewisse Zeitspanne. In dieser Zeit sind die Systeme am stärksten bedroht und die Verschleierung der Details der Anwendungsplattform ist sehr nützlich.
Viele der unnötigen Informationen sind in X-Headern enthalten. Die folgende iRule entfernt pauschal X-Header, was möglicherweise nicht erwünscht ist.
F5:
Name: | HTTP X-Server Header Entfernung |
Definition: | wenn HTTP_RESPONSE { # Alle Instanzen der Kopfzeile Server entfernen HTTP::header entfernen Server # Alle Kopfzeilen entfernen, die mit x- beginnen. foreach header_name [HTTP::header names] { if {[string match -nocase x-* $header_name]}{ HTTP::header entfernen $header_name } } } |
Edgenexus:
Klicken Sie hier zum Vergrößern
- Erstellen Sie eine neue flightPATH-Regel mit einem aussagekräftigen Namen, z.B. Remove HTTP Headers
- Dies ist ein Beispiel für eine flightPATH-Regel, bei der wahrscheinlich keine Bedingungsanpassung erforderlich ist. Bei Bedarf steht Ihnen ein umfassender Satz von Auswahlkriterien zur Verfügung.
- Fügen Sie eine neue Aktion ‚Antwort-Kopfzeile entfernen‘ hinzu. Geben Sie im Feld Ziel den zu entfernenden Kopfzeilenwert ein. Fügen Sie für jedes der Header-Felder, die aus den Server-Antworten ausgeblendet werden sollen, einen Eintrag für die Aktion Antwort-Header entfernen hinzu. Eine pauschale Aktion zum Entfernen aller benutzerdefinierten Kopfzeilen mit X-Präfix könnte sich nachteilig auswirken. Deshalb müssen Sie in flightPATH die einzelnen Kopfzeilen definieren, die entfernt werden sollen.
- Wenden Sie den erstellten flightPATH auf jeden der Dienste an, bei denen die Aktion erforderlich ist.
Anwenden von flightPATH-Regeln auf virtuelle Dienste
flightPATH ist ein sehr leistungsfähiges, aber einfach zu bedienendes Tool zur HTTP-Manipulation. Sie können eine ‚Bibliothek‘ von flightPATH-Regeln erstellen, um verschiedene Aktionen für den HTTP-Verkehr durchzuführen, während er die ALB-X Load Balancer Appliance durchläuft. Mehrere flightPATH-Regeln können auf einen virtuellen Dienst angewendet werden. Die flightPATH-Regeln werden in der Reihenfolge verarbeitet, in der sie auf den Service angewendet werden. Einige flightPATH-Regeln brechen die Verarbeitung ab. Sie können die Reihenfolge durch Ziehen und Ablegen neu anordnen, um sicherzustellen, dass alle Aktionen wie gewünscht ausgeführt werden. Es steht eine umfassende flightPATH-Protokollierung und -Verfolgung zur Verfügung, die ein Debugging der flightPATH-Operation ermöglicht. edgeNEXUS bietet professionelle Dienste an, die Sie bei der Übersetzung und Erstellung komplexerer flightPATH-Regeln unterstützen.
Möchten Sie mehr erfahren?
Für weitere Informationen zur Edgenexus Verkehrsmanipulation klicken Sie hier.
Um eine kostenlose Testversion des ALB-X herunterzuladen , klicken Sie hier.
Wir würden uns über die Gelegenheit freuen, Ihnen die Funktionalität von Edgenexus ALB-X und flightPATH zu demonstrieren. Fordern Sie hier eine persönliche, schnelle technische Demo an.