Aller au contenu principal

Node Plugins β

Les plugins sont des modules supplémentaires qui peuvent être activés sur Remnawave Node pour des fonctionnalités additionnelles : Torrent Blocker, Ingress Filter, Egress Filter et la configuration de Connection Drop.

astuce

Les plugins pour nœuds sont disponibles à partir de la version Remnawave Panel & Remnawave Node v2.7.0.

Node Plugins

Prérequis

Pour le bon fonctionnement des plugins, il est obligatoire d'ajouter la directive cap_add: NET_ADMIN à la configuration de Remnawave Node.

docker-compose.yml
services:
remnanode:
container_name: remnanode
hostname: remnanode
image: remnawave/node:latest
network_mode: host
restart: always
cap_add:
- NET_ADMIN
ulimits:
nofile:
soft: 1048576
hard: 1048576
environment:
- NODE_PORT=<NODE_PORT>
- SECRET_KEY=<SECRET_KEY>

nftables

Assurez-vous que nftables est disponible sur la machine hôte. Sur la plupart des distributions modernes, il est déjà installé par défaut.

Vérification de la version de nftables
nft --version

Version du noyau Linux

La version du noyau 5.7 ou supérieure est requise.

Vérification de la version du noyau
uname -r

Remarque : Si la version du noyau est inférieure à 5.7, le plugin ne fonctionnera pas. Mettez à jour le noyau ou consultez la documentation de votre distribution.

danger

Soyez prudent lors de la configuration des plugins — les plugins Torrent Blocker, Ingress Filter et Egress Filter fonctionneront directement avec le pare-feu de votre serveur.

Quelle table exactement Remnawave Node créera-t-il pour le fonctionnement des plugins ?
nftables
table ip remnanode {
counter processed {
packets 32 bytes 2060
}

counter ingress-filter-ip {
packets 0 bytes 0
}

counter torrent-blocker {
packets 0 bytes 0
}

counter egress-filter-ip {
packets 0 bytes 0
}

counter egress-filter-port {
packets 0 bytes 0
}

set ingress-filter-ip {
type ipv4_addr
flags timeout
counter
}

set torrent-blocker {
type ipv4_addr
flags timeout
counter
}

set egress-filter-ip {
type ipv4_addr
flags timeout
counter
}

set egress-filter-port {
type inet_proto . inet_service
flags timeout
counter
}

chain input {
type filter hook input priority filter - 10; policy accept;
counter name "processed"
ip saddr @ingress-filter-ip log prefix "ingress-filter-ip: " counter name "ingress-filter-ip" drop
ip saddr @torrent-blocker log prefix "torrent-blocker: " counter name "torrent-blocker" drop
}

chain forward {
type filter hook forward priority filter - 10; policy accept;
counter name "processed"
ip saddr @ingress-filter-ip log prefix "ingress-filter-ip: " counter name "ingress-filter-ip" drop
ip saddr @torrent-blocker log prefix "torrent-blocker: " counter name "torrent-blocker" drop
}

chain output {
type filter hook output priority filter - 10; policy accept;
ip daddr @egress-filter-ip counter name "egress-filter-ip" drop
meta l4proto . th dport @egress-filter-port counter name "egress-filter-port" drop
}
}
table ip6 remnanode6 {
counter processed {
packets 0 bytes 0
}

counter ingress-filter-ip6 {
packets 0 bytes 0
}

counter torrent-blocker6 {
packets 0 bytes 0
}

counter egress-filter-ip6 {
packets 0 bytes 0
}

counter egress-filter-port6 {
packets 0 bytes 0
}

set ingress-filter-ip6 {
type ipv6_addr
flags timeout
counter
}

set torrent-blocker6 {
type ipv6_addr
flags timeout
counter
}

set egress-filter-ip6 {
type ipv6_addr
flags timeout
counter
}

set egress-filter-port6 {
type inet_proto . inet_service
flags timeout
counter
}

chain input {
type filter hook input priority filter - 10; policy accept;
counter name "processed"
ip6 saddr @ingress-filter-ip6 log prefix "ingress-filter-ip: " counter name "ingress-filter-ip6" drop
ip6 saddr @torrent-blocker6 log prefix "torrent-blocker: " counter name "torrent-blocker6" drop
}

chain forward {
type filter hook forward priority filter - 10; policy accept;
counter name "processed"
ip6 saddr @ingress-filter-ip6 log prefix "ingress-filter-ip: " counter name "ingress-filter-ip6" drop
ip6 saddr @torrent-blocker6 log prefix "torrent-blocker: " counter name "torrent-blocker6" drop
}

chain output {
type filter hook output priority filter - 10; policy accept;
ip6 daddr @egress-filter-ip6 counter name "egress-filter-ip6" drop
meta l4proto . th dport @egress-filter-port6 counter name "egress-filter-port6" drop
}
}

Support CIDR

info

La notation CIDR (IPv4 et IPv6) est prise en charge dans les plugins suivants : Ingress Filter, Egress Filter et Shared Lists.

Dans les plugins Torrent Blocker (ignoreLists.ip) et Connection Drop (whitelistIps), la notation CIDR n'est pas prise en charge — spécifiez uniquement des adresses IP concrètes.

Exemples de valeurs CIDR valides : 192.168.1.1, 10.0.0.0/8, 172.16.0.0/12, 2001:db8::1, 2001:db8::/32.

Structure de configuration

Node Plugins
Plugin configuration
{
"ingressFilter": {
"enabled": false,
"blockedIps": []
},
"egressFilter": {
"enabled": false,
"blockedIps": [],
"blockedPorts": []
},
"torrentBlocker": {
"enabled": false,
"ignoreLists": {
"ip": [],
"userId": []
},
"blockDuration": 3600
},
"connectionDrop": {
"enabled": false,
"whitelistIps": []
},
"sharedLists": []
}
astuce

L'éditeur de configuration des plugins prend en charge les infobulles (survolez un objet pour lire sa description) ainsi que l'autocomplétion.

Torrent Blocker

danger

Pour le fonctionnement de ce plugin, la version minimale de Xray-Core – 26.3.27 – est requise. Cette version du noyau est fournie par défaut avec Remnawave Node v2.7.0.

attention

Pour que Torrent Blocker fonctionne correctement, le sniffing avec destOverride incluant les protocoles nécessaires doit obligatoirement être activé dans votre inbound. Sans sniffing activé, Xray-Core ne pourra pas déterminer le protocole du trafic (y compris bittorrent), et la règle de routage de Torrent Blocker ne se déclenchera pas.

"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls",
"quic"
]
}

Torrent Blocker est un plugin qui bloque l'adresse IP depuis laquelle du trafic Torrent a été détecté.

Configuration

"torrentBlocker": {
"enabled": false,
"ignoreLists": {
"ip": [],
"userId": []
},
"blockDuration": 3600
},
FieldTypeDescription
enabledbooleanActive ou désactive le plugin, désactivé par défaut
ignoreListsobjectListe des adresses IP et des IDs d'utilisateurs qui seront ignorés par le plugin
blockDurationnumberDurée du blocage en secondes
includeRuleTagsarrayChamp optionnel. Tableau de valeurs ruleTag de vos règles de routage, selon lesquelles les IPs seront également bloquées.
ignoreLists
{
"ip": [],
"userId": []
}
FieldTypeDescription
iparrayListe des adresses IP qui seront ignorées par le plugin (CIDR non pris en charge). Les listes de la configuration Shared Lists peuvent être utilisées.
userIdarrayListe des IDs d'utilisateurs qui seront ignorés par le plugin
includeRuleTags — blocage selon des règles de routage supplémentaires

Par défaut, Torrent Blocker crée sa propre règle de routage et l'ajoute comme premier élément du tableau routing.rules. Cette règle ne surveille que le protocole bittorrent.

Cependant, si votre configuration Xray-Core contient déjà des règles de routage personnalisées avec des tags (ruleTag) également liés au trafic torrent, vous pouvez les spécifier dans includeRuleTags. Dans ce cas, Torrent Blocker bloquera les adresses IP détectées non seulement par sa propre règle, mais aussi par toutes les règles spécifiées.

Exemple

Supposons que votre configuration Xray-Core contienne les règles de routage suivantes :

Règles de routage personnalisées dans Xray-Core
{
"domain": [
"geosite:category-public-tracker"
],
"ruleTag": "TORRENT_BY_DOMAIN",
"outboundTag": "TORRENT"
},
{
"port": "6881-6889,51413,21413,17417,37305",
"ruleTag": "TORRENT_BY_PORT",
"outboundTag": "TORRENT"
}

La première règle bloque le trafic par les domaines des trackers torrents publics, la seconde par les ports généralement utilisés par les clients torrents.

Pour que Torrent Blocker traite le déclenchement de ces règles et bloque les IPs selon elles, spécifiez leur ruleTag dans includeRuleTags :

Configuration Torrent Blocker avec includeRuleTags
"torrentBlocker": {
"enabled": true,
"ignoreLists": {
"ip": [],
"userId": []
},
"blockDuration": 3600,
"includeRuleTags": ["TORRENT_BY_DOMAIN", "TORRENT_BY_PORT"]
}

En conséquence, si Xray-Core détecte du trafic relevant des règles TORRENT_BY_DOMAIN ou TORRENT_BY_PORT, Torrent Blocker bloquera l'adresse IP source exactement comme si sa propre règle pour le protocole bittorrent s'était déclenchée.

Informations techniques

Le plugin utilise l'une des nouveautés de Xray-Core – webhook (PR : #5722). C'est pourquoi la version de Xray-Core 26.3.27 ou supérieure est requise pour le fonctionnement du plugin.

Comment l'activation du plugin affecte la configuration Xray-Core

Si ce plugin est activé, Remnawave Node appliquera automatiquement les modifications nécessaires à la configuration Xray-Core. Vous n'avez rien d'autre à faire qu'activer le plugin.

attention

Comme écrit ci-dessus – cela décrit uniquement ce qui sera modifié dans la configuration Xray-Core. N'ajoutez pas ces modifications manuellement, elles seront appliquées automatiquement.

{
"inbounds": [],
"outbounds": [
{
"tag": "DIRECT",
"protocol": "freedom"
},
{
"tag": "BLOCK",
"protocol": "blackhole"
},
{
"tag": "RW_TB_OUTBOUND_BLOCK",
"protocol": "blackhole"
}
],
"routing": {
"rules": [
{
"protocol": [
"bittorrent"
],
"outboundTag": "RW_TB_OUTBOUND_BLOCK",
"webhook": {
"url": "<REPLACED IN RUNTIME BY REMNAWAVE NODE>",
"deduplication": 5
}
}
]
}
}

La règle sera toujours placée au début du tableau rules, avant les autres règles. Et outbound sera toujours ajouté à la fin du tableau outbounds.

Principe de fonctionnement

Dans le cadre de Xray-Core, il est impossible de bloquer complètement le trafic Torrent. Xray-Core ne peut surveiller que ~10-30% du trafic torrent, donc par « blocage », on entend qu'après la détection initiale d'au moins un paquet – l'adresse IP d'où ce paquet provient sera bloquée pendant la durée spécifiée dans la configuration.

Après réception du paquet, Xray-Core enverra des informations le concernant au webhook, qui sera traité par Remnawave Node. Après réception, Remnawave Node bloque instantanément l'adresse IP (dans nftables) et interrompt également la connexion (analogue à la commande ss -k, conntrack -D).

Le principe de fonctionnement peut être décrit point par point ainsi :

  1. Remnawave Node ajoute les modifications nécessaires à la configuration Xray-Core.
  2. L'utilisateur utilise des torrents.
  3. Son trafic tombe sous la règle ajoutée par Remnawave Node à la configuration Xray-Core.
  4. Xray-Core envoie les informations du paquet au webhook.
  5. Remnawave Node bloque l'adresse IP et interrompt la connexion.
  6. Dans ~15-30 secondes, ces informations seront transmises à Remnawave Panel.
  7. Remnawave Panel enverra une notification à l'administrateur sur Telegram et enverra également un webhook (torrent_blocker.report, scope : torrent_blocker).
info

Il est important de noter que les actions ultérieures concernant le contrevenant doivent être mises en œuvre par vous-même. Remnawave Panel offre toutes les possibilités pour cela. Après réception du webhook du panel, vous pouvez changer le statut de l'utilisateur en DISABLED si vous souhaitez qu'il ne puisse pas se connecter à tous les serveurs.

Ce qui arrivera dans le webhook (torrent_blocker.report)

Le webhook contiendra l'objet complet des objets déjà connus node et user, ainsi qu'un objet report contenant toutes les informations disponibles.

{
"scope": "torrent_blocker",
"event": "torrent_blocker.report",
"timestamp": "2026-03-07T16:02:50.564Z",
"data": {
"node": {},
"user": {},
"report": {
"actionReport": {
"blocked": true,
"ip": "<omitted>",
"blockDuration": 60,
"willUnblockAt": "2026-03-07T16:03:48.986Z",
"userId": "2",
"processedAt": "2026-03-07T16:02:48.986Z"
},
"xrayReport": {
"email": "2",
"level": 0,
"protocol": "bittorrent",
"network": "tcp",
"source": "<omitted>:51431",
"destination": "<omitted>:59755",
"routeTarget": null,
"originalTarget": "tcp:<omitted>:59755",
"inboundTag": "VLESS_TCP_REALITY",
"inboundName": "vless",
"inboundLocal": "<omitted>:443",
"outboundTag": "RW_TB_OUTBOUND_BLOCK",
"ts": 1772899368
}
}
}
}

Ingress Filter

Ingress Filter est un plugin qui bloque de façon permanente l'adresse IP figurant dans la liste. Ingress Filter filtre le trafic entrant (ingress).

Configuration

"ingressFilter": {
"blockedIps": [],
"enabled": false
}
FieldTypeDescription
enabledbooleanActive ou désactive le plugin, désactivé par défaut
blockedIpsarrayListe des adresses IP ou sous-réseaux CIDR (IPv4/IPv6) qui seront bloqués par le plugin. Les listes de la configuration Shared Lists peuvent être utilisées. Exemples : 192.168.1.1, 10.0.0.0/8, 2001:db8::/32.

Principe de fonctionnement

Les adresses IP spécifiées dans la liste seront bloquées dans nftables.

danger

Ingress Filter est un outil très dangereux. Soyez attentif et prudent lors de la compilation des listes.

Egress Filter

Egress Filter est un plugin pour bloquer le trafic sortant. Il permet d'interdire les connexions à certaines adresses IP ou ports côté destination. Par exemple, il est possible de bloquer l'accès à des adresses IP spécifiques de services internes (par exemple, 10.0.0.1, 10.0.0.2) ou externes (par exemple, 8.8.8.8, 8.8.4.4) ou de fermer des ports indésirables (par exemple, 25, 465, 587).

Configuration

"egressFilter": {
"blockedIps": [],
"blockedPorts": [],
"enabled": false
}
FieldTypeDescription
blockedIpsarrayListe des adresses IP ou sous-réseaux CIDR (IPv4/IPv6) qui seront bloqués par le plugin. Les listes de la configuration Shared Lists peuvent être utilisées. Exemples : 192.168.1.1, 10.0.0.0/8, 2001:db8::/32.
blockedPortsarrayListe des ports qui seront bloqués par le plugin.
enabledbooleanActive ou désactive le plugin, désactivé par défaut

Connection Drop

Connection Drop n'est pas un plugin complet, mais un petit complément permettant d'ajouter des adresses IP à la liste blanche pour la fonctionnalité Connection Drop.

À partir de la version Remnawave Node v2.6.0 – et lors de l'activation de la directive cap_add: NET_ADMIN – Remnawave Node interrompt automatiquement les connexions lors de la suppression d'un utilisateur de Xray-Core. En cas d'utilisation de ponts, cela pouvait entraîner l'interruption de la connexion de pont par cette fonction.

À partir de la version Remnawave Node v2.7.0 – vous pouvez activer la liste blanche pour la fonctionnalité Connection Drop.

remarque

Les fonctions Connection Drop fonctionneront toujours. Ici, seule l'activation ou la désactivation de la liste blanche pour cette fonctionnalité est configurée.

Configuration

"connectionDrop": {
"enabled": false,
"whitelistIps": []
}
FieldTypeDescription
enabledbooleanActive ou désactive le plugin, désactivé par défaut
whitelistIpsarrayListe des adresses IP qui seront ajoutées à la liste blanche pour la fonctionnalité Connection Drop.

Shared Lists

Shared Lists est une liste d'adresses IP pouvant être utilisée dans d'autres plugins.

Configuration

"sharedLists": [
{
"name": "ext:my-list",
"type": "ipList",
"items": ["127.0.0.1", "127.0.0.2", "10.0.0.0/8", "2001:db8::/32"]
}
]
FieldTypeDescription
namestringNom de la liste, doit commencer par ext:
typestringType de liste, doit être ipList
itemsarrayListe des adresses IP ou sous-réseaux CIDR (IPv4/IPv6). Exemples : 127.0.0.1, 10.0.0.0/8, 2001:db8::/32.

Exemple d'utilisation dans la configuration de Torrent Blocker :

"torrentBlocker": {
"enabled": false,
"ignoreLists": {
"ip": ["ext:my-list"]
},
"blockDuration": 3600
}

Executor

Executor

Executor vous permet d'envoyer des commandes à exécuter : blocage temporaire d'adresses IP, déblocage d'adresses IP, réinitialisation de la table nftables.

attention

Pour son fonctionnement, il n'est pas obligatoire d'avoir des plugins activés, cependant la directive cap_add: NET_ADMIN doit être obligatoirement activée.

Block IPs

Node Plugins

La commande est destinée au blocage temporaire d'adresses IP. Vous pouvez spécifier plusieurs adresses et la durée du blocage en secondes. 0 – signifie jusqu'au redémarrage de Remnawave Node ou à la modification de la configuration du plugin lié à ce nœud.

astuce

Veuillez ne pas utiliser cette commande pour le blocage permanent d'adresses IP. Utilisez le plugin Ingress Filter pour cela.

Unblock IPs

Node Plugins

La commande est destinée au déblocage d'adresses IP. Lors de son exécution, une demande sera envoyée pour supprimer l'adresse IP de la table nftables.

Reset nftables

La commande est destinée à la réinitialisation de la table nftables. Lors de son exécution, une demande sera envoyée pour recréer la table nftables.