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
: (attention, old/etc/hosts
-style syntax) in AdGuard Home, respond with1.2.3.4
to queries for theexample.org
domain but not its subdomains. Ö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
,client
değiştiricisidir ve değeri127.0.0.1
'dir.,
değiştiriciler arasındaki sınırlayıcıdır. Ve son olarak,dnstype=A
, değeriA
olandnstype
değiştiricisidir.
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.
dnsrewrite
yanıt değiştiricisine sahip kurallar, AdGuard Home'daki diğer kurallardan daha yüksek önceliğe sahiptir.
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. Bkz. 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.
important
Bir kurala uygulanan önemli
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.
Ö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
badfilter
değiştiricisine sahip kurallar, atıfta bulundukları diğer temel kuralları devre dışı bırakır. Bu, devre dışı bırakılan kuralın metninin badfilter
kuralının metniyle eşleşmesi gerektiği anlamına gelir ( badfilter
değiştiricisi olmadan).
Ö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
ctag
değiştiricisi yalnızca AdGuard Home'da kullanılabilir.
Alan adlarını yalnızca belirli DNS istemci etiketleri türleri için engellemeye olanak tanır. AdGuard Home Kullanıcı Arayüzünde istemcilere etiket atayabilirsiniz. Gelecekte, her istemcinin davranışını analiz ederek etiketleri otomatik olarak atamayı planlıyoruz.
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|...
İstemcinin etiketlerinden biri istisna ctag
değerleriyle eşleşiyorsa, bu kural istemci için geçerli değildir.
Ö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
-style syntax
Her ana makine için aşağıdaki bilgileri içeren tek bir satır bulunmalıdır:
IP_address canonical_hostname [aliases...]
Girdilerin alanları herhangi bir sayıda boşluk veya sekme karakteri ile ayrılır. #
karakterinden satır sonuna kadar olan metin bir yorumdur ve yok sayılır.
Ana makine adları yalnızca alfanümerik karakterler, tire-eksi işaretleri (-
) ve noktalar (,
) içerebilir. Alfabetik bir karakterle başlamalı ve alfasayısal bir karakterle bitmelidirler. İsteğe bağlı takma adlar, ad değişiklikleri, alternatif yazımlar, daha kısa ana makine adları veya genel ana makine adları (örneğin, localhost
) sağlar.
Ö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.
Domains-only syntax
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. AdGuard Home, Özel AdGuard DNS veya DNS filtreli diğer herhangi bir AdGuard ürünü ile uyumlu bir ana makine engel listesi derlemeyi kolaylaştıran basit bir araçtır.
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.