Sizlere Dnsmasq ve CloudFlare kullanarak iş ve ev ağlarınız için kendinize özel güvenli DNS çözümleyici kurulumunu göstereceğim. Bunlara ek olarak, reklam, takip yazılımı barındıran ve malware domainleri de engelleyerek reklamsız ve güvenlik internet kullanmaya hemen başlayabilirsiniz.
DNS over HTTPS (DoH) Nedir?
DNS over HTTPS (DoH) ile ilgili daha önce bilgi vermiştim. Bunun için DNS over HTTPS (DoH) ve Firefox Quantum Kullanımı makalemi okuyarak bilgi edinebilirsiniz.
Linux İçin DNS over HTTPS (DoH) Kurulumu
Öncelikle bu rehberimiz Debian ve Ubuntu tabanları işletim sistemleri içindir.
Kullandığımız işletim sistemi derlemesine ve işlemci mimarisine göre gerekli sürümü indirmemiz gerekiyor
- amd64 / x86-64 (64 bit) : https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-amd64.deb
- x86 (32 bit) : https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-386.deb
- ARMv6 : https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-arm.deb
wget komutu ile gerekli kurulum dosyasını indirelim.
wget https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-amd64.deb
Aşağıdaki komut ile kurulumu yapalım.
dpkg -i cloudflared-stable-linux-amd64.deb
Kurulum tamamlandıktan sonra servis ayarlamamız gerekiyor.
/lib/systemd/system/cloudflared.service dosyasını oluşturup aşağıdaki içeriği yapıştralım.
nano /lib/systemd/system/cloudflared.service
cloudflared.service içeriği:
[Unit] Description=cloudflared DNS over HTTPS proxy After=syslog.target network-online.target [Service] Type=simple User=root EnvironmentFile=/etc/default/cloudflared ExecStart=/usr/local/bin/cloudflared proxy-dns $CLOUDFLARED_OPTS Restart=on-failure RestartSec=10 KillMode=process [Install] WantedBy=multi-user.target
Servis olarak tanıtmak için aşağıdaki komut dizesini girelim.
systemctl enable cloudflared systemctl start cloudflared systemctl status cloudflared
En son komut ile servisin çalıştığını gösteren çıktı ile karşılaşmanız gerekiyor.
[email protected]:~# sudo systemctl status cloudflared ● cloudflared.service - cloudflared DNS over HTTPS proxy Loaded: loaded (/lib/systemd/system/cloudflared.service; enabled) Active: active (running) since Fri 2018-11-16 13:17:21 +03; 548ms ago Main PID: 7227 (cloudflared) CGroup: /system.slice/cloudflared.service └─7227 /usr/local/bin/cloudflared proxy-dns --port 5053 --upstream https://mozilla.cloudflare-dns.com/dns-query Nov 16 13:17:21 web systemd[1]: Starting cloudflared DNS over HTTPS proxy... Nov 16 13:17:21 web systemd[1]: Started cloudflared DNS over HTTPS proxy. Nov 16 13:17:21 web cloudflared[7227]: time="2018-11-16T13:17:21+03:00" level=info msg="Adding DNS upstream" url="https://mozilla.cloudflare-dns.c...ns-query" Nov 16 13:17:21 web cloudflared[7227]: time="2018-11-16T13:17:21+03:00" level=info msg="Starting DNS over HTTPS proxy server" addr="dns://localhost:5053" Nov 16 13:17:21 web cloudflared[7227]: time="2018-11-16T13:17:21+03:00" level=info msg="Starting metrics server" addr="127.0.0.1:24419" Hint: Some lines were ellipsized, use -l to show in full.
Eğer CloudFlare yerine başka DoH sunucu kullanmak isterseniz /etc/default/cloudflared dosyasını düzenlemeniz yeterli olacaktır.
[email protected]:~# cat /etc/default/cloudflared # Commandline args for cloudflared CLOUDFLARED_OPTS=--port 5053 --upstream https://mozilla.cloudflare-dns.com/dns-query [email protected]:~#
–upstream kısmında yer alan sunucuyu istediğiniz başka bir DoH sağlayıcı ile değiştirebilirsiniz.
Aşağıda kullanabileceğiniz diğer DoH sağlayıcılar listelenmiştir:
- https://dns.google.com/experimental
- https://doh.cleanbrowsing.org/doh/family-filter/
- https://dns.dnsoverhttps.net/dns-query
- https://doh.crypto.sx/dns-query
- https://doh.securedns.eu/dns-query
Cloudflared servisimiz çalıştığına göre dns çözümleme testi gerçekleştirelim. Servis 5053 portunda çalışmaktadır.
[email protected]:~# dig @localhost -p 5053 www.google.com ; <<>> DiG 9.9.5-9+deb8u16-Debian <<>> @localhost -p 5053 www.google.com ; (2 servers found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20754 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1452 ;; QUESTION SECTION: ;www.google.com. IN A ;; ANSWER SECTION: www.google.com. 164 IN A 172.217.17.36 ;; Query time: 497 msec ;; SERVER: 127.0.0.1#5053(127.0.0.1) ;; WHEN: Fri Nov 16 13:23:06 +03 2018 ;; MSG SIZE rcvd: 73 [email protected]:~#
SERVER: 127.0.0.1#5053(127.0.0.1) kısmında gördüğünüz üzere Cloudflared sorunsuzca çalışmakta ve yanıt vermekte.
Dnsmasq Kurulumu ve DoH Çözümleyicisi
Dnsmasq çok az sistem kaynağı kullanan, önbellekleme yeteneği çok gelişmiş bir DNS, DHCP ve TFTP sunucusudur. DNS sunucusu görevi gördüğü gibi, DNS çözümleyicisi görevi de görmektedir. Bizim için önemli olan şuanda çözümleyici rolüdür :)
Dnsmasq bir sorgu aldığında yukarıdaki döngü gerçekleşmektedir. Öncelikle kendi önbelleğinde ya da DNS sunucu ayarların varsa eğer sonucu iletmektedir. Eğer sonuc yoksa, /etc/hosts dosyasını kontrol eder. Eğer burada varsa sonucu iletir. Eğer sonuç burada da yoksa başka bir DNS çözümleyiciye başvurarak sonucu iletmektedir. İşte biz bu noktada başka çözümleyici olarak DoH kullanıp, yaptığımız sorguları Dnsmasq üzerinde önbellekleyeceğiz.
Aşağıdaki komut ile Dnsmasq kurulumunu yapalım.
apt-get install dnsmasq
Kurulum tamamlandıktan sonra ifconfig ile interface ayarlarımıza bakalım. İnternete çıkış yaptğımız interface adı ve IP adresini not edelim.
Daha sonra ayar dosyasını düzenleyelim.
nano /etc/dnsmasq.conf
Tüm dosyanın içeriğini silelim. Aşağıdaki içeriği yapıştıralım.
resolv-file=/etc/dnsmasq-resolv.conf log-facility=/var/log/dnsmasq.log log-queries domain-needed bogus-priv no-hosts no-resolv dns-forward-max=300 cache-size=10000 #no-negcache neg-ttl=7200 max-cache-ttl=3600 no-poll #conf-file=/usr/share/dnsmasq-base/trust-anchors.conf #dnssec #dnssec-check-unsigned server=127.0.0.1#5053 interface=INTERNETE.CIKAN.INTERFACE listen-address=127.0.0.1 listen-address=INTERNETE.CIKIS.IP.ADRESI bind-interfaces
Daha sonradan /etc/dnsmasq-resolv.conf dosyasını oluşturalım ve içeriğini aşağıkidaki şekilde yapalım.
nano /etc/dnsmasq-resolv.conf
/etc/dmsmasq-resolv.conf içeriği:
nameserver 127.0.0.1#5053
Ayarların uygulanabilmesi için aşağıki komutla Dnsmasq servisini yeniden başlatalım.
service dnsmasq restart
Bu sefer 53 portundaki Dns çözümleyicisini deneyelim.
[email protected]:~# dig @localhost www.google.com.tr ; <<>> DiG 9.9.5-9+deb8u16-Debian <<>> @localhost www.google.com.tr ; (2 servers found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43087 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1452 ;; QUESTION SECTION: ;www.google.com.tr. IN A ;; ANSWER SECTION: www.google.com.tr. 193 IN A 216.58.212.163 ;; Query time: 130 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Fri Nov 16 13:50:58 +03 2018 ;; MSG SIZE rcvd: 79 [email protected]:~#
İlk sorgumuz gördüğünüz üzere 130 milisaniye sürdü. Yukarıda bahsettiğim döngü burada işlemiş bulunuyor. Sorgu geldiğinde Dnsmasq üzerinde kayıtlı bir sorguysa size direkt olarak yanıt veriyor. Eğer yoksa başka resolver sunucusuna isteği yönlendiriyor. Tam olarak bu döngü burada işledi. Ve sorgu geri dönüşü 130 milisaniye sürdü. Aynı sorguyu tekrar çalıştıralım.
[email protected]:~# dig @localhost www.google.com.tr ; <<>> DiG 9.9.5-9+deb8u16-Debian <<>> @localhost www.google.com.tr ; (2 servers found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47432 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;www.google.com.tr. IN A ;; ANSWER SECTION: www.google.com.tr. 64 IN A 216.58.212.163 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Fri Nov 16 13:53:07 +03 2018 ;; MSG SIZE rcvd: 62 [email protected]:~#
Bu sefer 0 milisaniyede cevap aldık. Dnsmasq sorguyu kendi üzerinde tutarak anında bize yanıt vermiş bulunuyor.
Dnsmasq İle Reklamların Engellenmesi
Dnsmasq ile aynı Pi-hole gibi, Adblock gibi reklam engellemeleri yapabilirsiniz. Adblock ve türevi tarayıcı eklentilerine nazaran sadece kurulu olduğu tarayıcı için değil, tüm ağınızdaki cihazlar için kullanabilirsiniz.
https://github.com/notracking/hosts-blocklists adresi günlük olarak reklam barındıran siteleri, adresleri ve zararlı sitelerin listesini güncelliyor. Tek yapmamız gereken bu listeyi Dnsmasq içerisine tanıtmak. Öncelikle /etc/dnsmasq/ klasörünü oluşturup bu listeleri indirelim.
mkdir /etc/dnsmasq/ cd /etc/dnsmasq/ wget https://raw.githubusercontent.com/notracking/hosts-blocklists/master/hostnames.txt -O /etc/dnsmasq/hostnames.txt wget https://raw.githubusercontent.com/notracking/hosts-blocklists/master/domains.txt -O /etc/dnsmasq/domains.txt
Daha sonra /etc/dnsmasq.conf dosyasını düzenleyip aşağıdaki satırları ekleyelim.
conf-file=/etc/dnsmasq/domains.txt addn-hosts=/etc/dnsmasq/hostnames.txt
Ayar dosyasının sön görüntüsü aşağıdaki gibi olacak.
resolv-file=/etc/dnsmasq-resolv.conf log-facility=/var/log/dnsmasq.log log-queries domain-needed bogus-priv no-hosts no-resolv dns-forward-max=300 cache-size=10000 #no-negcache neg-ttl=7200 max-cache-ttl=3600 no-poll #conf-file=/usr/share/dnsmasq-base/trust-anchors.conf #dnssec #dnssec-check-unsigned server=127.0.0.1#5053 interface=INTERNETE.CIKAN.INTERFACE listen-address=127.0.0.1 listen-address=INTERNETE.CIKIS.IP.ADRESI bind-interfaces conf-file=/etc/dnsmasq/domains.txt addn-hosts=/etc/dnsmasq/hostnames.txt
Dosyayı kayıt edip Dnsmasq yeniden başlattıktan sonra reklam engelleyicili Dns sunucumuz kullanıma hazır.
DNS Sunucu Ayarlarını Değiştirme
Dns çözücümüz çalışmaya başladığına göre, ister Windows bağlantı ayarlarından, isterseniz de Modem/Router arayüzünden sunucunuzun public IP adresini DNS sunucunuz olarak göstererek kendi kişisel DNS sunucunuzu kullanmaya başlayabilirsiniz. Size önerim Modem/Router üzerinden DNS ayarını değiştirmeniz yönünde olacaktır. Bu şekilde ağınızda bulunan tüm cihazlar reklamsız ve güvenli dns sunucularınızı kullanmaya başlayacaktır.
Opsiyonel – Reklam Listesinin Otomatik Güncellenmesi
https://github.com/notracking/hosts-blocklists adresindeki reklam listesi her gün (hatta kimi zaman 7-8 saatte bir) güncellenmektedir. Bu güncellemeleri basit bir zamanlanmış görev yazarak günlük olarka kendi sunucunuza uygulayabilirsiniz.
Önceikle root dizini altında blok-guncelle.sh isimli bir dosya oluşturalım.
nano /root/block-guncelle.sh
İçeriğe aşağıdakileri yapıştralım
rm /etc/dnsmasq/* wget https://raw.githubusercontent.com/notracking/hosts-blocklists/master/hostnames.txt -O /etc/dnsmasq/hostnames.txt wget https://raw.githubusercontent.com/notracking/hosts-blocklists/master/domains.txt -O /etc/dnsmasq/domains.txt service dnsmasq restart
Bu komutlar mevcuttaki hostnames.txt ve domains.txt dosyalarını silip, yenilerini indirip, dnsmasq hizmetini yeniden başlatıyor.
Çalışması için gerekli izini verelim.
chmod +x /root/block-guncelle.sh
Crontab ile zamanlanmış görev ekleyelim.
crontab -e
En alt satıra aşağıdaki ekleyelim ve kayıt edip çıkalım.
0 0 * * * sh /root/blok-guncelle.sh >/dev/null 2>&1
Bu zamanlanmış görev her gün 00:00 da oluşturduğumuz bash dosyasını çalıştırıp, reklam fitrelerini güncelleyip, dns hizmetini yeniden başlatacaktır. Bu sayede en güncel reklam engelleme listesini sahip olacaksınız.
Dnsmasq Sorgu Loglarını Gözlemleme
Aşağıdaki komut ile anlık olarak dns sorgularını görebilirsiniz
tail -f /var/log/dnsmasq.log
Aşağıdaki gibi çıktı göreceksiniz.
Nov 16 14:27:45 dnsmasq[7808]: query[PTR] 252.40.185.185.in-addr.arpa from 212.156.106.42 Nov 16 14:27:45 dnsmasq[7808]: forwarded 252.40.185.185.in-addr.arpa to 127.0.0.1 Nov 16 14:27:45 dnsmasq[7808]: reply 185.185.40.252 is web.netkolik.org Nov 16 14:27:45 dnsmasq[7808]: query[A] www.google.com.tr.htsolar.local from 212.156.106.42 Nov 16 14:27:45 dnsmasq[7808]: forwarded www.google.com.tr.htsolar.local to 127.0.0.1 Nov 16 14:27:45 dnsmasq[7808]: reply www.google.com.tr.htsolar.local is NXDOMAIN Nov 16 14:27:45 dnsmasq[7808]: query[AAAA] www.google.com.tr.htsolar.local from 212.156.106.42 Nov 16 14:27:45 dnsmasq[7808]: forwarded www.google.com.tr.htsolar.local to 127.0.0.1 Nov 16 14:27:45 dnsmasq[7808]: reply www.google.com.tr.htsolar.local is NXDOMAIN Nov 16 14:27:45 dnsmasq[7808]: query[A] www.google.com.tr from 212.156.106.42 Nov 16 14:27:45 dnsmasq[7808]: forwarded www.google.com.tr to 127.0.0.1 Nov 16 14:27:45 dnsmasq[7808]: reply www.google.com.tr is 172.217.17.35 Nov 16 14:27:45 dnsmasq[7808]: query[AAAA] www.google.com.tr from 212.156.106.42 Nov 16 14:27:45 dnsmasq[7808]: forwarded www.google.com.tr to 127.0.0.1 Nov 16 14:27:45 dnsmasq[7808]: reply www.google.com.tr is 2a00:1450:400e:804::2003 Nov 16 14:27:57 dnsmasq[7808]: query[PTR] 252.40.185.185.in-addr.arpa from 212.156.106.42 Nov 16 14:27:57 dnsmasq[7808]: cached 185.185.40.252 is web.netkolik.org Nov 16 14:27:57 dnsmasq[7808]: query[A] www.google.com.tr.htsolar.local from 212.156.106.42 Nov 16 14:27:57 dnsmasq[7808]: cached www.google.com.tr.htsolar.local is NXDOMAIN Nov 16 14:27:57 dnsmasq[7808]: query[AAAA] www.google.com.tr.htsolar.local from 212.156.106.42 Nov 16 14:27:57 dnsmasq[7808]: cached www.google.com.tr.htsolar.local is NXDOMAIN Nov 16 14:27:57 dnsmasq[7808]: query[A] www.google.com.tr from 212.156.106.42 Nov 16 14:27:57 dnsmasq[7808]: cached www.google.com.tr is 172.217.17.35 Nov 16 14:27:57 dnsmasq[7808]: query[AAAA] www.google.com.tr from 212.156.106.42 Nov 16 14:27:57 dnsmasq[7808]: cached www.google.com.tr is 2a00:1450:400e:804::2003
Hangi IP adresinden hangi domain için sorgu yapıldığını görebilirsiniz. Dnsmasq üzerinde olmayan kayıtlar görüldüğü gibi forwarded ile bir üst sunucuya iletiliyor. Aynı sorgular tekrarlandığında ise cached yapılan sorgular anında istemciye iletiliyor.
Kendinize özel reklamsız, güvenli DNS sunucunuzu güle güle kullanın :) Her türlü soru ve sorununuzu yorumlarda iletmeyi ihmal etmeyin. İyi günler dilerim.