Sintaxe das regras de filtragem de DNS
Aqui, mostramos como escrever regras de filtragem de DNS personalizadas para uso nos produtos AdGuard
Quick links: Download AdGuard Ad Blocker, Get AdGuard Home, Try AdGuard DNS
Introduction
Pode utilizar a sintaxe das regras de filtragem do AdGuard DNS para tornar as regras mais flexíveis, para que possam bloquear o conteúdo conforme as suas preferências. A sintaxe das regras de filtragem do AdGuard DNS pode ser utilizada em diferentes produtos AdGuard, tais como AdGuard Home, AdGuard DNS, AdGuard para Windows/Mac/Android.
Existem três abordagens diferentes para escrever listas de bloqueio de hosts:
Adblock-style syntax: the modern approach to writing filtering rules based on using a subset of the Adblock-style rule syntax. Dessa forma, as listas de bloqueio são compatíveis com os bloqueadores de anúncios do navegador.
/etc/hosts
sintaxe: a abordagem antiga e comprovada que usa a mesma sintaxe que os sistemas operacionais usam para seus arquivos de hosts.Sintaxe somente de domínios: uma lista simples de nomes de domínio.
If you are creating a blocklist, we recommend using the Adblock-style syntax. Tem algumas vantagens importantes sobre a sintaxe de estilo antigo:
Tamanho das listas de bloqueio. O uso de correspondência de padrões permite que você tenha uma única regra em vez de centenas de
/etc/hosts
entradas.Compatibilidade. Sua lista de bloqueio será compatível com bloqueadores de anúncios do navegador e será mais fácil compartilhar regras com uma lista de filtros do navegador.
Extensibilidade. Na última década, a sintaxe do estilo Adblock evoluiu muito e não vemos razão para não estendê-la ainda mais e oferecer recursos adicionais para bloqueadores no nível da rede.
Se você estiver mantendo uma lista de bloqueio de estilo /etc/hosts
ou várias listas de filtragem (independentemente do tipo), fornecemos uma ferramenta para compilação de lista de bloqueio. We named it Hostlist compiler and we use it ourselves to create AdGuard DNS filter.
Basic examples
||exemplo.org^
: bloqueia o acesso ao domínioexemplo.org
e a todos os seus subdomínios, comowww.exemplo.org
.@@||exemplo.org^
: desbloqueia o acesso ao domínioexemplo.org
e a todos os seus subdomínios.1.2.3.4 exemplo.org
: (atenção,/etc/hosts
- estilo antigo de sintaxe) em AdGuard Home, responder com1.2.3.4
a consultas para o domínioexemplo.org
mas não os seus subdomínios. No AdGuard DNS Privado, bloqueia o acesso aexemplo.org
.www.exemplo.org
permanece permitido.No AdGuard Home, usar o endereço IP não especificado (
0.0.0.0
) ou um endereço local (127.0.0.1
e similares) para um host é basicamente o mesmo que bloquear esse host.# Retorna o endereço IP 1.2.3.4 para exemplo.org.
1.2.3.4 exemplo.org
# Bloqueia exemplo.org respondendo com 0.0.0.0.
0.0.0.0 exemplo.orgexemplo.org
: uma regra de domínio simples. Bloqueia o domínioexemplo.org
, mas não os seus subdomínios.www.exemplo.org
permanece permitido.! Aqui vai um comentário
e# Também um comentário
: comentários./REGEX/
: bloqueia acesso aos domínios que correspondem à expressão regular especificada.
Adblock-style syntax
This is a subset of the traditional Adblock-style syntax which is used by browser ad blockers.
regra = ["@@"] padrão ["$" modificadores ]
modificadores = [modificador0, modificador1[, ...[, modificadorN]]]
pattern
: a máscara do hostname. Cada hostname é comparado com esta máscara. O padrão também pode conter caracteres especiais, que são descritos abaixo.@@
: o marcador que é usado nas regras de exceção. Inicie sua regra com este marcador se desejar desativar a filtragem dos nomes de host correspondentes.modifiers
: parâmetros que esclarecem a regra. Eles podem limitar o escopo da regra ou até mesmo mudar completamente a forma como ela funciona.
Special characters
*
: o caractere curinga. É usado para representar qualquer conjunto de caracteres. Isso também pode ser uma string vazia ou uma string de qualquer tamanho.||
: corresponde ao início de um nome de host, incluindo qualquer subdomínio. Por exemplo,||exemplo.org
corresponde aexemplo.org
eteste.exemplo.org
, mas nãotestexample.org
.^
: o caractere separador. Ao contrário do bloqueio de anúncios do navegador, não há nada para separar em um nome de host, portanto, o único objetivo desse caractere é marcar o final do nome do host.|
: um ponteiro para o início ou o fim do nome do host. O valor depende do posicionamento do caractere na máscara. Por exemplo, a regraample.org|
corresponde aexemplo.org
mas não aexemplo.org.com
.|exemplo
corresponde aexemplo.org
mas não ateste.exemplo
.
Regular expressions
If you want even more flexibility in making rules, you can use regular expressions instead of the default simplified matching syntax. Se você quiser usar uma expressão regular, o padrão deve ficar assim:
padrão = "/" regexp "/"
Exemplos:
/example.*/
bloqueará os hosts correspondentes aoexample.*
regexp.@@/example.*/$important
irá desbloquear os hosts correspondentes aoexemplo.*
regexp. Observe que esta regra também implica o modificadorimportant
.
Comments
Qualquer linha que comece com um ponto de exclamação ou hash é um comentário e será ignorado pelo mecanismo de filtragem. Os comentários geralmente são colocados acima das regras e usados para descrever o que uma regra faz.
Exemplo:
! Isso é um comentário.
# Isso também é um comentário.
Rule modifiers
Você pode alterar o comportamento de uma regra adicionando modificadores. Os modificadores devem estar localizados no final da regra após o caractere $
e ser separados por vírgulas.
Exemplos:
||example.org^
é o padrão correspondente.$
é o delimitador, que sinaliza que o restante da regra são modificadores.important
é o modificador.You may want to use multiple modifiers in a rule. Nesse caso, separe-os por vírgulas:
||example.org^$client=127.0.0.1,dnstype=A
||example.org^
é o padrão correspondente.$
é o delimitador, que sinaliza que o restante da regra são modificadores.client=127.0.0.1
is theclient
modifier with its value,127.0.0.1
.,
is the delimiter between modifiers. And finally,dnstype=A
is thednstype
modifier with its value,A
.
NOTA: Se uma regra contém um modificador não listado neste documento, toda a regra deve ser ignorada. Dessa forma, evitamos falsos positivos quando as pessoas estão tentando usar listas de filtros de bloqueadores de anúncios de navegador não modificados, como EasyList ou EasyPrivacy.
client
O modificador client
permite especificar os clientes aos quais esta regra é aplicada. Existem duas maneiras principais de identificar um cliente:
Por seu endereço IP ou prefixo CIDR. Esta forma funciona para todos os tipos de clientes.
Pelo seu nome. Essa forma funciona apenas para clientes persistentes (no AdGuard Home) e dispositivos (no DNS privado do AdGuard), que você adicionou manualmente.
NOTA: No AdGuard Home, ClientIDs não são compatíveis atualmente, apenas nomes são compatíveis. Se você adicionou um cliente com o nome “My Client” e ClientID
my-client
digite seu modificador como$client='My Client'
em vez de$client=my-client
.
A sintaxe é:
$client=valor1|valor2|...
Você também pode excluir clientes adicionando um caractere ~
antes do valor. Nesse caso, a regra não será aplicada às solicitações de DNS desse cliente.
$client=~valor1
Os nomes dos clientes geralmente contêm espaços ou outros caracteres especiais, e é por isso que você deve colocar o nome entre aspas. As aspas ASCII simples e duplas são compatíveis. Use a barra invertida (\
) para escapar de aspas ("
e '
), vírgulas (,
) e barras verticais (|
).
NOTA: Ao excluir um cliente, você deve colocar ~
fora das aspas.
Exemplos:
@@||*^$client=127.0.0.1
: desbloqueie tudo para localhost.||example.org^$client='Laptop do Frank'
: blocoexample.org
para o cliente chamadoLaptop do Frank
apenas. Observe que as aspas ('
) no nome devem ter escape.||example.org^$client=~'Laptops de Mary, John e Boris
: bloqueieexample.org
para todos, exceto para o cliente chamadoLaptop de Mary, John e Boris
. Observe que a vírgula (,
) também deve ser escapada.||example.org^$client=~Mãe|~Pai|Crianças
: bloqueieexemplo.org
paraCrianças
, mas não paraMãe
ePai
. Este exemplo demonstra como especificar vários clientes em uma regra.||example.org^$client=192.168.0.0/24
: bloqueieexample.org
para todos os clientes com endereços IP no intervalo de192.168.0.0
a192.168.0.255
.
denyallow
Você pode usar o modificador denyallow
para excluir domínios da regra de bloqueio. Para adicionar vários domínios a uma regra, use o caractere |
como separador.
A sintaxe é:
$denyallow=domínio1|domínio2|...
Este modificador permite evitar a criação de regras de exceção desnecessárias quando nossa regra de bloqueio abrange muitos domínios. Talvez você queira bloquear tudo, exceto alguns domínios TLD. Você pode usar a abordagem padrão, ou seja, regras como esta:
! Bloquear tudo.
/.*/
! Desbloqueie alguns TLDs.
@@||com^
@@||net^
O problema com essa abordagem é que, dessa forma, você também desbloqueará os domínios de rastreamento localizados nesses TLDs (ou seja google-analytics.com
). Veja como resolver isso com denyallow
:
*$denyallow=com|net
Exemplos:
*$denyallow=com|net
: bloqueie tudo exceto*.com
e*.net
.@@*$denyallow=com|net
: desbloqueie tudo exceto*.com
e*.net
.||exemplo.org^$denyallow=sub.exemplo.org
. bloqueieexample.org
e*.example.org
, mas não bloqueiesub.example.org
.
dnstype
O modificador dnstype
permite especificar a solicitação de DNS ou o tipo de resposta em que essa regra será acionada.
A sintaxe é:
$dnstype=valor1|valor2|...
$dnstype=~valor1|~valor2|~...
Os nomes dos tipos não diferenciam maiúsculas de minúsculas, mas são validados em relação a um conjunto de tipos reais de registro de recurso DNS (RR).
Não combine regras de exclusão com as de inclusão. Isso:
$dnstype=~valor1|valor2
é equivalente a isso:
$dnstype=valor2
Exemplos:
||example.org^$dnstype=AAAA
: bloqueia consultas DNS para os endereços IPv6 deexample.org
.||example.org^$dnstype=~A|~CNAME
: permita apenasA
eCNAME
consultas DNS paraexample.org
, bloqueie o resto.
NOTA: Antes da versão v0.108.0, o AdGuard Home usaria o tipo de solicitação para filtrar os registros de resposta, em oposição ao tipo do próprio registro de resposta. Isso causava problemas, pois significava que você não poderia escrever regras que permitissem certos registros CNAME
em respostas em solicitações A
e AAAA
. Em v0.108.0 esse comportamento foi alterado, agora isso:
||canon.example.com^$dnstype=~CNAME
permite evitar a filtragem da seguinte resposta:
RESPOSTAS:
-> exemplo.com
nome canônico = canon.exemplo.com.
ttl = 60
-> canon.example.com
internet address = 1.2.3.4
ttl = 60
dnsrewrite
O modificador de resposta dnsrewrite
permite substituir o conteúdo da resposta à solicitação DNS para os hosts correspondentes. Observe que esse modificador no AdGuard Home funciona em todas as regras, mas no DNS privado do AdGuard, funciona apenas nas regras personalizadas.
As regras com o modificador de resposta dnsrewrite
têm prioridade mais alta do que outras regras no AdGuard Home.
Responses to all requests for a host matching a dnsrewrite
rule will be replaced. The answer section of the replacement response will only contain RRs that match the request's query type and, possibly, CNAME RRs. Note that this means that responses to some requests may become empty (NODATA
) if the host matches a dnsrewrite
rule.
A sintaxe abreviada é:
$dnsrewrite=1.2.3.4
$dnsrewrite=abcd::1234
$dnsrewrite=example.net
$dnsrewrite=REFUSED
As palavras-chave DEVEM estar em letras maiúsculas (por exemplo NOERROR
). As reescritas de palavras-chave têm precedência sobre as outras e resultarão em uma resposta vazia com um código de resposta apropriado.
A sintaxe completa está no formato RCODE;RRTYPE;VALUE
:
$dnsrewrite=NOERROR;A;1.2.3.4
$dnsrewrite=NOERROR;AAAA;abcd::1234
$dnsrewrite=NOERROR;CNAME;example.net
$dnsrewrite=REFUSED;;
O modificador $dnsrewrite
com o código de resposta NOERROR
também pode ter campos RRTYPE
e VALUE
vazios.
O CNAME
é especial porque o AdGuard Home resolverá o host e adicionará suas informações à resposta. Ou seja, se example.net
tiver o IP 1.2.3.4
, e o usuário tiver isso em suas regras de filtragem:
||example.com^$dnsrewrite=example.net
! Ou:
||example.com^$dnsrewrite=NOERROR;CNAME;example.net
então a resposta será algo como:
nslookup example.com my.adguard.local
Server: my.adguard.local
Address: 127.0.0.1#53
Non-authoritative answer:
example.com canonical name = example.net.
Name: example.net
Address: 1.2.3.4
Em seguida, a substituição do CNAME
. Depois disso, os valores de todos os outros registros são somados como uma resposta, então isso:
||example.com^$dnsrewrite=NOERROR;A;1.2.3.4
||example.com^$dnsrewrite=NOERROR;A;1.2.3.5
resultará em uma resposta com dois registros A
.
Tipos de RR atualmente compatíveis, com exemplos:
||4.3.2.1.in-addr.arpa^$dnsrewrite=NOERROR;PTR;example.net.
adds aPTR
record for reverse DNS. Solicitações DNS reversas para1.2.3.4
para o servidor DNS resultarão emexample.net
.NOTA: o IP DEVE estar na ordem inversa. See RFC 1035.
||exemplo.com^$dnsrewrite=NOERROR;A;1.2.3.4
adiciona um registroA
com o valor1.2.3.4
.||example.com^$dnsrewrite=NOERROR;AAAA;abcd::1234
adiciona um registroAAAA
com o valorabcd::1234
.||example.com^$dnsrewrite=NOERROR;CNAME;example.org
adiciona o registroCNAME
. Veja a explicação acima.||example.com^$dnsrewrite=NOERROR;HTTPS;32 example.com alpn=h3
adiciona um registroHTTPS
. Apenas um subconjunto de valores de parâmetro é suportado: os valores devem sercontíguos
e, onde uma lista devalores
éesperada
, apenas um valor é atualmente compatível:ipv4hint=127.0.0.1 // Compatível.
ipv4hint="127.0.0.1" // Não suportado.
ipv4hint=127.0.0.1,127.0.0.2 // Não suportado.
ipv4hint="127.0.0.1,127.0.0.2" // Não suportado.Isso será alterado no futuro.
||example.com^$dnsrewrite=NOERROR;MX;32 example.mail
adiciona um registroMX
com valor de precedência32
e valor de trocaexample.mail
.||example.com^$dnsrewrite=NOERROR;SVCB;32 example.com alpn=h3
adiciona um valorSVCB
. Veja o exemploHTTPS
acima.||example.com^$dnsrewrite=NOERROR;TXT;hello_world
adiciona um registroTXT
com o valorhello_world
.||_svctype._tcp.example.com^$dnsrewrite=NOERROR;SRV;10 60 8080 example.com
adiciona um registoSRV
com valor de prioridade10
, valor de peso60
, porta8080
e valor de destinoexample.com
.||exemplo.com^$dnsrewrite=NXDOMAIN;;
responde com um códigoNXDOMAIN
.$dnstype=AAAA,denyallow=example.org,dnsrewrite=NOERROR;;
responde com umNOERROR
vazio responde a todos os pedidosAAAA
exceto os pedidos paraexample.org
.
Exception rules unblock one or all rules:
@@||example.com^$dnsrewrite
unblocks all DNS rewrite rules.@@||example.com^$dnsrewrite=1.2.3.4
unblocks the DNS rewrite rule that adds anA
record with the value1.2.3.4
.
important
O modificador important
aplicado a uma regra aumenta sua prioridade sobre qualquer outra regra sem o modificador. Mesmo em relação a regras básicas de exceção.
Exemplos:
Neste exemplo:
||example.org^$important
@@||example.org^||example.org^$important
bloqueará todas as solicitações para*.example.org
apesar da regra de exceção.Neste exemplo:
||example.org^$important
@@||example.org^$importanta regra de exceção também tem o modificador
important
, então funcionará.
badfilter
As regras com o modificador badfilter
desativam outras regras básicas às quais se referem. Isso significa que o texto da regra desabilitada deve corresponder ao texto da regra badfilter
(sem o modificador badfilter
).
Exemplos:
||exemplo.com$badfilter
desativa||exemplo.com
.@@||example.org^$badfilter
desativa@@||example.org^
.NOTA: O modificador
badfilter
atualmente não funciona com regras de estilo/etc/hosts
.127.0.0.1 exemplo.org$badfilter
não irá desativar a regra original127.0.0.1 exemplo.org
.
ctag
O modificador ctag
só pode ser usado no AdGuard Home.
Ele permite bloquear domínios apenas para tipos específicos de tags de cliente DNS. Você pode atribuir tags a clientes na interface do usuário do AdGuard Home. No futuro, planejamos atribuir tags automaticamente analisando o comportamento de cada cliente.
A sintaxe é:
$ctag=valor1|valor2|...
Se uma das tags do cliente corresponder aos valores ctag
, esta regra se aplica ao cliente. A sintaxe para exclusão é:
$ctag=~valor1|~valor2|...
Se uma das tags do cliente corresponder aos valores de exclusão ctag
, essa regra não se aplica ao cliente.
Exemplos:
||example.org^$ctag=device_pc|device_phone
: blocoexample.org
para clientes marcados comodevice_pc
oudevice_phone
.||example.org^$ctag=~device_phone
: blocoexample.org
para todos os clientes, exceto aqueles marcados comodevice_phone
.
A lista de tags permitidas:
Por tipo de dispositivo:
device_audio
: dispositivos de áudio.device_camera
: câmeras.device_gameconsole
: consoles de jogos.device_laptop
: notebooks.device_nas
: NAS (Network-attached Storages).device_pc
: PCs.device_phone
: celulares.device_printer
: impressoras.device_securityalarm
: alarmes de segurança.device_tablet
: tablets.device_tv
: TVs.device_other
: outros dispositivos.
Por sistema operacional:
os_android
: Android.os_ios
: iOS.os_linux
: Linux.os_macos
: macOS.os_windows
: Windows.os_other
: outros sistemas operacionais.
Por grupo de usuários:
user_admin
: administradores.user_regular
: usuários comuns.user_child
: filhos.
/etc/hosts
-style syntax
Para cada host, uma única linha deve estar presente com as seguintes informações:
IP_address canonical_hostname [aliases...]
Os campos das entradas são separados por qualquer número de caracteres de espaço ou tabulação. O texto do caractere #
até o final da linha é um comentário e é ignorado.
Os nomes de host podem conter apenas caracteres alfanuméricos, hífen (-
) e pontos (.
). Eles devem começar com um caractere alfabético e terminar com um caractere alfanumérico. Os aliases opcionais fornecem mudanças de nome, grafias alternativas, nomes de host mais curtos ou nomes de host genéricos (por exemplo, localhost
).
Exemplo:
# Este é um comentário
127.0.0.1 exemplo.org exemplo.info
127.0.0.1 exemplo.com
127.0.0.1 exemplo.net # isso também é um comentário
No AdGuard Home, os endereços IP são usados para responder às consultas de DNS desses domínios. No DNS privado do AdGuard, esses endereços são simplesmente bloqueados.
Domains-only syntax
Uma lista simples de nomes de domínio, um nome por linha.
Exemplo:
# Isto é um comentário
exemplo.com
exemplo.org
exemplo.net # isto também é um comentário
If a string is not a valid domain (e.g. *.example.org
), AdGuard Home will consider it to be an Adblock-style syntax rule.
Hostlist compiler
If you are maintaining a blocklist and use different sources in it, Hostlist compiler may be useful to you. É uma ferramenta simples que facilita a compilação de uma lista de bloqueio de hosts compatível com AdGuard Home, Private AdGuard DNS ou qualquer outro produto AdGuard com filtragem de DNS.
O que é capaz de fazer:
Compilar uma única lista de bloqueios a partir de várias fontes.
Excluir as regras de que você não precisa.
Limpe a lista resultante: remova a duplicação, remova regras inválidas e compacte a lista.