DNS filtreleme kuralları söz dizimi
Burada, AdGuard ürünlerinde kullanılmak üzere özel DNS filtreleme kurallarının nasıl yazılacağını gösteriyoruz
Hızlı bağlantılar: AdGuard Reklam Engelleyiciyi indir, [AdGuard Home'u edin](https://github.com/AdguardTeam/AdGuardHome #getting-started), AdGuard DNS'i dene
Giriş
Kuralları daha esnek hâle getirmek için AdGuard DNS filtreleme kuralları söz dizimini kullanabilirsiniz, böylece tercihlerinize göre içeriği engelleyebilirler. AdGuard DNS filtreleme kuralları söz dizimi, AdGuard Home, AdGuard DNS, Windows/Mac/Android için AdGuard gibi farklı AdGuard ürünlerinde kullanılabilir.
Ana makine engel listeleri yazmak için üç farklı yaklaşım vardır:
Adblock-style syntax: the modern approach to writing filtering rules based on using a subset of the Adblock-style rule syntax. Bu şekilde engel listeleri tarayıcı reklam engelleyicileriyle uyumludur.
/etc/hostssözdizimi: işletim sistemlerinin hosts dosyaları için kullandığı söz diziminin aynısını kullanan eski, denenmiş ve doğru yaklaşım.Yalnızca alan adı söz dizimi: alan adlarının basit bir listesi.
If you are creating a blocklist, we recommend using the Adblock-style syntax. Eski tarz söz dizimine göre birkaç önemli avantajı vardır:
Engel listesi boyutu. Düzen eşleştirmeyi kullanmak, yüzlerce
/etc/hostsgirişi yerine tek bir kurala sahip olmanızı sağlar.Uyumluluk. Engel listeniz, tarayıcı reklam engelleyicilerle uyumlu olur ve bir tarayıcı filtre listesiyle kuralları paylaşmak daha kolay olacaktır.
Genişletilebilirlik. Geçtiğimiz on yılda, Reklam engelleme stili söz dizimi büyük ölçüde gelişti ve bunu daha da genişletmemek ve ağ düzeyindeki engelleyiciler için ek özellikler sunmamak için hiçbir neden göremiyoruz.
If you’re maintaining either a /etc/hosts-style blocklist or multiple filtering lists (regardless of type), we provide a tool for blocklist compilation. We named it Hostlist compiler and we use it ourselves to create AdGuard DNS filter.
Temel örnekler
||example.org^:example.orgalan adına vewww.example.orggibi tüm alt alan adlarına erişimi engeller.@@|example.org^:example.orgalan adına ve tüm alt alan adlarına erişim engelini kaldırın.1.2.3.4 example.org: (dikkat, eski/etc/hostsbiçimi söz dizimi) AdGuard Home'da,example.orgalan adına yönelik sorgulara1.2.3.4ile yanıt verin ancak alt alan adlarına yanıt vermeyin. Özel AdGuard DNS'de,example.orgalan adına erişimi engelleyin.www.example.orgremains allowed.AdGuard Home'da, bir ana makine için belirtilmemiş IP adresini (
0.0.0.0) veya yerel bir adresi (127.0.0.1ve benzeri) kullanmak, temel olarak o ana makineyi engellemekle aynıdır.# example.org için 1.2.3.4 IP adresini döndürür.
1.2.3.4 example.org
# example.org alan adını 0.0.0.0 ile yanıtlayarak engeller.
0.0.0.0 example.orgexample.org: basit bir alan adı kuralı.example.orgalan adını engeller ancak alt alanlarını engellemez.www.example.orgremains allowed.! Here goes a commentand# Also a comment: comments./REGEX/: belirtilen normal ifadeyle eşleşen alan adlarına erişimi engelleyin.
Adblock-style syntax
This is a subset of the traditional Adblock-style syntax which is used by browser ad blockers.
kural = ["@@"] pattern [ "$" modifiers ]
değiştiriciler = [modifier0, modifier1[, ...[, modifierN]]]
pattern: ana makine adı maskesi. Her ana makine adı bu maskeyle eşleştirilir. Kalıp, aşağıda açıklanan özel karakterleri de içerebilir.@@: istisna kurallarında kullanılan işaretçi. Eşleşen ana makine adları için filtrelemeyi kapatmak istiyorsanız kuralınıza bu işaretçiyle başlayın.değiştiriciler: kuralı netleştiren parametreler. Kuralın kapsamını sınırlayabilir veya hatta çalışma şeklini tamamen değiştirebilirler.
Özel karakterler
*: joker karakter. Herhangi bir karakter kümesini temsil etmek için kullanılır. Bu ayrıca boş bir dize veya herhangi bir uzunlukta bir dize olabilir.||: herhangi bir alt alan dahil olmak üzere bir ana makine adının başlangıcıyla eşleşir. Örneğin,|example.org,example.orgvetest.example.orgile eşleşir ancaktestexample.orgile eşleşmez.^: ayırıcı karakter. Unlike browser ad blocking, there’s nothing to separate in a hostname, so the only purpose of this character is to mark the end of the hostname.|: ana makine adının başına veya sonuna bir işaretçi. Değer, maskedeki karakter yerleşimine bağlıdır. Örneğin,ample.org|kuralıexample.orgalan adına karşılık gelir ancakexample.org.comalan adına karşılık gelmez.|example,example.orgalan adına karşılık gelir ancaktest.examplealan adına karşılık gelmez.
Düzenli ifadeler
If you want even more flexibility in making rules, you can use regular expressions instead of the default simplified matching syntax. Düzenli bir ifade kullanmak istiyorsanız, kalıp aşağıdaki gibi görünmelidir:
pattern = "/" regexp "/"
Örnekler:
/example.*/,example.*alan adı regexp'iyle eşleşen ana makineleri engeller.@@/example.*/$important,example.*regexp'iyle eşleşen ana makinelerin engelini kaldırır. Bu kuralın aynı zamandaönemlideğiştiricisi anlamına geldiğini unutmayın.
Yorumlar
Ünlem işareti veya hash işareti ile başlayan her satır bir yorumdur ve filtreleme motoru tarafından göz ardı edilir. Yorumlar genellikle kuralların üzerine yerleştirilir ve bir kuralın ne yaptığını açıklamak için kullanılır.
Örnek:
! Bu bir yorumdur.
# Bu da bir yorumdur.
Kural değiştiriciler
Değiştiriciler ekleyerek bir kuralın davranışını değiştirebilirsiniz. Değiştiriciler, kuralın sonunda $ karakterinden sonra yerleştirilmeli ve virgülle ayrılmalıdır.
Örnekler:
|example.org^eşleşen kalıptır.$, kuralın geri kalanının değiştirici olduğunu belirten sınırlayıcıdır.importantdeğiştiricidir.Bir kuralda birden çok değiştirici kullanmak isteyebilirsiniz. Bu durumda, bunları virgülle ayırın:
||example.org^$client=127.0.0.1,dnstype=A|example.org^eşleşen kalıptır.$, kuralın geri kalanının değiştirici olduğunu belirten sınırlayıcıdır.client=127.0.0.1is theclientmodifier with its value,127.0.0.1.,değiştiriciler arasındaki sınırlayıcıdır. And finally,dnstype=Ais thednstypemodifier with its value,A.
If a rule contains a modifier not listed in this document, the whole rule must be ignored. This way we avoid false-positives when people are trying to use unmodified browser ad blockers’ filter lists like EasyList or EasyPrivacy.
i̇stemci
The client modifier allows specifying clients this rule is applied to. There are two main ways to identify a client:
IP adreslerine veya CIDR öneklerine göre. Bu yol her türlü istemciler için çalışır.
Adlarına göre. Bu yol, yalnızca elle eklediğiniz kalıcı istemciler (AdGuard Home'da) ve cihazlar (Özel AdGuard DNS'de) için çalışır.
NotIn AdGuard Home, ClientIDs are not currently supported, only names are. If you have added a client with the name “My Client” and ClientID
my-clientspell your modifier as$client='My Client'as opposed to$client=my-client.
The syntax is:
$client=value1|value2|...
You can also exclude clients by adding a ~ character before the value. In this case, the rule is not be applied to this client’s DNS requests.
$client=~value1
Client names usually contain spaces or other special characters, which is why you should enclose the name in quotes. Both single and double ASCII quotes are supported. Use the backslash (\) to escape quotes (" and '), commas (,), and pipes (|).
Bir istemciyi hariç tutarken, tırnakların dışına ~ işareti koymalısınız.
Örnekler:
@@||*^$client=127.0.0.1: localhost için her şeyin engelini kaldırın.||example.org^$client='Frank\'s laptop':example.orgalan adını yalnızcaFrank'in dizüstü bilgisayarıadlı istemci için engelleyin. Addaki tırnak işaretinin (') kaçınılması gerektiğini unutmayın.||example.org^$client=~'Mary\'s\, John\'s\, and Boris\'s laptops':Mary, John ve Boris dizüstü bilgisayarlarıadlı istemci dışındaki herkes içinexample.orgalan adını engelleyin. Virgülden (,) de kaçınılması gerektiğini unutmayın.||example.org^$client=~Mom|~Dad|Kids:example.orgalan adınıKidsiçin engelleyin amaMomveDadiçin engellemeyin. Bu örnek, bir kuralda birden çok istemcinin nasıl belirtileceğini gösterir.||example.org^$client=192.168.0.0/24: IP adresleri192.168.0.0ila192.168.0.255aralığında olan tüm istemciler içinexample.orgalan adını engelleyin.
denyallow
You can use the denyallow modifier to exclude domains from the blocking rule. To add multiple domains to one rule, use the | character as a separator.
The syntax is:
$denyallow=domain1|domain2|...
This modifier allows avoiding creating unnecessary exception rules when our blocking rule covers too many domains. You may want to block everything except for a couple of TLD domains. You could use the standard approach, i.e. rules like this:
! Her şeyi engelleyin.
/.*/
! Birkaç üst seviye alan adlarının engelini kaldırın.
@@||com^
@@||net^
The problem with this approach is that this way you will also unblock tracking domains that are located on those TLDs (i.e. google-analytics.com). Here’s how to solve this with denyallow:
*$denyallow=com|net
Örnekler:
*$denyallow=com|net:*.comve*.netdışındaki her şeyi engelleyin.@@*$denyallow=com|net:*.comve*.netdışındaki her şeyin engelini kaldırın.||example.org^$denyallow=sub.example.org: blockexample.organd*.example.org, but notsub.example.org.
dnstype
The dnstype modifier allows specifying DNS request or response type on which this rule will be triggered.
The syntax is:
$dnstype=value1|value2|...
$dnstype=~value1|~value2|~...
The names of the types are case-insensitive, but are validated against a set of actual DNS resource record (RR) types.
Do not combine exclusion rules with inclusion ones. This:
$dnstype=~value1|value2
is equivalent to this:
$dnstype=value2
Örnekler:
||example.org^$dnstype=AAAA:example.orgalan adının IPv6 adresleri için DNS sorgularını engeller.||example.org^$dnstype=~A|~CNAME:example.orgiçin yalnızcaAveCNAMEDNS sorgularına izin verin ve gerisini engelleyin.
Before version v0.108.0, AdGuard Home would use the type of the request to filter the response records, as opposed to the type of the response record itself. That caused issues, since that meant that you could not write rules that would allow certain CNAME records in responses in A and AAAA requests. In v0.108.0 that behaviour was changed, so now this:
||canon.example.com^$dnstype=~CNAME
allows you to avoid filtering of the following response:
ANSWERS:
-> example.com
canonical name = canon.example.com.
ttl = 60
-> canon.example.com
internet address = 1.2.3.4
ttl = 60
dnsrewrite
The dnsrewrite response modifier allows replacing the content of the response to the DNS request for the matching hosts. Note that this modifier in AdGuard Home works in all rules, but in Private AdGuard DNS — only in custom ones.
Rules with the dnsrewrite response modifier have higher priority than other rules in AdGuard Home and AdGuard DNS.
Responses to all requests for a host matching a dnsrewrite rule will be replaced. Değiştirme yanıtının yanıt bölümü yalnızca isteğin sorgu türüyle eşleşen RR'leri ve muhtemelen CNAME RR'leri içerir. Note that this means that responses to some requests may become empty (NODATA) if the host matches a dnsrewrite rule.
The shorthand syntax is:
$dnsrewrite=1.2.3.4
$dnsrewrite=abcd::1234
$dnsrewrite=example.net
$dnsrewrite=REFUSED
The keywords MUST be in all caps (e.g. NOERROR). Keyword rewrites take precedence over the other and will result in an empty response with an appropriate response code.
The full syntax is of the form RCODE;RRTYPE;VALUE:
$dnsrewrite=NOERROR;A;1.2.3.4
$dnsrewrite=NOERROR;AAAA;abcd::1234
$dnsrewrite=NOERROR;CNAME;example.net
$dnsrewrite=REFUSED;;
The $dnsrewrite modifier with the NOERROR response code may also has empty RRTYPE and VALUE fields.
CNAME özeldir çünkü AdGuard Home ana makineyi çözer ve bilgisini yanıta ekler. That is, if example.net has IP 1.2.3.4, and the user has this in their filter rules:
||example.com^$dnsrewrite=example.net
! Veya:
||example.com^$dnsrewrite=NOERROR;CNAME;example.net
then the response will be something like:
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.
Ad: example.net
Adres: 1.2.3.4
Next, the CNAME rewrite. Bundan sonra, diğer tüm kayıtların değerleri tek bir yanıt olarak toplanır, yani bu:
||example.com^$dnsrewrite=NOERROR;A;1.2.3.4
||example.com^$dnsrewrite=NOERROR;A;1.2.3.5
will result in a response with two A records.
Currently supported RR types with examples:
||4.3.2.1.in-addr.arpa^$dnsrewrite=NOERROR;PTR;example.net., ters DNS için birPTRkaydı ekler. DNS sunucusuna1.2.3.4için yapılan ters DNS istekleriexample.netalan adı olarak sonuçlanır.NotThe IP MUST be in reverse order. See RFC 1035.
||example.com^$dnsrewrite=NOERROR;A;1.2.3.4,1.2.3.4değerine sahip birAkaydı ekler.||example.com^$dnsrewrite=NOERROR;AAAA;.,abcd::1234değerine sahip birAAAAkaydı ekler.||example.com^$dnsrewrite=NOERROR;CNAME;example.org, birCNAMEkaydı ekler. Yukarıdaki açıklamaya bakın.||example.com^$dnsrewrite=NOERROR;HTTPS;32 example.com alpn=h3, birHTTPSkaydı ekler. Only a subset of parameter values is supported: values must becontiguousand, where avalue-listisexpected, only one value is currently supported:ipv4hint=127.0.0.1 // Destekleniyor.
ipv4hint="127.0.0.1" // Desteklenmiyor.
ipv4hint=127.0.0.1,127.0.0.2 // Desteklenmiyor.
ipv4hint="127.0.0.1,127.0.0.2" // Desteklenmiyor.Bu gelecekte değiştirilecektir.
||example.com^$dnsrewrite=NOERROR;MX;32 example.mail, öncelik değeri32ve değişim değeriexample.mailolan birMXkaydı ekler.||example.com^$dnsrewrite=NOERROR;SVCB;32 example.com alpn=h3, birSVCBdeğeri ekler. YukarıdakiHTTPSörneğine bakın.||example.com^$dnsrewrite=NOERROR;TXT;hello_world,hello_worlddeğerine sahip birTXTkaydı ekler.||_svctype._tcp.example.com^$dnsrewrite=NOERROR;SRV;10 60 8080 example.comadds anSRVrecord with priority value10, weight value60, port8080, and target valueexample.com.||example.com^$dnsrewrite=NXDOMAIN;;, birNXDOMAINkodu ile yanıt verir.$dnstype=AAAA,denyallow=example.org,dnsrewrite=NOERROR;;example.orghariç tümAAAAistekleri için boşNOERRORyanıtlarıyla yanıt verir.
Exception rules unblock one or all rules:
@@||example.com^$dnsrewritetüm DNS yeniden yazma kurallarının engelini kaldırır.@@|example.com^$dnsrewrite=1.2.3.4,1.2.3.4değerine sahip birAkaydı ekleyen DNS yeniden yazma kuralının engelini kaldırır.
If you are maintaining a blocklist that is included in AdGuard DNS and AdGuard Home (i.e. included into HostlistsRegistry), $dnsrewrite rules will be automatically filtered out. If these rules are required for your blocklist, please request permission by opening a new issue in the HostlistsRegistry repo.
important
The important modifier applied to a rule increases its priority over any other rule without the modifier. Even over basic exception rules.
Örnekler:
Bu örnekte:
||example.org^$important
@@||example.org^||example.org^$importantistisna kuralına rağmen*.example.orgalan adına gelen tüm istekleri engeller.Bu örnekte:
||example.org^$important
@@||example.org^$importantistisna kuralı da
önemlideğiştiricisine sahiptir, bu nedenle çalışır.
badfilter
The rules with the badfilter modifier disable other basic rules to which they refer. It means that the text of the disabled rule should match the text of the badfilter rule (without the badfilter modifier).
Örnekler:
||example.com$badfilter,||example.comalan adını devre dışı bırakır.@@|example.org^$badfilter,@@|example.org^alan adını devre dışı bırakır.NotThe
badfiltermodifier currently doesn’t work with/etc/hosts-style rules.127.0.0.1 example.org$badfilterwill not disable the original127.0.0.1 example.orgrule.
ctag
The ctag modifier can only be used in AdGuard Home.
It allows to block domains only for specific types of DNS client tags. You can assign tags to clients in the AdGuard Home UI. In the future, we plan to assign tags automatically by analyzing the behavior of each client.
The syntax is:
$ctag=value1|value2|...
If one of client’s tags matches the ctag values, this rule applies to the client. The syntax for exclusion is:
$ctag=~value1|~value2|...
If one of client’s tags matches the exclusion ctag values, this rule doesn’t apply to the client.
Örnekler:
||example.org^$ctag=device_pc|device_phone:device_pcveyadevice_phoneolarak etiketlenmiş istemciler içinexample.orgalan adını engelleyin.||example.org^$ctag=~device_phone:example.orgalan adınıdevice_phoneolarak etiketlenenler hariç tüm istemciler için engelleyin.
The list of allowed tags:
Cihaz türüne göre:
device_audio: ses cihazları.device_camera: kameralar.device_gameconsole: oyun konsolları.device_laptop: dizüstü bilgisayarlar.device_nas: NAS (Ağa Bağlı Depolar).device_pc: bilgisayarlar.device_phone: telefonlar.device_printer: yazıcılar.device_securityalarm: güvenlik alarmları.device_tablet: tabletler.device_tv: televizyonlar.device_other: diğer cihazlar.
İşletim sistemine göre:
os_android: Android.os_ios: iOS.os_linux: Linux.os_macos: macOS.os_windows: Windows.os_other: diğer işletim sistemleri.
Kullanıcı grubuna göre:
user_admin: yöneticiler.user_regular: normal kullanıcılar.user_child: çocuklar.
/etc/hosts biçimi söz dizimi
For each host a single line should be present with the following information:
IP_address canonical_hostname [aliases...]
Fields of the entries are separated by any number of space or tab characters. Text from the # character until the end of the line is a comment and is ignored.
Hostnames may contain only alphanumeric characters, hyphen-minus signs (-), and periods (.). They must begin with an alphabetic character and end with an alphanumeric character. Optional aliases provide for name changes, alternate spellings, shorter hostnames, or generic hostnames (for example, localhost).
Örnek:
# Bu bir yorumdur
127.0.0.1 example.org example.info
127.0.0.1 example.com
127.0.0.1 example.net # bu da bir yorumdur
AdGuard Home'da IP adresleri, bu alan adları için DNS sorgularına yanıt vermek için kullanılır. In Private AdGuard DNS, these addresses are simply blocked.
Yalnızca alan adları söz dizimi
A simple list of domain names, one name per line.
Örnek:
# Bu bir yorumdur
example.com
example.org
example.net # bu da bir yorumdur
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. It is a simple tool that makes it easier to compile a hosts blocklist compatible with AdGuard Home, Private AdGuard DNS or any other AdGuard product with DNS filtering.
Neler yapabiliyor:
Birden fazla kaynaktan tek bir engel listesi derleyin.
Exclude the rules you don’t need.
Ortaya çıkan listeyi temizleyin: kopyalarını çıkarın, geçersiz kuralları kaldırın ve listeyi sıkıştırın.