Node Plugins β
Plugins são módulos adicionais que podem ser ativados no Remnawave Node para funcionalidades extras: Torrent Blocker, Ingress Filter, Egress Filter e configuração de Connection Drop.
Os plugins para nós estão disponíveis a partir da versão Remnawave Panel & Remnawave Node v2.7.0.
Requisitos
Para o correto funcionamento dos plugins, é obrigatório adicionar a diretiva cap_add: NET_ADMIN à configuração do Remnawave Node.
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
Certifique-se de que nftables está disponível na máquina host. Na maioria das distribuições modernas já está instalado por padrão.
nft --version
Versão do kernel Linux
É necessária a versão do kernel 5.7 ou superior.
uname -r
Nota: Se a versão do kernel for inferior a 5.7, o plugin não funcionará. Atualize o kernel ou consulte a documentação da sua distribuição.
Tenha cuidado ao configurar os plugins — os plugins Torrent Blocker, Ingress Filter e Egress Filter trabalharão diretamente com o firewall no seu servidor.
Qual tabela exatamente o Remnawave Node criará para o funcionamento dos plugins?
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
}
}
Suporte CIDR
A notação CIDR (IPv4 e IPv6) é suportada nos seguintes plugins: Ingress Filter, Egress Filter e Shared Lists.
Nos plugins Torrent Blocker (ignoreLists.ip) e Connection Drop (whitelistIps) a notação CIDR não é suportada — especifique apenas endereços IP concretos.
Exemplos de valores CIDR válidos: 192.168.1.1, 10.0.0.0/8, 172.16.0.0/12, 2001:db8::1, 2001:db8::/32.
Estrutura de configuração
{
"ingressFilter": {
"enabled": false,
"blockedIps": []
},
"egressFilter": {
"enabled": false,
"blockedIps": [],
"blockedPorts": []
},
"torrentBlocker": {
"enabled": false,
"ignoreLists": {
"ip": [],
"userId": []
},
"blockDuration": 3600
},
"connectionDrop": {
"enabled": false,
"whitelistIps": []
},
"sharedLists": []
}
O editor de configuração de plugins suporta dicas (passe o cursor sobre um objeto para ler a descrição) e autocompletar.
Torrent Blocker
Para o funcionamento deste plugin é necessária a versão mínima do Xray-Core – 26.3.27. Esta versão do núcleo vem por padrão com o Remnawave Node v2.7.0.
Para que o Torrent Blocker funcione corretamente, o sniffing com destOverride incluindo os protocolos necessários deve estar obrigatoriamente habilitado no seu inbound. Sem sniffing habilitado, o Xray-Core não conseguirá determinar o protocolo do tráfego (incluindo bittorrent), e a regra de roteamento do Torrent Blocker não será acionada.
"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls",
"quic"
]
}
Torrent Blocker é um plugin que bloqueia o endereço IP do qual foi detectado tráfego de Torrent.
Configuração
"torrentBlocker": {
"enabled": false,
"ignoreLists": {
"ip": [],
"userId": []
},
"blockDuration": 3600
},
| Field | Type | Description |
|---|---|---|
enabled | boolean | Ativa ou desativa o plugin, desativado por padrão |
ignoreLists | object | Lista de endereços IP e IDs de usuários que serão ignorados pelo plugin |
blockDuration | number | Duração do bloqueio em segundos |
includeRuleTags | array | Campo opcional. Array de valores ruleTag das suas regras de roteamento, pelos quais o bloqueio de IPs também será executado. |
{
"ip": [],
"userId": []
}
| Field | Type | Description |
|---|---|---|
ip | array | Lista de endereços IP que serão ignorados pelo plugin (CIDR não suportado). Listas da configuração Shared Lists podem ser usadas. |
userId | array | Lista de IDs de usuários que serão ignorados pelo plugin |
includeRuleTags — bloqueio por regras de roteamento adicionais
Por padrão, o Torrent Blocker cria sua própria regra de roteamento e a adiciona como primeiro elemento do array routing.rules. Esta regra rastreia apenas o protocolo bittorrent.
No entanto, se na sua configuração do Xray-Core já existem regras de roteamento personalizadas com tags (ruleTag) também relacionadas ao tráfego de torrents, você pode especificá-las em includeRuleTags. Neste caso, o Torrent Blocker bloqueará endereços IP detectados não apenas pela sua própria regra, mas também por todas as regras especificadas.
Exemplo
Suponha que sua configuração do Xray-Core contenha as seguintes regras de roteamento:
{
"domain": [
"geosite:category-public-tracker"
],
"ruleTag": "TORRENT_BY_DOMAIN",
"outboundTag": "TORRENT"
},
{
"port": "6881-6889,51413,21413,17417,37305",
"ruleTag": "TORRENT_BY_PORT",
"outboundTag": "TORRENT"
}
A primeira regra bloqueia o tráfego por domínios de rastreadores de torrents públicos, a segunda por portas geralmente usadas por clientes de torrents.
Para que o Torrent Blocker processe o acionamento dessas regras e bloqueie IPs de acordo com elas, especifique seus ruleTag em includeRuleTags:
"torrentBlocker": {
"enabled": true,
"ignoreLists": {
"ip": [],
"userId": []
},
"blockDuration": 3600,
"includeRuleTags": ["TORRENT_BY_DOMAIN", "TORRENT_BY_PORT"]
}
Como resultado, se o Xray-Core detectar tráfego que se enquadre nas regras TORRENT_BY_DOMAIN ou TORRENT_BY_PORT, o Torrent Blocker bloqueará o endereço IP de origem exatamente como se sua própria regra para o protocolo bittorrent tivesse sido acionada.
Informações técnicas
O plugin usa uma das novidades no Xray-Core – webhook (PR: #5722). Por isso, para o funcionamento do plugin é necessária a versão do Xray-Core 26.3.27 ou superior.
Como a ativação do plugin afeta a configuração do Xray-Core
Se este plugin estiver habilitado, o Remnawave Node aplicará automaticamente as mudanças necessárias na configuração do Xray-Core. Você não precisa fazer nada além de habilitar o plugin.
Como escrito acima – aqui é descrito apenas o que será alterado na configuração do Xray-Core. Não adicione essas mudanças manualmente, elas serão aplicadas automaticamente.
{
"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
}
}
]
}
}
A regra sempre será colocada no início do array rules, antes das outras regras. E outbound sempre será adicionado ao final do array outbounds.
Princípio de funcionamento
No âmbito do Xray-Core é impossível bloquear completamente o tráfego de Torrent. O Xray-Core consegue rastrear apenas ~10-30% do tráfego de torrents, portanto "bloqueio" significa que após a detecção inicial de pelo menos um pacote – o endereço IP de onde veio esse pacote será bloqueado pelo tempo especificado na configuração.
Após receber o pacote, o Xray-Core enviará informações sobre ele ao webhook, que será processado pelo Remnawave Node. Após recebê-lo, o Remnawave Node bloqueia instantaneamente o endereço IP (no nftables) e também interrompe a conexão (análogo ao comando ss -k, conntrack -D).
O princípio de funcionamento pode ser descrito ponto a ponto assim:
- O Remnawave Node adiciona as mudanças necessárias à configuração do Xray-Core.
- O usuário usa torrents.
- Seu tráfego se enquadra na regra adicionada pelo Remnawave Node à configuração do Xray-Core.
- O Xray-Core envia informações do pacote ao
webhook. - O Remnawave Node bloqueia o endereço IP e interrompe a conexão.
- Em ~15-30 segundos esta informação será transmitida ao Remnawave Panel.
- O Remnawave Panel enviará uma notificação ao administrador no Telegram e também enviará um webhook (
torrent_blocker.report, scope:torrent_blocker).
É importante notar que as ações subsequentes em relação ao infrator devem ser implementadas por você mesmo. O Remnawave Panel fornece todas as capacidades para isso. Após receber o webhook do painel, você pode alterar o usuário para o status DISABLED se quiser que o usuário não consiga se conectar a todos os servidores.
O que chegará no webhook (torrent_blocker.report)
O webhook conterá o objeto completo dos já conhecidos objetos node e user, além de um objeto report que contém todas as informações disponíveis.
{
"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 é um plugin que bloqueia permanentemente o endereço IP que está na lista. O Ingress Filter filtra o tráfego de entrada (ingress).
Configuração
"ingressFilter": {
"blockedIps": [],
"enabled": false
}
| Field | Type | Description |
|---|---|---|
enabled | boolean | Ativa ou desativa o plugin, desativado por padrão |
blockedIps | array | Lista de endereços IP ou sub-redes CIDR (IPv4/IPv6) que serão bloqueados pelo plugin. Listas da configuração Shared Lists podem ser usadas. Exemplos: 192.168.1.1, 10.0.0.0/8, 2001:db8::/32. |
Princípio de funcionamento
Os endereços IP especificados na lista serão bloqueados no nftables.
O Ingress Filter é uma ferramenta muito perigosa. Seja cuidadoso e atento ao compilar as listas.
Egress Filter
Egress Filter é um plugin para bloquear o tráfego de saída. Permite proibir conexões a determinados endereços IP ou portas no lado do destino. Por exemplo, pode-se bloquear o acesso a endereços IP específicos de serviços internos (por exemplo, 10.0.0.1, 10.0.0.2) ou externos (por exemplo, 8.8.8.8, 8.8.4.4) ou fechar portas indesejadas (por exemplo, 25, 465, 587).
Configuração
"egressFilter": {
"blockedIps": [],
"blockedPorts": [],
"enabled": false
}
| Field | Type | Description |
|---|---|---|
blockedIps | array | Lista de endereços IP ou sub-redes CIDR (IPv4/IPv6) que serão bloqueados pelo plugin. Listas da configuração Shared Lists podem ser usadas. Exemplos: 192.168.1.1, 10.0.0.0/8, 2001:db8::/32. |
blockedPorts | array | Lista de portas que serão bloqueadas pelo plugin. |
enabled | boolean | Ativa ou desativa o plugin, desativado por padrão |
Connection Drop
Connection Drop não é um plugin completo, mas um pequeno complemento para ter a possibilidade de adicionar endereços IP à lista branca para a funcionalidade Connection Drop.
A partir da versão Remnawave Node v2.6.0 – e ao habilitar a diretiva cap_add: NET_ADMIN – o Remnawave Node automaticamente encerra conexões ao remover um usuário do Xray-Core. No caso de uso de pontes, isso poderia levar à interrupção da conexão de ponte como resultado desta função.
A partir da versão Remnawave Node v2.7.0 – você pode habilitar a lista branca para a funcionalidade Connection Drop.
As funções Connection Drop funcionarão sempre, aqui se configura apenas a ativação ou desativação da lista branca para esta funcionalidade.
Configuração
"connectionDrop": {
"enabled": false,
"whitelistIps": []
}
| Field | Type | Description |
|---|---|---|
enabled | boolean | Ativa ou desativa o plugin, desativado por padrão |
whitelistIps | array | Lista de endereços IP que serão adicionados à lista branca para a funcionalidade Connection Drop. |
Shared Lists
Shared Lists é uma lista de endereços IP que podem ser usados em outros plugins.
Configuração
"sharedLists": [
{
"name": "ext:my-list",
"type": "ipList",
"items": ["127.0.0.1", "127.0.0.2", "10.0.0.0/8", "2001:db8::/32"]
}
]
| Field | Type | Description |
|---|---|---|
name | string | Nome da lista, deve começar com ext: |
type | string | Tipo da lista, deve ser ipList |
items | array | Lista de endereços IP ou sub-redes CIDR (IPv4/IPv6). Exemplos: 127.0.0.1, 10.0.0.0/8, 2001:db8::/32. |
Exemplo de uso na configuração do Torrent Blocker:
"torrentBlocker": {
"enabled": false,
"ignoreLists": {
"ip": ["ext:my-list"]
},
"blockDuration": 3600
}
Executor
Executor permite enviar comandos para execução: bloqueio temporário de endereços IP, desbloqueio de endereços IP, reset da tabela nftables.
Para o seu funcionamento não é necessário ter plugins habilitados, porém a diretiva cap_add: NET_ADMIN deve estar obrigatoriamente habilitada.
Block IPs
O comando é destinado ao bloqueio temporário de endereços IP. Você pode especificar vários endereços e o tempo de bloqueio em segundos. 0 – significa até o momento da reinicialização do Remnawave Node ou mudança na configuração do plugin vinculado a este nó.
Por favor, não use este comando para bloqueio permanente de endereços IP. Use o plugin Ingress Filter para isso.
Unblock IPs
O comando é destinado ao desbloqueio de endereços IP. Ao executá-lo, será enviada uma solicitação para remover o endereço IP da tabela nftables.
Reset nftables
O comando é destinado ao reset da tabela nftables. Ao executá-lo, será enviada uma solicitação para recriar a tabela nftables.