Comment mettre en place un WAF avec Vercel Firewall
Guide complet pour configurer le pare-feu applicatif web de Vercel : règles personnalisées, blocage d'IP, limitation de débit, rulesets managés OWASP et bots, Attack Mode et configuration en tant que code via vercel.json.
Vercel est une plateforme d'hébergement et de edge, pas un proxy sur lequel vous installez un logiciel. Son pare-feu est un palier produit natif qui s'exécute déjà devant chaque déploiement ; il n'y a donc rien à compiler, aucun agent à faire tourner et aucun sidecar à maintenir en vie. Le Vercel Firewall fonctionne par couches : un pare-feu gratuit et toujours actif, à l'échelle de la plateforme, assure une atténuation DDoS automatique pour chaque client, et par-dessus, le Vercel WAF configurable vous permet d'écrire votre propre logique.
Ce guide couvre la couche WAF que vous configurez réellement : le blocage d'IP, les règles personnalisées qui journalisent (log), refusent (deny), défient (challenge), contournent (bypass), redirigent ou limitent le débit du trafic, les rulesets managés soumis à votre offre (OWASP Core Ruleset, Bot Protection, AI Bots) et l'Attack Mode pour les épisodes DDoS actifs. Contrairement à un WAF fondé sur un langage de règles comme ModSecurity, Vercel n'exécute pas l'OWASP Core Rule Set en SecLang ; il expose un modèle de conditions et d'actions dans le tableau de bord, dans vercel.json et via l'API REST Firewall.
Une propriété rend Vercel agréable à exploiter : les modifications du pare-feu effectuées dans le tableau de bord prennent effet globalement en moins de 300 ms et ne nécessitent aucun redéploiement, et vous pouvez revenir instantanément à n'importe quelle configuration antérieure depuis le journal d'audit. Autrement dit, vous pouvez régler vos règles en mode log face au trafic réel, puis les faire passer en blocage avec un risque quasi nul.
Prérequis
- Un projet déjà déployé sur Vercel (offre Hobby, Pro ou Enterprise)
- Un rôle d'équipe habilité à appliquer des règles (administrateur de projet, membre d'équipe ou Security)
- L'offre Pro ou supérieure pour dépasser 3 règles personnalisées et une seule règle de limitation de débit
- L'offre Enterprise pour le ruleset managé OWASP Core Ruleset et le blocage d'IP au niveau du compte ; le ruleset managé Bot Protection est disponible sur toutes les offres sans coût supplémentaire, tandis que le palier requis pour le ruleset AI Bots est moins clairement documenté, donc vérifiez ce que votre offre inclut
- Une bonne connaissance des routes, des noms d'hôte et des schémas de trafic attendus de votre application
- Optionnel, la CLI Vercel si vous prévoyez de gérer vos règles en tant que code dans vercel.json
Guide étape par étape
Comprendre les deux couches du pare-feu
Il n'y a rien à installer. Le pare-feu de Vercel est déjà devant votre déploiement, et il fonctionne en deux couches qu'il faut comprendre avant de toucher au moindre réglage :
- Pare-feu à l'échelle de la plateforme (automatique, gratuit, toutes offres) : assure une atténuation DDoS aux couches 3, 4 et 7. Il bloque les volumes de requêtes anormaux ou suspects sans aucune configuration et ne peut pas être désactivé.
- Vercel WAF (configurable) : la couche qui vous appartient. Vous y définissez le blocage d'IP, les règles personnalisées et, selon votre offre, les rulesets managés.
Le pare-feu évalue les règles dans un ordre d'exécution fixe : d'abord l'atténuation DDoS, puis le blocage d'IP du WAF, puis les règles personnalisées du WAF, puis les rulesets managés du WAF. Les règles personnalisées s'exécutent dans l'ordre où vous les disposez ; leur priorité compte donc, et vous pouvez les réordonner.
Ouvrir le tableau de bord Firewall et observer d'abord le trafic
N'écrivez pas de règles de blocage à l'aveugle. Commencez par regarder le trafic réel afin que vos conditions correspondent à ce qui atteint réellement votre site.
- Depuis votre tableau de bord, sélectionnez le projet à protéger.
- Ouvrez Firewall dans la barre latérale du projet.
- Utilisez la vue de surveillance du trafic et sa fenêtre de trafic en direct pour regrouper les requêtes par paramètre, par exemple par chemin, adresse IP, user agent, JA4 Digest ou pays. C'est la même surface d'observabilité que vous utiliserez pour valider chaque règle que vous écrirez.
Repérez les schémas sur lesquels vous voulez agir : l'IP ou l'ASN d'un scraper, un flot de requêtes vers un chemin d'API, des requêtes vers des fichiers qui ne devraient jamais exister comme .env ou .git, ou du trafic provenant de régions que vous ne desservez pas.
Bloquer les adresses IP malveillantes connues
Le blocage d'IP est le contrôle WAF le plus simple et le plus prioritaire ; il s'exécute avant vos règles personnalisées. Utilisez-le pour les adresses malveillantes connues, les scrapers ou les concurrents, mais pas pour des restrictions géographiques (utilisez plutôt une règle personnalisée pour la géographie).
- Dans Firewall, sélectionnez Configure en haut à droite.
- Faites défiler jusqu'à la section IP Blocking et sélectionnez + Add IP.
- Renseignez le champ IP Address Or CIDR et le champ Host. L'hôte est le domaine exact auquel le blocage s'applique, saisi sans le préfixe
https, par exemplewww.my-site.com. Ajoutez une entrée distincte pour chaque sous-domaine à couvrir. - Sélectionnez Create IP Block Rule, puis Review Changes et Publish.
Le blocage d'IP au niveau du projet est plafonné selon l'offre : jusqu'à 3 sur Hobby, jusqu'à 100 sur Pro et jusqu'à 1000 sur Enterprise. Enterprise propose aussi le blocage d'IP au niveau du compte depuis les Team Settings, où les règles CIDR sont limitées à /16 pour IPv4 et /48 pour IPv6.
Créer votre première règle personnalisée en mode log
Les règles personnalisées sont le cœur du Vercel WAF. Chaque règle se compose d'une ou plusieurs conditions If combinées par AND ou OR, plus une action Then. Construisez toujours une nouvelle règle d'abord en mode log pour qu'elle enregistre sans bloquer.
- Dans Firewall, sélectionnez Configure, puis Add New... > Rule.
- Nommez la règle de manière à ce que son but reste clair par la suite.
- Ajoutez des conditions If. Les paramètres disponibles incluent Request Path et Target Path, Request Method, Hostname, IP Address, User Agent, Request Header, Cookie, Query, Geolocation (continent, pays, région, ville), AS Number et l'empreinte TLS JA4 Digest (JA3 est réservé à Enterprise). Les opérateurs incluent equals, not equals, contains, starts with, ends with, matches regex, exists et is in set, et tout opérateur peut être nié.
- Réglez l'action Then sur Log.
- Sélectionnez Save Rule, puis Review Changes et Publish.
Exemples d'objectifs que vous pouvez exprimer directement : refuser les requêtes dont le chemin se termine par .php, .env ou .git ; défier les requêtes dont le user agent contient curl ou wget ; ou refuser le trafic des pays que vous ne desservez pas.
Vérifier la règle, puis la faire passer en blocage
C'est l'étape que la plupart des gens sautent et regrettent. La règle étant active en mode log, observez son comportement face au trafic réel avant de la laisser bloquer quoi que ce soit.
- Sur la page de vue d'ensemble du pare-feu, sélectionnez votre règle dans la liste déroulante de regroupement du trafic et choisissez les paramètres liés à vos conditions.
- Observez environ 10 minutes de trafic en direct. Confirmez que la règle correspond bien aux requêtes abusives visées et n'attrape pas d'utilisateurs légitimes.
- Si l'ensemble des correspondances est incorrect, modifiez les conditions et observez de nouveau.
- Une fois satisfait, sélectionnez Configure, ouvrez la règle et changez l'action Then en Challenge, Deny ou Bypass selon le cas. Enregistrez, révisez et publiez.
Sachez ce que fait chaque action : Deny renvoie 403 Forbidden et la requête n'atteint jamais votre application (et n'est pas facturée comme Edge Request ni comme Fast Data Transfer). Challenge sert un Vercel Security Checkpoint que seul un vrai navigateur capable d'exécuter du JavaScript peut franchir, créant une session d'une heure. Bypass laisse le trafic de confiance sauter les règles restantes.
Ajouter une règle de limitation de débit contre l'abus d'API et de connexion
La limitation de débit est une règle personnalisée dont l'action est Rate Limit. Utilisez-la pour plafonner les requêtes d'une même source vers un endpoint, ce qui protège les API et les formulaires de connexion et aide à maîtriser les coûts d'usage.
- Créez une nouvelle règle et ajoutez des conditions If qui en délimitent la portée, par exemple Request Path commence par
/apiou est égal à/auth/login. - Réglez l'action Then sur Rate Limit.
- Choisissez la stratégie de limitation : Fixed Window (toutes offres) ou Token Bucket (Enterprise).
- Définissez la Time Window (60 s par défaut) et la Request Limit (100 requêtes par fenêtre par défaut).
- Choisissez la ou les clés de comptage : IP et JA4 Digest sont disponibles sur toutes les offres ; User Agent et les clés Header arbitraires sont réservés à Enterprise.
- Choisissez l'action lorsque la limite est dépassée : conservez la réponse Default (429), ou sélectionnez Log, Deny ou Challenge. Enregistrez, révisez et publiez.
Les fenêtres vont d'un minimum de 10 s à un maximum de 10 minutes sur Hobby et Pro, et jusqu'à 1 heure sur Enterprise. Le nombre de règles de limitation de débit est plafonné par offre : 1 règle sur Hobby, 40 sur Pro et 1000 sur Enterprise.
Bloquer automatiquement les récidivistes avec les actions persistantes
Une règle deny ou challenge classique n'agit que sur les requêtes qui satisfont sa condition. Un client qui déclenche la règle une fois peut toujours envoyer d'autres requêtes qui ne correspondent pas. Les actions persistantes comblent cette faille en ajoutant un blocage d'IP à durée déterminée.
- Modifiez (ou créez) une règle personnalisée dont l'action est Challenge, Deny ou Rate Limit.
- Dans la ligne d'action, utilisez la liste déroulante de durée for (qui vaut 1 minute par défaut) pour choisir la durée de blocage du client fautif.
- Enregistrez, révisez et publiez.
Lorsque la règle correspond, l'IP du client est stockée dans le pare-feu à l'échelle de la plateforme et bloquée pour la durée choisie. Comme ce blocage intervient avant que le pare-feu ne traite les requêtes suivantes, le trafic bloqué ne compte pas dans votre usage CDN et trafic. C'est idéal pour la protection contre le bruteforce, par exemple en limitant POST /auth/login à 10 requêtes par minute et par IP, puis en refusant pendant 15 minutes.
Activer les rulesets managés
Les rulesets managés sont des collections prédéfinies que vous activez au lieu de les rédiger, et ils s'exécutent après vos règles personnalisées dans l'ordre d'exécution. L'OWASP Core Ruleset requiert Enterprise, tandis que le ruleset managé Bot Protection est disponible sur toutes les offres sans coût supplémentaire. La documentation de Vercel n'est pas parfaitement cohérente sur ce point (le tableau des limites du WAF indique toujours que les rulesets managés sont indisponibles sur Hobby et Pro, alors que l'annonce de disponibilité générale de Bot Protection dit toutes les offres), et le palier du ruleset AI Bots est moins clairement documenté, donc vérifiez ce que votre offre inclut avant de vous y fier.
- OWASP Core Ruleset : des règles fondées sur l'OWASP Top Ten. Activez l'ensemble complet, ou ouvrez Configure pour basculer des règles individuelles et régler chacune sur Log ou Deny.
- Bot Protection Managed Ruleset : inactif par défaut (affiché comme Off). Réglez-le sur Log ou Challenge ; en mode challenge, le WAF sert un défi JavaScript au trafic peu susceptible d'être un navigateur.
- AI Bots Managed Ruleset : inactif par défaut (affiché comme Allow). Réglez-le sur Log ou Deny pour surveiller ou bloquer le trafic identifié comme crawlers d'IA.
Activez et configurez ces éléments depuis Firewall > Rules dans la barre latérale du projet, puis révisez et publiez. Comme pour les règles personnalisées, démarrez chacun en Log et observez le trafic en direct avant de passer en Challenge ou Deny.
Utiliser l'Attack Mode pendant un DDoS actif
L'Attack Mode est un interrupteur d'urgence pour les attaques très ciblées. Une fois activé, chaque visiteur avec navigateur doit franchir un défi de sécurité avant d'atteindre votre site, tandis que les bots légitimes connus (moteurs de recherche, fournisseurs de webhooks) et votre propre trafic interne Function et Cron sont autorisés automatiquement.
- Ouvrez Firewall dans la barre latérale du projet.
- Cliquez sur Bot Management.
- Sous Attack Mode, sélectionnez Enable.
- Quand l'attaque se calme, revenez ici et sélectionnez Disable.
L'Attack Mode est gratuit sur toutes les offres, et les requêtes qu'il bloque ne comptent pas dans votre usage. Il ne nuit pas au référencement, puisque les crawlers comme Googlebot sont autorisés. Comme la plateforme atténue déjà le DDoS automatiquement, réservez l'Attack Mode aux incidents actifs et ciblés plutôt que de le laisser activé en permanence.
Gérer les règles en tant que code et revenir en arrière sans risque
Les modifications dans le tableau de bord sont instantanées et ne requièrent aucun déploiement, mais vous pouvez aussi versionner les règles du pare-feu avec votre base de code. Dans vercel.json, utilisez la propriété routes avec des conditions has ou missing et une action mitigate :
{
"$schema": "https://openapi.vercel.sh/vercel.json",
"routes": [
{
"src": "/(.*)",
"has": [
{ "type": "header", "key": "x-react-router-prerender-data" }
],
"mitigate": { "action": "deny" }
}
]
}
Seules les actions challenge et deny sont prises en charge dans vercel.json ; les actions log, bypass et redirect ne sont disponibles que dans le tableau de bord. Notez le compromis : les règles vercel.json partent avec un déploiement, tandis que les règles du tableau de bord s'appliquent globalement en moins de 300 ms sans redéploiement. Pour une gestion scriptée ou pilotée par CI, l'API Firewall (via les exemples @vercel/sdk, avec la méthode vercel.security.updateFirewallConfig) permet de créer et de mettre à jour des règles par programmation.
Quelle que soit la voie choisie, vous pouvez récupérer vite : ouvrez le menu à points de suspension sur la vue d'ensemble du pare-feu, choisissez View Audit Log, sélectionnez une version antérieure par date et heure, et sélectionnez Restore pour revenir instantanément à cette configuration.
Conclusion et étapes suivantes
Votre projet Vercel dispose désormais d'une protection en couches que vous contrôlez : l'atténuation DDoS automatique de la plateforme en dessous, plus un WAF configuré avec des blocages d'IP, des règles personnalisées pour deny, challenge, bypass, redirect et la limitation de débit, des actions persistantes contre les récidivistes, et les rulesets managés (l'OWASP Core Ruleset réservé à Enterprise, plus les rulesets Bot Protection et AI Bots), avec l'Attack Mode prêt pour les incidents actifs.
Prochaines étapes :
- Gardez chaque nouvelle règle en mode Log et observez ~10 minutes de trafic en direct avant de la faire passer en Deny ou Challenge
- Branchez des Log Drains vers votre SIEM et activez les alertes du pare-feu
- Ajoutez des actions persistantes à vos règles anti-bruteforce et anti-abus afin que les récidivistes soient bloqués au edge de la plateforme
- Activez les rulesets managés inclus dans votre offre d'abord en Log, puis passez des règles individuelles en Deny ou Challenge à mesure que vous confirmez qu'elles sont propres
- Versionnez les règles stables dans vercel.json et appuyez-vous sur le journal d'audit pour un retour arrière instantané des modifications du tableau de bord
Dépannage
J'ai créé une règle mais rien n'est bloqué
Vérifiez l'action. Une règle réglée sur Log enregistre les correspondances sans bloquer ; c'est l'état initial prévu. Ouvrez Configure, modifiez la règle et basculez l'action Then sur Deny ou Challenge, puis Review Changes et Publish. Confirmez aussi que vous avez bien publié ; les modifications non enregistrées ou non publiées ne prennent pas effet.
Ma modification n'est pas encore active
Les modifications du pare-feu dans le tableau de bord s'appliquent globalement en moins de 300 ms sans redéploiement ; donc si une modification n'est pas visible, c'est presque certainement que vous ne l'avez pas Publish. Les règles définies dans vercel.json sont différentes : elles font partie du déploiement et ne prennent effet qu'une fois ce déploiement mis en ligne.
Mes appels d'API depuis cURL ou Postman se sont mis à être bloqués
Une règle challenge (ou l'Attack Mode) protège ce chemin. Les défis ne peuvent être résolus que par un vrai navigateur JavaScript détenant une session valide d'une heure ; les appels directs par script, cURL et serveur à serveur échouent donc. Ajoutez une règle bypass plus prioritaire visant votre automatisation de confiance, ou utilisez deny/rate-limit plutôt que challenge sur les endpoints destinés aux machines.
Un blocage d'IP ne fonctionne pas sur mon www ou mon sous-domaine
Les blocages d'IP sont rattachés à un Host. Un blocage sur my-site.com ne couvre pas www.my-site.com ni docs.my-site.com. Ajoutez une entrée de blocage d'IP distincte, avec la valeur d'hôte saisie sans le préfixe https, pour chaque domaine et sous-domaine que vous servez.
Ma limitation de débit laisse passer plus de trafic que ce que j'ai défini
Les compteurs de limitation de débit sont suivis par région. Un client qui frappe plusieurs régions Vercel peut dépasser votre limite par région au total. Abaissez le seuil, ou tenez compte du comptage régional lors de son dimensionnement. Vérifiez aussi que l'action de suivi est Deny ou le Default 429 plutôt que Log, car Log seul ne limite pas.
Un client légitime est bloqué par un ruleset managé
Ne désactivez pas tout le ruleset. Comme les règles personnalisées s'exécutent avant les rulesets managés, ajoutez une règle personnalisée avec l'action Bypass qui correspond à ce trafic de confiance précis (par exemple un User Agent connu) et placez-la au-dessus des règles de blocage.
J'ai atteint la limite de règles de mon offre
Les règles personnalisées sont plafonnées par offre : jusqu'à 3 sur Hobby, 40 sur Pro et 1000 sur Enterprise, et les blocages d'IP et les règles de limitation de débit ont leurs propres plafonds. Regroupez les conditions dans moins de règles à l'aide de AND/OR et de l'opérateur « is in set », ou passez à une offre supérieure. Le ruleset managé OWASP Core Ruleset et le blocage d'IP au niveau du compte requièrent Enterprise ; le ruleset managé Bot Protection est disponible sur toutes les offres, tandis que le palier du ruleset AI Bots est moins clairement documenté, donc vérifiez ce que votre offre inclut.
Un changement de règle a provoqué une panne ou une avalanche de faux positifs
Utilisez le retour arrière instantané. Ouvrez le menu à points de suspension sur la vue d'ensemble du pare-feu, choisissez View Audit Log, sélectionnez la dernière version connue comme saine par date et heure, et Restore. Réintroduisez ensuite la règle en mode Log et validez-la face au trafic en direct avant de la repasser en blocage.
Questions fréquentes
Dois-je installer quelque chose pour utiliser le Vercel WAF ?
Non. Vercel est une plateforme d'hébergement et de edge, et son pare-feu est un palier produit natif qui s'exécute déjà devant chaque déploiement. Il n'y a aucun agent, module ou proxy à installer. Vous configurez le WAF depuis le tableau de bord Firewall du projet, dans vercel.json ou via l'API REST Firewall, et les modifications du tableau de bord prennent effet globalement en moins de 300 ms sans redéploiement.
Vercel exécute-t-il l'OWASP Core Rule Set comme ModSecurity ?
Pas en tant que SecLang. Vercel expose un modèle de conditions et d'actions plutôt qu'un langage de règles. Sur Enterprise, il propose un ruleset managé OWASP Core Ruleset fondé sur l'OWASP Top Ten, que vous activez et réglez règle par règle sur Log ou Deny. Ce n'est pas équivalent à l'exécution du CRS OWASP complet dans un WAF autogéré, et ce ruleset est réservé à Enterprise.
Quelles actions une règle personnalisée du Vercel WAF peut-elle effectuer ?
Une règle personnalisée peut journaliser (log), refuser (deny, 403), défier (challenge, une vérification par navigateur JavaScript), contourner (bypass, sauter les règles restantes), rediriger ou limiter le débit du trafic correspondant. Dans vercel.json, seules challenge et deny sont prises en charge ; log, bypass et redirect ne sont disponibles que dans le tableau de bord. La bonne pratique est de construire chaque règle en mode log, d'observer environ 10 minutes de trafic en direct, puis de la faire passer en action de blocage.
Quelle est la différence entre l'Attack Mode et une règle challenge ?
L'Attack Mode est un interrupteur d'urgence à l'échelle du site : il défie chaque visiteur avec navigateur pendant un DDoS ciblé tout en autorisant automatiquement les bots connus et votre propre trafic interne Function et Cron. Une règle personnalisée challenge est délimitée : elle ne défie que le trafic qui satisfait vos conditions. Utilisez l'Attack Mode pour les incidents actifs et les règles personnalisées pour un contrôle ciblé et continu. Les deux reposent sur le même défi Vercel Security Checkpoint.
Les règles WAF ajoutent-elles de la latence ou un coût supplémentaire ?
L'évaluation du WAF se produit au edge de Vercel, devant votre déploiement ; il n'y a donc pas d'aller-retour vers un agent distinct comme avec un WAF auto-hébergé. Les requêtes refusées n'atteignent jamais votre application et ne sont pas facturées comme Edge Requests ni comme Fast Data Transfer, et le trafic bloqué par les actions persistantes ou l'Attack Mode ne compte pas dans l'usage. La limitation de débit et certains paramètres ont des limites selon l'offre ; consultez Usage and Pricing pour les détails.
Puis-je gérer les règles du pare-feu Vercel en tant que code ?
Oui. Vous pouvez définir des règles dans vercel.json avec la propriété routes, des conditions has ou missing et une action mitigate (challenge ou deny uniquement), ou gérer les règles par programmation avec l'API Firewall (via la méthode vercel.security.updateFirewallConfig du @vercel/sdk). Notez que les règles vercel.json partent avec un déploiement, tandis que les modifications du tableau de bord s'appliquent en 300 ms et peuvent être restaurées instantanément depuis le journal d'audit.
Qu'arrive-t-il à mes règles si je fais une erreur ?
Chaque modification de la configuration du pare-feu est versionnée. Depuis la vue d'ensemble du pare-feu, ouvrez le menu à points de suspension, choisissez View Audit Log, sélectionnez une version antérieure par date et heure, et sélectionnez Restore pour un retour arrière instantané. Combiné au mode log pour les tests, cela rend sûr le fait d'itérer sur les règles face au trafic de production.
Guides associés
Comment configurer AWS WAF avec Application Load Balancer
Apprenez à protéger vos applications AWS en attachant AWS WAF à un Application Load Balancer avec des groupes de règles gérées.
Guide des bonnes pratiques de sécurité WAF
Bonnes pratiques essentielles pour configurer et maintenir votre pare-feu applicatif web pour une sécurité optimale.