Pare-feu
Le pare-feu de chaque VPS : état, politiques par défaut et règles.
Lire le pare-feu
GET
/v1/compute/vps/{vps_id}/firewallPermission : vps:read
Paramètres de chemin
| Champ | Type | Description |
|---|---|---|
vps_idobligatoire | texte | Format : ^vps-[0-9a-f]{8}$. Exemple : "vps-7c2e4a91". |
Réponse 200
| Champ | Type | Description |
|---|---|---|
enabled | booléen | Pare-feu actif. |
inbound_policy | texte | Sort du trafic entrant qui ne correspond à aucune règle. Valeurs : accept, drop, reject. |
outbound_policy | texte | Sort du trafic sortant qui ne correspond à aucune règle. Valeurs : accept, drop, reject. |
rules_count | entier | Nombre de règles. |
Erreurs
not_foundRessource introuvableservice_unavailableService momentanément indisponible- Et les erreurs communes :
missing_api_key,invalid_api_key,missing_scope,ip_not_allowed,rate_limited.
curl "https://api.corcelink.fr/v1/compute/vps/vps-7c2e4a91/firewall" \
-H "Authorization: Bearer $CORCELINK_API_KEY"
import os, uuid, requests
r = requests.get(
"https://api.corcelink.fr/v1/compute/vps/vps-7c2e4a91/firewall",
headers={"Authorization": f"Bearer {os.environ['CORCELINK_API_KEY']}"},
timeout=30,
)
r.raise_for_status()
print(r.json())
const res = await fetch("https://api.corcelink.fr/v1/compute/vps/vps-7c2e4a91/firewall", {
method: "GET",
headers: { Authorization: `Bearer ${process.env.CORCELINK_API_KEY}` },
});
console.log(res.status, await res.json());
Réponse 200
{
"enabled": true,
"inbound_policy": "drop",
"outbound_policy": "accept",
"rules_count": 3
}
Essayer avec votre clé
Votre clé reste dans ce navigateur et n’est envoyée qu’à api.corcelink.fr.
Modifier le pare-feu
PATCH
/v1/compute/vps/{vps_id}/firewallPermission : vps:write
Active ou désactive le pare-feu et règle les politiques par défaut.
Paramètres de chemin
| Champ | Type | Description |
|---|---|---|
vps_idobligatoire | texte | Format : ^vps-[0-9a-f]{8}$. Exemple : "vps-7c2e4a91". |
En-têtes
| Champ | Type | Description |
|---|---|---|
Idempotency-Key | texte | Clé unique (UUID conseillé) : une requête répétée avec la même clé renvoie la même réponse, sans refaire l’opération. 255 caractères au plus. |
If-Match | texte | `ETag` reçu à la lecture : la modification est refusée (412) si la ressource a changé entre-temps. |
Corps de la requête
| Champ | Type | Description |
|---|---|---|
enabled | booléen | |
inbound_policy | texte | Valeurs : accept, drop, reject. |
outbound_policy | texte | Valeurs : accept, drop, reject. |
Réponse 200
| Champ | Type | Description |
|---|---|---|
enabled | booléen | Pare-feu actif. |
inbound_policy | texte | Sort du trafic entrant qui ne correspond à aucune règle. Valeurs : accept, drop, reject. |
outbound_policy | texte | Sort du trafic sortant qui ne correspond à aucune règle. Valeurs : accept, drop, reject. |
rules_count | entier | Nombre de règles. |
Erreurs
validation_failedDonnées invalidesfirewall_requiredPare-feu indispensableprecondition_failedLa ressource a changéservice_not_activeService inactifresource_busyModification en coursservice_unavailableService momentanément indisponible- Et les erreurs communes :
missing_api_key,invalid_api_key,missing_scope,ip_not_allowed,rate_limited.
curl -X PATCH "https://api.corcelink.fr/v1/compute/vps/vps-7c2e4a91/firewall" \
-H "Authorization: Bearer $CORCELINK_API_KEY" \
-H "Idempotency-Key: $(uuidgen)"
import os, uuid, requests
r = requests.patch(
"https://api.corcelink.fr/v1/compute/vps/vps-7c2e4a91/firewall",
headers={"Authorization": f"Bearer {os.environ['CORCELINK_API_KEY']}", "Idempotency-Key": str(uuid.uuid4())},
timeout=30,
)
r.raise_for_status()
print(r.json())
const res = await fetch("https://api.corcelink.fr/v1/compute/vps/vps-7c2e4a91/firewall", {
method: "PATCH",
headers: { Authorization: `Bearer ${process.env.CORCELINK_API_KEY}`, "Idempotency-Key": crypto.randomUUID() },
});
console.log(res.status, await res.json());
Réponse 200
{
"enabled": true,
"inbound_policy": "reject",
"outbound_policy": "accept",
"rules_count": 3
}
Lister les règles
GET
/v1/compute/vps/{vps_id}/firewall/rulesPermission : vps:read
Paramètres de chemin
| Champ | Type | Description |
|---|---|---|
vps_idobligatoire | texte | Format : ^vps-[0-9a-f]{8}$. Exemple : "vps-7c2e4a91". |
Réponse 200
| Champ | Type | Description |
|---|---|---|
data | liste de objet | |
data[].id | texte | Identifiant stable de la règle. Exemple : "fwr-3a91c2". |
data[].position | entier | Ordre d’évaluation, à partir de 0. Exemple : 1. |
data[].direction | texte | Sens du trafic : entrant ou sortant. Valeurs : in, out. |
data[].action | texte | Autoriser, bloquer sans réponse ou rejeter. Valeurs : accept, drop, reject. |
data[].protocol | texte | Protocole ; any pour tous. Valeurs : tcp, udp, icmp, icmpv6, any. |
data[].ports | texte ou null | Port, liste ou plage, pour TCP et UDP. Exemple : "22". |
data[].remote | texte ou null | Exemple : "203.0.113.10/32". |
data[].comment | texte ou null | Exemple : "SSH bureau". |
data[].enabled | booléen | Règle active. |
data[].managed | booléen | Règle gérée par CorceLink (réseaux privés) : ni modifiable, ni supprimable. |
Erreurs
not_foundRessource introuvableservice_unavailableService momentanément indisponible- Et les erreurs communes :
missing_api_key,invalid_api_key,missing_scope,ip_not_allowed,rate_limited.
curl "https://api.corcelink.fr/v1/compute/vps/vps-7c2e4a91/firewall/rules" \
-H "Authorization: Bearer $CORCELINK_API_KEY"
import os, uuid, requests
r = requests.get(
"https://api.corcelink.fr/v1/compute/vps/vps-7c2e4a91/firewall/rules",
headers={"Authorization": f"Bearer {os.environ['CORCELINK_API_KEY']}"},
timeout=30,
)
r.raise_for_status()
print(r.json())
const res = await fetch("https://api.corcelink.fr/v1/compute/vps/vps-7c2e4a91/firewall/rules", {
method: "GET",
headers: { Authorization: `Bearer ${process.env.CORCELINK_API_KEY}` },
});
console.log(res.status, await res.json());
Réponse 200
{
"data": [
{
"id": "fwr-5a3924",
"position": 0,
"direction": "in",
"action": "accept",
"protocol": "any",
"ports": null,
"remote": "10.20.1.0/24",
"comment": "[CorceLink] Réseau privé vpc00001",
"enabled": true,
"managed": true
},
{
"id": "fwr-9e160c",
"position": 1,
"direction": "in",
"action": "accept",
"protocol": "tcp",
"ports": "22",
"remote": "203.0.113.10",
"comment": "SSH bureau",
"enabled": true,
"managed": false
},
{
"id": "fwr-591772",
"position": 2,
"direction": "in",
"action": "accept",
"protocol": "tcp",
"ports": "80,443",
"remote": null,
"comment": "Web",
"enabled": true,
"managed": false
}
]
}
Essayer avec votre clé
Votre clé reste dans ce navigateur et n’est envoyée qu’à api.corcelink.fr.
Ajouter une règle
POST
/v1/compute/vps/{vps_id}/firewall/rulesPermission : vps:write
Paramètres de chemin
| Champ | Type | Description |
|---|---|---|
vps_idobligatoire | texte | Format : ^vps-[0-9a-f]{8}$. Exemple : "vps-7c2e4a91". |
En-têtes
| Champ | Type | Description |
|---|---|---|
Idempotency-Key | texte | Clé unique (UUID conseillé) : une requête répétée avec la même clé renvoie la même réponse, sans refaire l’opération. 255 caractères au plus. |
If-Match | texte | `ETag` reçu à la lecture : la modification est refusée (412) si la ressource a changé entre-temps. |
Corps de la requête
| Champ | Type | Description |
|---|---|---|
directionobligatoire | texte | Sens du trafic : entrant ou sortant. Valeurs : in, out. |
actionobligatoire | texte | Autoriser, bloquer sans réponse ou rejeter. Valeurs : accept, drop, reject. |
protocolobligatoire | texte | Protocole ; any pour tous. Valeurs : tcp, udp, icmp, icmpv6, any. |
ports | texte ou null | Exemple : "22". |
remote | texte ou null | Adresse ou réseau distant ; vide pour toutes. Exemple : "203.0.113.10/32". |
comment | texte ou null | 60 caractères au plus. Exemple : "SSH bureau". |
enabled | booléen | Par défaut : true. |
position | entier | Position voulue ; à défaut, la règle est ajoutée à la fin. |
Réponse 201
| Champ | Type | Description |
|---|---|---|
id | texte | Identifiant stable de la règle. Exemple : "fwr-3a91c2". |
position | entier | Ordre d’évaluation, à partir de 0. Exemple : 1. |
direction | texte | Sens du trafic : entrant ou sortant. Valeurs : in, out. |
action | texte | Autoriser, bloquer sans réponse ou rejeter. Valeurs : accept, drop, reject. |
protocol | texte | Protocole ; any pour tous. Valeurs : tcp, udp, icmp, icmpv6, any. |
ports | texte ou null | Port, liste ou plage, pour TCP et UDP. Exemple : "22". |
remote | texte ou null | Exemple : "203.0.113.10/32". |
comment | texte ou null | Exemple : "SSH bureau". |
enabled | booléen | Règle active. |
managed | booléen | Règle gérée par CorceLink (réseaux privés) : ni modifiable, ni supprimable. |
Erreurs
validation_failedDonnées invalidesposition_not_allowedPosition impossiblefirewall_fullNombre maximal de règles atteintprecondition_failedLa ressource a changéservice_not_activeService inactifresource_busyModification en cours- Et les erreurs communes :
missing_api_key,invalid_api_key,missing_scope,ip_not_allowed,rate_limited.
curl -X POST "https://api.corcelink.fr/v1/compute/vps/vps-7c2e4a91/firewall/rules" \
-H "Authorization: Bearer $CORCELINK_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"direction": "in", "action": "accept", "protocol": "tcp", "ports": "22", "remote": "203.0.113.10/32", "comment": "SSH bureau"}'
import os, uuid, requests
r = requests.post(
"https://api.corcelink.fr/v1/compute/vps/vps-7c2e4a91/firewall/rules",
headers={"Authorization": f"Bearer {os.environ['CORCELINK_API_KEY']}", "Idempotency-Key": str(uuid.uuid4())},
json={"direction": "in", "action": "accept", "protocol": "tcp", "ports": "22", "remote": "203.0.113.10/32", "comment": "SSH bureau"},
timeout=30,
)
r.raise_for_status()
print(r.json())
const res = await fetch("https://api.corcelink.fr/v1/compute/vps/vps-7c2e4a91/firewall/rules", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.CORCELINK_API_KEY}`, "Idempotency-Key": crypto.randomUUID(), "Content-Type": "application/json" },
body: JSON.stringify({"direction": "in", "action": "accept", "protocol": "tcp", "ports": "22", "remote": "203.0.113.10/32", "comment": "SSH bureau"}),
});
console.log(res.status, await res.json());
Réponse 201
{
"id": "fwr-6128cd",
"position": 3,
"direction": "in",
"action": "accept",
"protocol": "tcp",
"ports": "8443",
"remote": null,
"comment": "Admin",
"enabled": true,
"managed": false
}
Modifier une règle
PATCH
/v1/compute/vps/{vps_id}/firewall/rules/{rule_id}Permission : vps:write
Modifie les champs envoyés, y compris position pour déplacer la règle.
Paramètres de chemin
| Champ | Type | Description |
|---|---|---|
vps_idobligatoire | texte | Format : ^vps-[0-9a-f]{8}$. Exemple : "vps-7c2e4a91". |
rule_idobligatoire | texte | Exemple : "fwr-3a91c2". |
En-têtes
| Champ | Type | Description |
|---|---|---|
Idempotency-Key | texte | Clé unique (UUID conseillé) : une requête répétée avec la même clé renvoie la même réponse, sans refaire l’opération. 255 caractères au plus. |
If-Match | texte | `ETag` reçu à la lecture : la modification est refusée (412) si la ressource a changé entre-temps. |
Corps de la requête
| Champ | Type | Description |
|---|---|---|
direction | texte | Valeurs : in, out. |
action | texte | Valeurs : accept, drop, reject. |
protocol | texte | Valeurs : tcp, udp, icmp, icmpv6, any. |
ports | texte ou null | Exemple : "443". |
remote | texte ou null | Exemple : "203.0.113.10/32". |
comment | texte ou null | 60 caractères au plus. |
enabled | booléen | |
position | entier | Nouvelle position ; jamais au-dessus des règles gérées par CorceLink. |
Réponse 200
| Champ | Type | Description |
|---|---|---|
id | texte | Identifiant stable de la règle. Exemple : "fwr-3a91c2". |
position | entier | Ordre d’évaluation, à partir de 0. Exemple : 1. |
direction | texte | Sens du trafic : entrant ou sortant. Valeurs : in, out. |
action | texte | Autoriser, bloquer sans réponse ou rejeter. Valeurs : accept, drop, reject. |
protocol | texte | Protocole ; any pour tous. Valeurs : tcp, udp, icmp, icmpv6, any. |
ports | texte ou null | Port, liste ou plage, pour TCP et UDP. Exemple : "22". |
remote | texte ou null | Exemple : "203.0.113.10/32". |
comment | texte ou null | Exemple : "SSH bureau". |
enabled | booléen | Règle active. |
managed | booléen | Règle gérée par CorceLink (réseaux privés) : ni modifiable, ni supprimable. |
Erreurs
not_foundRessource introuvablerule_managedRègle gérée par CorceLinkvalidation_failedDonnées invalidesposition_not_allowedPosition impossibleprecondition_failedLa ressource a changéresource_busyModification en cours- Et les erreurs communes :
missing_api_key,invalid_api_key,missing_scope,ip_not_allowed,rate_limited.
curl -X PATCH "https://api.corcelink.fr/v1/compute/vps/vps-7c2e4a91/firewall/rules/fwr-3a91c2" \
-H "Authorization: Bearer $CORCELINK_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"ports": "443", "remote": "203.0.113.10/32", "comment": "texte"}'
import os, uuid, requests
r = requests.patch(
"https://api.corcelink.fr/v1/compute/vps/vps-7c2e4a91/firewall/rules/fwr-3a91c2",
headers={"Authorization": f"Bearer {os.environ['CORCELINK_API_KEY']}", "Idempotency-Key": str(uuid.uuid4())},
json={"ports": "443", "remote": "203.0.113.10/32", "comment": "texte"},
timeout=30,
)
r.raise_for_status()
print(r.json())
const res = await fetch("https://api.corcelink.fr/v1/compute/vps/vps-7c2e4a91/firewall/rules/fwr-3a91c2", {
method: "PATCH",
headers: { Authorization: `Bearer ${process.env.CORCELINK_API_KEY}`, "Idempotency-Key": crypto.randomUUID(), "Content-Type": "application/json" },
body: JSON.stringify({"ports": "443", "remote": "203.0.113.10/32", "comment": "texte"}),
});
console.log(res.status, await res.json());
Réponse 200
{
"id": "fwr-9e160c",
"position": 2,
"direction": "in",
"action": "accept",
"protocol": "tcp",
"ports": "2222",
"remote": null,
"comment": "SSH bureau",
"enabled": true,
"managed": false
}
Supprimer une règle
DELETE
/v1/compute/vps/{vps_id}/firewall/rules/{rule_id}Permission : vps:write
Paramètres de chemin
| Champ | Type | Description |
|---|---|---|
vps_idobligatoire | texte | Format : ^vps-[0-9a-f]{8}$. Exemple : "vps-7c2e4a91". |
rule_idobligatoire | texte | Exemple : "fwr-3a91c2". |
En-têtes
| Champ | Type | Description |
|---|---|---|
Idempotency-Key | texte | Clé unique (UUID conseillé) : une requête répétée avec la même clé renvoie la même réponse, sans refaire l’opération. 255 caractères au plus. |
If-Match | texte | `ETag` reçu à la lecture : la modification est refusée (412) si la ressource a changé entre-temps. |
Réponse 204
Aucun contenu : l’opération est faite.
Erreurs
not_foundRessource introuvablerule_managedRègle gérée par CorceLinkprecondition_failedLa ressource a changéresource_busyModification en cours- Et les erreurs communes :
missing_api_key,invalid_api_key,missing_scope,ip_not_allowed,rate_limited.
curl -X DELETE "https://api.corcelink.fr/v1/compute/vps/vps-7c2e4a91/firewall/rules/fwr-3a91c2" \
-H "Authorization: Bearer $CORCELINK_API_KEY" \
-H "Idempotency-Key: $(uuidgen)"
import os, uuid, requests
r = requests.delete(
"https://api.corcelink.fr/v1/compute/vps/vps-7c2e4a91/firewall/rules/fwr-3a91c2",
headers={"Authorization": f"Bearer {os.environ['CORCELINK_API_KEY']}", "Idempotency-Key": str(uuid.uuid4())},
timeout=30,
)
r.raise_for_status()
print(r.status_code)
const res = await fetch("https://api.corcelink.fr/v1/compute/vps/vps-7c2e4a91/firewall/rules/fwr-3a91c2", {
method: "DELETE",
headers: { Authorization: `Bearer ${process.env.CORCELINK_API_KEY}`, "Idempotency-Key": crypto.randomUUID() },
});
console.log(res.status, "");