Zum Inhalt

iputils: Dienstprogramme zum Arbeiten mit IP-Adressen im nginx-module-lua

Installation

Wenn Sie das RPM-Repository-Abonnement noch nicht eingerichtet haben, melden Sie sich an. Dann können Sie mit den folgenden Schritten fortfahren.

CentOS/RHEL 7 oder Amazon Linux 2

yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install lua-resty-iputils

CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023

dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-iputils

Um diese Lua-Bibliothek mit NGINX zu verwenden, stellen Sie sicher, dass nginx-module-lua installiert ist.

Dieses Dokument beschreibt lua-resty-iputils v0.3.0, veröffentlicht am 28. März 2017.


Sammlung von Dienstprogrammen zum Arbeiten mit IP-Adressen.

Übersicht

init_by_lua_block {
  local iputils = require("resty.iputils")
  iputils.enable_lrucache()
  local whitelist_ips = {
      "127.0.0.1",
      "10.10.10.0/24",
      "192.168.0.0/16",
  }

  -- WARNUNG: Globale Variable, wird empfohlen, auf Modulebene zwischengespeichert zu werden
  -- https://github.com/openresty/lua-nginx-module#data-sharing-within-an-nginx-worker
  whitelist = iputils.parse_cidrs(whitelist_ips)
}

access_by_lua_block {
    local iputils = require("resty.iputils")
    if not iputils.ip_in_cidrs(ngx.var.remote_addr, whitelist) then
      return ngx.exit(ngx.HTTP_FORBIDDEN)
    end
}

Methoden

enable_lrucache

syntax: ok, err = iputils.enable_lrucache(size?)

Erstellt ein globales lrucache-Objekt zum Cachen von ip2bin-Abfragen.

Die Größe ist optional und hat standardmäßig 4000 Einträge (~1MB pro Worker).

Ein wiederholter Aufruf setzt den Cache zurück.

ip2bin

syntax: bin_ip, bin_octets = iputils.ip2bin(ip)

Gibt die binäre Darstellung einer IPv4-Adresse und eine Tabelle mit der binären Darstellung jedes Oktetts zurück.

Gibt nil und eine Fehlermeldung für ungültige IPs zurück.

parse_cidr

syntax: lower, upper = iputils.parse_cidr(cidr)

Gibt eine binäre Darstellung der niedrigsten (Netzwerk-) und höchsten (Broadcast-) Adressen eines IPv4-Netzwerks zurück.

parse_cidrs

syntax: parsed = iputils.parse_cidrs(cidrs)

Nimmt eine Tabelle von CIDR-Format IPV4-Netzwerken und gibt eine Tabelle von Tabellen zurück, die die unteren und oberen Adressen enthalten.

Wenn ein ungültiges Netzwerk in der Tabelle ist, wird ein Fehler protokolliert und die anderen Netzwerke werden zurückgegeben.

ip_in_cidrs

syntax: bool, err = iputils.ip_in_cidrs(ip, cidrs)

Nimmt eine String-IPv4-Adresse und eine Tabelle von geparsten CIDRs (z. B. von iputils.parse_cidrs).

Gibt true oder false zurück, wenn die IP innerhalb eines der angegebenen Netzwerke existiert.

Gibt nil und eine Fehlermeldung bei einer ungültigen IP zurück.

binip_in_cidrs

syntax: bool, err = iputils.binip_in_cidrs(bin_ip, cidrs)

Nimmt eine nginx-binäre IPv4-Adresse (z. B. ngx.var.binary_remote_addr) und eine Tabelle von geparsten CIDRs (z. B. von iputils.parse_cidrs).

Diese Methode ist viel schneller als ip_in_cidrs(), wenn die zu überprüfende IP bereits als binäre Darstellung vorliegt.

Gibt true oder false zurück, wenn die IP innerhalb eines der angegebenen Netzwerke existiert.

Gibt nil und eine Fehlermeldung bei einer ungültigen IP zurück.

GitHub

Sie finden möglicherweise zusätzliche Konfigurationstipps und Dokumentationen für dieses Modul im GitHub-Repository für nginx-module-iputils.