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.