ngx_lua_waf
ngx_lua_waf’est un pare-feu d’applications web basé sur ngx_lua, développé lorsque j’ai rejoint Fun Travel.
Le code est simple, et l’intention initiale du développement est d’utiliser la simplicité, les hautes performances et la légèreté.
Il est désormais open source et conforme à la licence MIT. Il contient nos règles de filtrage. Si vous avez des suggestions ou souhaitez faire de l’a, n’hésitez pas à l’améliorer avec moi.
Utilisations :
Prévenir les attaques web telles que l’injection SQL, l’inclusion locale, le dépassement partiel, les tests de fuzzing, xss, SSRF, etc Prévenir la fuite de fichiers comme SVN/sauvegarde Prévenir les attaques provenant d’outils de test de résistance comme ApacheBench Bloquez les outils de piratage de balayage courants, scanners Bloquer les requêtes réseau inhabituelles Bloquez l’autorisation d’exécution PHP du répertoire d’attache d’images Empêcher les téléchargements de webshell
Installation recommandée :
Il est recommandé d’utiliser lujit2.1 pour le support du lua
ngx_lua s’il s’agit d’une version 0.9.2 ou ultérieure, il est recommandé de changer la fonction de filtre classique vers ngx.re.find, et l’efficacité de correspondance sera multipliée par environ trois fois.
Instructions d’utilisation :
Le chemin d’installation nginx est supposé être : /usr/local/nginx/conf/
Téléchargez le ngx_lua_waf dans le répertoire de conf, dézippez-le et nomme-le waf
Ajoutez-le dans la section http de nginx.conf
Configurez le répertoire de règles WAF dans config.lua (généralement dans le répertoire waf/conf/)
RulePath = « /usr/local/nginx/conf/waf/wafconf/ »
Si le chemin absolu change, il doit être modifié en conséquence
Puis redémarrer nginx
Détails du profil :
RulePath = « /usr/local/nginx/conf/waf/wafconf/ » --répertoire de stockage de règles Journal d’attaque = « Off » --Pour activer la journalisation des informations d’attaque, vous devez configurer logdir logdir = « /usr/local/nginx/logs/hack/ » --répertoire de stockage de journaux, qui doit être créé par l’utilisateur lui-même, et nécessite l’autorisation d’écriture de l’utilisateur nginx UrlDeny="on » --s’il faut bloquer l’accès à l’URL Redirect="on » --devrait-il rediriger après interception CookieMatch = « on » --Bloquer les attaques de cookies postMatch = « on » --s’il faut bloquer une attaque post-attaque whiteModule = « on » --activer la liste blanche des URL black_fileExt={"php »,"jsp"} --Remplissez le type de suffixe de fichier qui n’est pas autorisé à être téléchargé ipWhitelist={"127.0.0.1"} --liste blanche IP, plusieurs IP sont séparées par virgules ipBlocklist={"1.0.0.1"} --liste noire d’IP, plusieurs IP sont séparées par des virgules CCDeny="on » --S’il faut activer l’interception des attaques CC (nécessite d’augmenter le segment HTTP de nginx.conf lua_shared_dict limite de 10 m ; ) CCrate = « 100/60 » --Réglez la fréquence d’attaque des CC en quelques secondes. --Par défaut, la même adresse IP ne peut demander la même adresse que 100 fois par minute html=[[S’il te plaît, pars~~]] --Contenu d’avertissement, personnalisable entre parenthèses Note : N’utilisez pas de guillemets doubles pour être sensible à la casse
Vérifiez si les règles sont en vigueur
Après le déploiement, vous pouvez essayer la commande suivante :
Note : Par défaut, la machine ne filtre pas dans la liste blanche, et vous pouvez ajuster la configuration config.lua vous-même
Les rendus sont les suivants:
Mises à jour des règles :
Compte tenu du problème de cache des réguliers, les règles dynamiques affectent la performance, donc je n’utilise pas des dictionnaires de mémoire partagée ou des redis pour la gestion dynamique.
Les mises à jour des règles peuvent être placées sur d’autres serveurs, et les règles peuvent être mises à jour en les téléchargeant régulièrement via la tâche crontab, et le rechargement nginx prendra effet. Garantir les hautes performances du NGX LUA WAF.
Enregistrez seulement le journal de filtrage, n’activez pas le filtrage, ajoutez juste un commentaire avant de vérifier dans le code, si vous devez filtrer, inversement
Quelques notes :
Les règles de filtrage peuvent être ajustées selon vos besoins sous wafconf, et chaque règle doit être encapsulée ou séparée avec |
Les règles ARG obtiennent le paramètre au filtre Les URL sont des règles qui ne demandent que les URL filtrées dans GET Post est une règle de filtrage uniquement dans les demandes de publication La liste blanche est une liste blanche, et les URL qui y sont correspondent donc elle n’est pas filtrée user-agent est une règle de filtrage pour user-agent
Le filtrage Get et le filtrage des publications sont activés par défaut, si vous devez activer le filtrage des cookies, modifiez la partie waf.lua annuler - commenter
Le format du nom du fichier journal est le suivant : Nom de l’hôte Web _sec.log
|