iputils: Fonctions utilitaires pour travailler avec des adresses IP dans nginx-module-lua
Installation
Si vous n'avez pas configuré l'abonnement au dépôt RPM, inscrivez-vous. Ensuite, vous pouvez procéder avec les étapes suivantes.
CentOS/RHEL 7 ou 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
Pour utiliser cette bibliothèque Lua avec NGINX, assurez-vous que nginx-module-lua est installé.
Ce document décrit lua-resty-iputils v0.3.0 publié le 28 mars 2017.
Collection de fonctions utilitaires pour travailler avec des adresses IP.
Vue d'ensemble
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",
}
-- AVERTISSEMENT : Variable globale, il est recommandé de la mettre en cache au niveau du module
-- 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
}
Méthodes
enable_lrucache
syntax: ok, err = iputils.enable_lrucache(size?)
Crée un objet lrucache global pour mettre en cache les recherches ip2bin.
La taille est optionnelle et par défaut à 4000 entrées (~1 Mo par worker).
Appeler cela plusieurs fois réinitialisera le cache.
ip2bin
syntax: bin_ip, bin_octets = iputils.ip2bin(ip)
Renvoie la représentation binaire d'une adresse IPv4 et une table contenant la représentation binaire de chaque octet.
Renvoie nil et un message d'erreur pour les mauvaises IP.
parse_cidr
syntax: lower, upper = iputils.parse_cidr(cidr)
Renvoie une représentation binaire des adresses les plus basses (réseau) et les plus élevées (diffusion) d'un réseau IPv4.
parse_cidrs
syntax: parsed = iputils.parse_cidrs(cidrs)
Prend une table de réseaux IPV4 au format CIDR et renvoie une table de tables contenant les adresses inférieures et supérieures.
Si un réseau invalide est dans la table, une erreur est enregistrée et les autres réseaux sont renvoyés.
ip_in_cidrs
syntax: bool, err = iputils.ip_in_cidrs(ip, cidrs)
Prend une adresse IPv4 sous forme de chaîne et une table de CIDRs analysés (par exemple, provenant de iputils.parse_cidrs).
Renvoie true ou false si l'IP existe dans n'importe lequel des réseaux spécifiés.
Renvoie nil et un message d'erreur avec une IP invalide.
binip_in_cidrs
syntax: bool, err = iputils.binip_in_cidrs(bin_ip, cidrs)
Prend une adresse IPv4 binaire nginx (par exemple, ngx.var.binary_remote_addr) et une table de CIDRs analysés (par exemple, provenant de iputils.parse_cidrs).
Cette méthode est beaucoup plus rapide que ip_in_cidrs() si l'IP vérifiée est déjà disponible sous forme binaire.
Renvoie true ou false si l'IP existe dans n'importe lequel des réseaux spécifiés.
Renvoie nil et un message d'erreur avec une IP invalide.
GitHub
Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub pour nginx-module-iputils.