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/hosts
sö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/hosts
giriş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.
/etc/hosts
tarzı bir blok listesi veya birden fazla filtreleme listesi (türüne bakılmaksızın) tutuyorsanız, blok listesi derleme için bir araç sunuyoruz. We named it Hostlist compiler and we use it ourselves to create AdGuard DNS filter.
Temel örnekler
||example.org^
:example.org
alan adına vewww.example.org
gibi tüm alt alan adlarına erişimi engeller.@@|example.org^
:example.org
alan adına ve tüm alt alan adlarına erişim engelini kaldırın.1.2.3.4 example.org
: (dikkat, eski/etc/hosts
biçimi söz dizimi) AdGuard Home'da,example.org
alan adına yönelik sorgulara1.2.3.4
ile yanıt verin ancak alt alan adlarına yanıt vermeyin. Özel AdGuard DNS'de,example.org
alan adına erişimi engelleyin.www.example.org
remains allowed.AdGuard Home'da, bir ana makine için belirtilmemiş IP adresini (
0.0.0.0
) veya yerel bir adresi (127.0.0.1
ve 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.org
alan adını engeller ancak alt alanlarını engellemez.www.example.org
remains allowed.! Here goes a comment
and# 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.org
vetest.example.org
ile eşleşir ancaktestexample.org
ile eşleşmez.^
: ayırıcı karakter. Tarayıcı reklam engellemesinden farklı olarak, ana makine adında ayrılacak hiçbir şey yoktur, dolayısıyla bu karakterin tek amacı ana makine adının sonunu işaretlemektir.|
: 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.org
alan adına karşılık gelir ancakexample.org.com
alan adına karşılık gelmez.|example
,example.org
alan adına karşılık gelir ancaktest.example
alan 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önemli
değ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.important
değ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.1
is theclient
modifier with its value,127.0.0.1
.,
değiştiriciler arasındaki sınırlayıcıdır. And finally,dnstype=A
is thednstype
modifier with its value,A
.
NOT: Bir kural bu belgede listelenmeyen bir değiştirici içeriyorsa, kuralın tamamı yok sayılmalıdır. Bu şekilde, insanlar EasyList veya EasyPrivacy gibi değiştirilmemiş tarayıcı reklam engelleyicilerinin filtre listelerini kullanmaya çalıştıklarında yanlış pozitiflerden kaçınıyoruz.
i̇stemci
client
değiştiricisi, bu kuralın uygulanacağı istemcilerin belirtilmesine izin verir. Bir istemciyi tanımlamanın iki ana yolu vardır:
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.
NOT: AdGuard Home'da şu anda ClientID'ler desteklenmemektedir, yalnızca adlar desteklenmektedir. Eğer ”İstemcim” adında ve ClientID
my-client
olan bir istemci eklediyseniz, değiştiricinizi$client=my-client
yerine$client='İstemcim'
olarak yazın.
Söz dizimi şöyledir:
$client=value1|value2|...
Değerden önce bir ~
karakteri ekleyerek de istemcileri hariç tutabilirsiniz. Bu durumda kural, bu istemcinin DNS isteklerine uygulanmaz.
$client=~value1
İstemci adları genellikle boşluklar veya diğer özel karakterler içerir, bu nedenle adı tırnak içine almalısınız. Hem tek hem de çift ASCII tırnak işaretleri desteklenir. Tırnak işaretlerinden ("
ve '
), virgüllerden (,
) ve dikey çizgilerden (|
) kaçınmak için ters eğik çizgiyi (\
) kullanın.
NOT: 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.org
alan 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.org
alan adını engelleyin. Virgülden (,
) de kaçınılması gerektiğini unutmayın.||example.org^$client=~Mom|~Dad|Kids
:example.org
alan adınıKids
için engelleyin amaMom
veDad
iç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.0
ila192.168.0.255
aralığında olan tüm istemciler içinexample.org
alan adını engelleyin.
denyallow
Alan adlarını engelleme kuralından hariç tutmak için denyallow
değiştiricisini kullanabilirsiniz. Bir kurala birden fazla alan adı eklemek için ayırıcı olarak |
karakterini kullanın.
Söz dizimi şöyledir:
$denyallow=domain1|domain2|...
Bu değiştirici, engelleme kuralımız çok fazla alan adını kapsadığında gereksiz istisna kuralları oluşturmaktan kaçınmaya olanak tanır. Birkaç üst seviye alan adları dışında her şeyi engellemek isteyebilirsiniz. Standart yaklaşımı, yani aşağıdaki gibi kuralları kullanabilirsiniz:
! Her şeyi engelleyin.
/.*/
! Birkaç üst seviye alan adlarının engelini kaldırın.
@@||com^
@@||net^
Bu yaklaşımla ilgili sorun, bu şekilde bu üst seviye alan adlarında (ör. google-analytics.com
) bulunan izleme alan adlarının engelini kaldırmanızdır. Bunu denyallow
ile nasıl çözeceğiniz aşağıda açıklanmıştır:
*$denyallow=com|net
Örnekler:
*$denyallow=com|net
:*.com
ve*.net
dışındaki her şeyi engelleyin.@@*$denyallow=com|net
:*.com
ve*.net
dışındaki her şeyin engelini kaldırın.||example.org^$denyallow=sub.example.org
.example.org
ve*.example.org
alan adlarını engelleyin ancaksub.example.org
alan adını engellemeyin.
dnstype
dnstype
değiştiricisi, bu kuralın tetikleneceği DNS isteğinin veya yanıt türünün belirtilmesine izin verir.
Söz dizimi şöyledir:
$dnstype=value1|value2|...
$dnstype=~value1|~value2|~...
Türlerin adları büyük/küçük harfe duyarlı değildir, ancak gerçek DNS kaynak kaydı (RR) türleri kümesine göre doğrulanır.
İstisna kurallarını dahil etme kurallarıyla birleştirmeyin. Bu:
$dnstype=~value1|value2
şuna eş değerdir:
$dnstype=value2
Örnekler:
||example.org^$dnstype=AAAA
:example.org
alan adının IPv6 adresleri için DNS sorgularını engeller.||example.org^$dnstype=~A|~CNAME
:example.org
için yalnızcaA
veCNAME
DNS sorgularına izin verin ve gerisini engelleyin.
NOT: v0.108.0 sürümünden önce, AdGuard Home yanıt kayıtlarını filtrelemek için yanıt kaydının türünün aksine istek türünü kullanırdı. Bu, A
ve AAAA
isteğindeki yanıtlarda belirli CNAME
kaydına izin verecek kurallar yazamayacağınız anlamına geldiğinden sorunlara neden oldu. Bu özellik v0.108.0 sürümünde değiştirildi, yani şimdi:
||canon.example.com^$dnstype=~CNAME
aşağıdaki yanıtın filtrelenmesini önlemenizi sağlar:
ANSWERS:
-> example.com
canonical name = canon.example.com.
ttl = 60
-> canon.example.com
internet address = 1.2.3.4
ttl = 60
dnsrewrite
dnsrewrite
yanıt değiştiricisi, eşleşen ana bilgisayarlar için DNS isteğine verilen yanıtın içeriğinin değiştirilmesine olanak tanır. AdGuard Home'daki bu değiştiricinin tüm kurallarda çalıştığını, ancak Özel AdGuard DNS'de ise yalnızca özel kurallarda çalıştığını unutmayın.
Rules with the dnsrewrite
response modifier have higher priority than other rules in AdGuard Home and AdGuard DNS.
dnsrewrite
kuralına uyan bir ana makineye yönelik tüm isteklere verilen yanıtlar değiştirilecektir. 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. Bu, ana makinenin dnsrewrite
kuralıyla eşleşmesi durumunda bazı isteklere verilen yanıtların boş (NODATA
) olabileceği anlamına gelir.
Kısa yol söz dizimi şöyledir:
$dnsrewrite=1.2.3.4
$dnsrewrite=abcd::1234
$dnsrewrite=example.net
$dnsrewrite=REFUSED
Anahtar kelimelerin TÜMÜ büyük harfle yazılmalıdır (örn. NOERROR
). Anahtar kelime yeniden yazımları diğerine göre önceliklidir ve uygun bir yanıt kodu ile boş bir yanıtla sonuçlanacaktır.
Tam söz dizimi RCODE;RRTYPE;VALUE
şeklindedir:
$dnsrewrite=NOERROR;A;1.2.3.4
$dnsrewrite=NOERROR;AAAA;abcd::1234
$dnsrewrite=NOERROR;CNAME;example.net
$dnsrewrite=REFUSED;;
NOERROR
yanıt koduna sahip $dnsrewrite
değiştiricisi ayrıca boş RRTYPE
ve VALUE
alanlarına sahip olabilir.
CNAME
özeldir çünkü AdGuard Home ana makineyi çözer ve bilgisini yanıta ekler. Yani, example.net
alan adının IP'si 1.2.3.4
ise ve kullanıcının filtre kurallarında bu varsa:
||example.com^$dnsrewrite=example.net
! Veya:
||example.com^$dnsrewrite=NOERROR;CNAME;example.net
o zaman yanıt şöyle bir şey olacaktır:
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
Ardından, CNAME
yeniden yazılır. 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
iki A
kaydıyla bir yanıtla sonuçlanır.
Örneklerle birlikte şu anda desteklenen RR türleri:
||4.3.2.1.in-addr.arpa^$dnsrewrite=NOERROR;PTR;example.net.
, ters DNS için birPTR
kaydı ekler. DNS sunucusuna1.2.3.4
için yapılan ters DNS istekleriexample.net
alan adı olarak sonuçlanır.NOT: IP ters sırada OLMALIDIR. See RFC 1035.
||example.com^$dnsrewrite=NOERROR;A;1.2.3.4
,1.2.3.4
değerine sahip birA
kaydı ekler.||example.com^$dnsrewrite=NOERROR;AAAA;.
,abcd::1234
değerine sahip birAAAA
kaydı ekler.||example.com^$dnsrewrite=NOERROR;CNAME;example.org
, birCNAME
kaydı ekler. Yukarıdaki açıklamaya bakın.||example.com^$dnsrewrite=NOERROR;HTTPS;32 example.com alpn=h3
, birHTTPS
kaydı ekler. Only a subset of parameter values is supported: values must becontiguous
and, where avalue-list
isexpected
, 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ğeri32
ve değişim değeriexample.mail
olan birMX
kaydı ekler.||example.com^$dnsrewrite=NOERROR;SVCB;32 example.com alpn=h3
, birSVCB
değeri ekler. YukarıdakiHTTPS
örneğine bakın.||example.com^$dnsrewrite=NOERROR;TXT;hello_world
,hello_world
değerine sahip birTXT
kaydı ekler.||_svctype._tcp.example.com^$dnsrewrite=NOERROR;SRV;10 60 8080 example.com
adds anSRV
record with priority value10
, weight value60
, port8080
, and target valueexample.com
.||example.com^$dnsrewrite=NXDOMAIN;;
, birNXDOMAIN
kodu ile yanıt verir.$dnstype=AAAA,denyallow=example.org,dnsrewrite=NOERROR;;
example.org
hariç tümAAAA
istekleri için boşNOERROR
yanıtlarıyla yanıt verir.
İstisna kuralları bir veya tüm kuralların engelini kaldırır:
@@||example.com^$dnsrewrite
tüm DNS yeniden yazma kurallarının engelini kaldırır.@@|example.com^$dnsrewrite=1.2.3.4
,1.2.3.4
değerine sahip birA
kaydı ekleyen DNS yeniden yazma kuralının engelini kaldırır.
AdGuard DNS ve AdGuard Home'a dâhil olan bir engel listesi tutuyorsanız (yani HostlistsRegistry'ye dâhil edildiyse), $dnsrewrite
kuralları otomatik olarak filtrelenecektir. Bu kurallar engel listeniz için gerekliyse, lütfen HostlistsRegistry deposunda yeni bir sorun açarak izin isteyin.
important
Bir kurala uygulanan important
değiştirici, değiştirici olmadan diğer herhangi bir kurala göre önceliğini artırır. Hatta temel istisna kuralları üzerinden bile geçerlidir.
Örnekler:
Bu örnekte:
||example.org^$important
@@||example.org^||example.org^$important
istisna kuralına rağmen*.example.org
alan adına gelen tüm istekleri engeller.Bu örnekte:
||example.org^$important
@@||example.org^$importantistisna kuralı da
önemli
değ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.com
alan adını devre dışı bırakır.@@|example.org^$badfilter
,@@|example.org^
alan adını devre dışı bırakır.NOT:
badfilter
değiştiricisi şu anda/etc/hosts
tarzı kurallarla çalışmıyor.127.0.0.1 example.org$badfilter
orijinal127.0.0.1 example.org
kuralını devre dışı bırakmaz.
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.
Söz dizimi şöyledir:
$ctag=value1|value2|...
İstemcinin etiketlerinden biri ctag
değerleriyle eşleşiyorsa, bu kural istemci için geçerlidir. İstisna söz dizimi şöyledir:
$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_pc
veyadevice_phone
olarak etiketlenmiş istemciler içinexample.org
alan adını engelleyin.||example.org^$ctag=~device_phone
:example.org
alan adınıdevice_phone
olarak etiketlenenler hariç tüm istemciler için engelleyin.
İzin verilen etiketlerin listesi:
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
Her ana makine için aşağıdaki bilgileri içeren tek bir satır bulunmalıdır:
IP_address canonical_hostname [aliases...]
Fields of the entries are separated by any number of space or tab characters. #
karakterinden satır sonuna kadar olan metin bir yorumdur ve yok sayılır.
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. Özel AdGuard DNS'de bu adresler basitçe engellenir.
Yalnızca alan adları söz dizimi
Her satırda bir ad olacak şekilde basit bir alan adları listesi.
Ö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.
İhtiyacınız olmayan kuralları hariç tutun.
Ortaya çıkan listeyi temizleyin: kopyalarını çıkarın, geçersiz kuralları kaldırın ve listeyi sıkıştırın.