Protéger directus avec nginx

Hello,

Je fais appel a ceux qui maîtrisent nginx.

J’ai une instance Directus qui tourne sur un VPS avec une instance Nginx en reverse proxy.

J’ai remarqué dans les log que j’avais beaucoup de requêtes de spam comme le montre cette capture :

En terme de sécurité mon serveur n’est ouvert sur le port SSH que sur certaines IP. J’ai ajouté également une petite config à ngnix pour verrouiller l’accès au panel d’admin directus a certaines IP.

Tout cela fonctionne parfaitement, ma question est la suivante : est il possible de filtrer les accès avec nginx que pour certaines URL de directus ?

J’ai tenté de remplacer le location / par location /(server|auth|graphql|access|activity|assets|collections|contents|dashboards|extensions|fields|files|flows|folders|items|notifications|operations|panels|permissions|policies|presets|translations|relations|roles|shema|settings|shares|users|utils|versions|webhooks) {
Mais malheureusement sans succès, je pense que le point d’entrée nodeJS directus n’est pas autorisé.

Auriez vous une solution ?
L’idée est d’utiliser Nginx pour protéger directus des requêtes indésirables.

J’ai finalement peut être une piste : Utiliser un header custom.

Donc dans mes applications j’aurai juste à rajouter mon header lors des requêtes à Directus.

Quand la requête arrive au serveur, Nginx check si le header existe avec une certaine valeur, dans ce cas il renvoi la requête à Directus sinon il renvoie une erreur 404.

Je suis en train de tester l’idée, a priori ça fonctionne.

Reste la partie admin de directus je ne sais pas comment ajouter le custom header donc je joue sur le referer.

Ce qui me donne dans mon fichier de config Nginx

set $ab 0;
if ($http_x_appname = "monApplicationDeOuf") {
  set $ab 1;
 }

if ($http_referer ~ '^https://(url.de.mon.serveur.directus/admin)') {
  set $ab 1;
}

if ($ab = 0) {
  return 404;
}

proxy_pass http://directus:8055;

Ne pas oublier de rajouter le X-Appname dans le add_header 'Access-Control-Allow-Headers' '...,x-appname' sinon le CORS n’aime pas.

Maintenant est-ce la meilleure manière de faire ? Et quid de la version Web de l’application ?
Je vais laisser ça en test pour le moment.

Si vous avez d’autres idées, je suis tout ouie.