VPS KVM canadien à Montréal dès 8,50 CAD/mois

API

Pare-feux

Filtrer ce qui entre et sort de vos machines : règles réutilisables, appliquées par l'hyperviseur, rattachées en un appel.

Un pare-feu est un jeu de règles réutilisable, en entrée comme en sortie, que vous rattachez à vos machines. Il est appliqué par l'hyperviseur, avant que le trafic n'atteigne le système : rien à installer, il marche pareil sous Linux, Windows et BSD, et une erreur dans la machine ne peut pas le désactiver.

Ce qu'il filtre

  • Une machine sans pare-feu accepte tout le trafic entrant, comme avant.
  • Dès qu'une machine a au moins un pare-feu, le trafic entrant qu'aucune règle n'ouvre est jeté. Avec plusieurs pare-feux, leurs règles s'additionnent.
  • Les réponses aux connexions de la machine passent toujours : mises à jour, téléchargements et appels d'API sortants ne demandent aucune règle.
  • Ses réseaux privés ne sont jamais filtrés, pas plus que la console web du panneau, qui atteint la machine même si toutes les règles sont fermées.
  • Le trafic sortant est libre tant qu'aucun pare-feu de la machine n'a de règle de sortie.

Créer un pare-feu

Une règle laisse entrer un protocole (tcp, udp, icmp pour le ping en IPv4 et IPv6, ou any), sur des ports ("22", "80,443", une plage "8000-8100" ; absent : tous les ports), depuis des sources (adresses ou plages IPv4 et IPv6 ; absent : partout).

bash
curl -s -X POST https://api.ffxf.net/v1/firewalls \
     -H "Authorization: Bearer $FFXF_TOKEN" \
     -H "Content-Type: application/json" \
     -d '{
           "name": "web",
           "rules": [
             {"protocol": "tcp", "ports": "22", "sources": ["203.0.113.0/24", "2001:db8::/32"], "description": "SSH depuis le bureau"},
             {"protocol": "tcp", "ports": "80,443", "description": "Web"},
             {"protocol": "icmp", "description": "Ping"}
           ]
         }'
bash
{
  "data": {
    "id": 7,
    "name": "web",
    "rules": [
      { "protocol": "tcp", "ports": "22", "sources": ["203.0.113.0/24", "2001:db8::/32"], "description": "SSH depuis le bureau" },
      { "protocol": "tcp", "ports": "80,443", "sources": ["0.0.0.0/0", "::/0"], "description": "Web" },
      { "protocol": "icmp", "ports": null, "sources": ["0.0.0.0/0", "::/0"], "description": "Ping" }
    ],
    "members": []
  }
}

Sans rules, le pare-feu démarre avec SSH (TCP 22) et le ping ouverts depuis partout ; envoyez "rules": [] pour n'en avoir aucune. Les adresses sont ramenées à leur adresse de réseau (203.0.113.7/24 devient 203.0.113.0/24). Dix pare-feux par compte, cinquante règles par pare-feu, vingt sources par règle.

Gardez une porte d'entrée. Un pare-feu qui n'ouvre pas TCP 22 (ou 3389 sous Windows) coupe SSH (ou le bureau à distance) sur toutes les machines qu'il protège. La console web marche toujours, mais un script ou un agent qui travaille en SSH perd sa machine.

Protéger une machine

bash
curl -s -X POST https://api.ffxf.net/v1/firewalls/7/members \
     -H "Authorization: Bearer $FFXF_TOKEN" \
     -H "Content-Type: application/json" \
     -d '{"vm": 4821}'
bash
{ "data": { "vm": 4821, "hostname": "web-1", "status": "applied" } }

Les règles sont en place quand l'appel répond. Rattacher un pare-feu déjà rattaché répond 200 : un script peut rejouer sa configuration sans risque. Jusqu'à cinq pare-feux par machine. Une machine sans adresse publique n'en reçoit pas : elle n'a rien à filtrer (409).

Changer les règles

PUT /firewalls/{id} avec rules remplace toute la liste : décrivez l'état voulu, l'API l'applique à chaque machine rattachée avant de répondre. Envoyez toutes les règles que vous gardez, pas seulement la nouvelle.

bash
curl -s -X PUT https://api.ffxf.net/v1/firewalls/7 \
     -H "Authorization: Bearer $FFXF_TOKEN" \
     -H "Content-Type: application/json" \
     -d '{"rules": [{"protocol": "tcp", "ports": "22"}, {"protocol": "tcp", "ports": "443"}]}'

pending_machines compte les machines que les nouvelles règles n'ont pas encore atteintes (hyperviseur injoignable) ; elles portent "status": "error" dans members et sont reprises automatiquement en quelques minutes.

Détacher, supprimer

ActionAppelÀ savoir
DétacherDELETE /firewalls/{id}/members/{vm}Les règles du pare-feu quittent la machine. Sans autre pare-feu, elle accepte de nouveau tout le trafic entrant.
RenommerPUT /firewalls/{id} avec nameRègles inchangées si rules est absent.
SupprimerDELETE /firewalls/{id}Refusé (409) tant qu'il protège une machine : le supprimer les ouvrirait toutes d'un coup.

Règles de sortie

Une règle avec "direction": "out" laisse sortir du trafic, vers des destinations au lieu de venir de sources. Tant qu'aucun pare-feu d'une machine n'a de règle de sortie, tout peut sortir. Dès que l'un en a une, seul sort ce que les règles de sortie ouvrent, plus ce qui reste toujours permis :

  • le DNS (port 53) vers les résolveurs que FFxF configure sur la machine ;
  • les réponses aux connexions entrantes que le pare-feu a laissées passer ;
  • le réseau privé.
bash
{
  "rules": [
    {"protocol": "tcp", "ports": "22"},
    {"direction": "out", "protocol": "tcp", "ports": "80,443", "description": "Mises à jour et HTTPS"},
    {"direction": "out", "protocol": "tcp", "ports": "5432", "destinations": ["198.51.100.20"], "description": "Base externe"}
  ]
}

La première règle de sortie ferme tout le reste : sans la règle 80,443 ci-dessus, les mises à jour de paquets et les téléchargements s'arrêtent. Des sources sur une règle de sortie, ou des destinations sur une règle d'entrée, sont refusées (validation_failed) plutôt qu'ignorées. Sur une machine sans IPv4, une destination IPv4 autorise aussi son adresse NAT64 (64:ff9b::/96), par laquelle cette machine joint l'IPv4. Le port 25 reste fermé, quoi que disent les règles.

Détails utiles

Les lectures demandent la portée vms.read ; créer, modifier, rattacher et supprimer demandent network.write. Le serveur MCP expose les mêmes actions : voir Outils MCP.

Support & discussions

Questions techniques, retours d'incidents ou discussions d'infrastructure, l'équipe est présente sur Discord, Telegram, X, Instagram, Reddit et IRC.