Seit Jahren erwartet, ist endlich Version 4 des Samba-Servers erschienen, der nun als vollwertige Alternative zu Microsofts Active Directory dienen kann. In der ... (mehr)

Enttarnung

Tengine ermittelt den Namen des anfragenden Browsers und speichert ihn in einer Variablen, die man dann in der Konfigurationsdatei nutzen kann. Welcher Begriff wann in der Variablen landen soll, muss man Tengine allerdings selbst mitteilen. Listing 6 zeigt dafür ein Beispiel: Standardmäßig erhält dort die Variable »$browser« den Wert »unknown« . Erkennt Tengine Firefox ab Version 16.0, lautet der Inhalt »firefoxab16« . Sollte im User-Agent-String der Begriff »Chrome« auftauchen, enthält die Variable den Begriff »Chrome« – es sei denn, auf den String trifft noch die danach folgende Firefox-Regel zu.

Listing 6

User Agents abfragen

 

Einlieferungsstopp

Wie Nginx kann Tengine die in einem bestimmten Zeitraum eingehenden Requests begrenzen. Dazu definiert man zunächst innerhalb des »http« -Blocks eine Zone, die den Zustand der Sessions speichert (eine Session ist in der Regel identisch mit einem Benutzer):

limit_req_zone  $binary_remote_addr  $uri zone=eins:5m rate=1r/s;

In diesem Beispiel erhält die Zone den Namen »eins« , wobei für die Session-Daten 5 MByte bereitstehen. Erlaubt ist dabei maximal ein Request ( »1r« ) pro Sekunde ( »/s« ). Im Gegensatz zu Nginx darf man dabei den Gültigkeitsbereich durch gleich mehrere Variablen einschränken beziehungsweise genauer festlegen (im Beispiel »$binary_remote_addr« und »$uri« ).

Dieser so definierten Zone kann man jetzt eine »location« zuweisen:

location / {
        limit_req zone=eins;
        limit_req zone=zwei;
        ...
}

Anders als Nginx erlaubt Tengine mehrere »limit_req« -Angaben. Es gelten dann die Restriktionen aus allen Zonen, wobei sie Tengine von oben nach unten prüft. Darüber hinaus kann man auch noch den Benutzer bei zu vielen Requests auf eine andere Seite umleiten:

location / {
        limit_req zone=eins forbid_action=@fehlerseite;
        ...
}
location @fehlerseite {
    rewrite ^ /fehlerseite.html;
}

Ausnahmen definiert man in einer Whitelist, wozu man allerdings die Hilfe des auch in Nginx enthaltenen Geo-Moduls benötigt [8] . Im Beispiel aus Listing 7 dürfen die Rechner aus dem Netz 192.168.2.x beliebig viele Anfragen stellen.

Listing 7

Whitelisting

 

Neben den hier vorgestellten Neuerungen bietet Tengine noch viele weitere. So unterstützt das SSL-Modul jetzt auch Passphrasen, mit dem Footer-Modul kann man beliebige Zeichenketten an den Body der Antwort hängen, und das Header-Modul setzt auf Wunsch ein Expire nach MIME-Typen in den Header. Mit Letztgenanntem kann man den Browser beispielsweise darauf hinweisen, dass alle HTML-Dateien nach 12 Stunden veralten.

Wer die Programmiersprache C beherrscht, kann mit Tengine auch den Body einer Anfrage inspizieren und so eine kleine Web-Application-Firewall auf die Beine stellen. Wie man ein entsprechendes Filter-Modul schreibt, zeigt einer der Tengine-Entwickler in einem Blog-Eintrag [9] . Sämtliche Änderungen gegenüber Nginx fasst die offizielle Dokumentation von Tengine zusammen [4] . Für ihre Lektüre sollte man allerdings schon Kenntnisse über Nginx mitbringen [2] .

comments powered by Disqus
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023