Pular para o conteúdo principal

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.

dica

Os plugins para nós estão disponíveis a partir da versão Remnawave Panel & Remnawave Node v2.7.0.

Node Plugins

Requisitos

Para o correto funcionamento dos plugins, é obrigatório adicionar a diretiva cap_add: NET_ADMIN à configuração do 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

Certifique-se de que nftables está disponível na máquina host. Na maioria das distribuições modernas já está instalado por padrão.

Verificar versão do nftables
nft --version

Versão do kernel Linux

É necessária a versão do kernel 5.7 ou superior.

Verificar versão do kernel
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.

perigo

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?
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
}
}

Suporte CIDR

informação

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

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": []
}
dica

O editor de configuração de plugins suporta dicas (passe o cursor sobre um objeto para ler a descrição) e autocompletar.

Torrent Blocker

perigo

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.

aviso

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
},
FieldTypeDescription
enabledbooleanAtiva ou desativa o plugin, desativado por padrão
ignoreListsobjectLista de endereços IP e IDs de usuários que serão ignorados pelo plugin
blockDurationnumberDuração do bloqueio em segundos
includeRuleTagsarrayCampo opcional. Array de valores ruleTag das suas regras de roteamento, pelos quais o bloqueio de IPs também será executado.
ignoreLists
{
"ip": [],
"userId": []
}
FieldTypeDescription
iparrayLista de endereços IP que serão ignorados pelo plugin (CIDR não suportado). Listas da configuração Shared Lists podem ser usadas.
userIdarrayLista 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:

Regras de roteamento personalizadas no 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"
}

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:

Configuração do Torrent Blocker com 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.

aviso

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:

  1. O Remnawave Node adiciona as mudanças necessárias à configuração do Xray-Core.
  2. O usuário usa torrents.
  3. Seu tráfego se enquadra na regra adicionada pelo Remnawave Node à configuração do Xray-Core.
  4. O Xray-Core envia informações do pacote ao webhook.
  5. O Remnawave Node bloqueia o endereço IP e interrompe a conexão.
  6. Em ~15-30 segundos esta informação será transmitida ao Remnawave Panel.
  7. O Remnawave Panel enviará uma notificação ao administrador no Telegram e também enviará um webhook (torrent_blocker.report, scope: torrent_blocker).
informação

É 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
}
FieldTypeDescription
enabledbooleanAtiva ou desativa o plugin, desativado por padrão
blockedIpsarrayLista 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.

perigo

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
}
FieldTypeDescription
blockedIpsarrayLista 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.
blockedPortsarrayLista de portas que serão bloqueadas pelo plugin.
enabledbooleanAtiva 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.

observação

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": []
}
FieldTypeDescription
enabledbooleanAtiva ou desativa o plugin, desativado por padrão
whitelistIpsarrayLista 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"]
}
]
FieldTypeDescription
namestringNome da lista, deve começar com ext:
typestringTipo da lista, deve ser ipList
itemsarrayLista 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

Executor permite enviar comandos para execução: bloqueio temporário de endereços IP, desbloqueio de endereços IP, reset da tabela nftables.

aviso

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

Node Plugins

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ó.

dica

Por favor, não use este comando para bloqueio permanente de endereços IP. Use o plugin Ingress Filter para isso.

Unblock IPs

Node Plugins

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.