OS:Ubuntu 12.04 64位
0、Giriş
DNS pollution:
Alan adı sunucusu önbelleğinin kirlenmesi (DNS cache pollution) veya DNS cache poisoning olarak da bilinen durum; bazı DNS paketlerinin kasıtlı ya da kazara üretilip, alan adını yanlış bir IP adresine yönlendirmesidir. Genel olarak internette güvenilir DNS sunucuları bulunur; fakat ağ üzerindeki trafik yükünü azaltmak için DNS sunucuları, üst sunucudan (upstream) gelen çözümleme kayıtlarını çoğu zaman geçici olarak saklar. Böylece bir sonraki sefer başka bir makine alan adı çözümleme istediğinde hızlıca yanıt verebilir.
Eğer ilgili alan adlarına hizmet eden yerel DNS sunucusunun önbelleği kirlenirse, etkilenen LAN içindeki bilgisayarlar yanlış sunucuya ya da yanlış sunucu web sayfasına/URL’sine yönlendirilebilir. 1
OpenDNS:
OpenDNS, hem bireyler hem de işletmeler için DNS çözümleri sunar. Kullanıcılar OpenDNS’in hizmetini kullanmayı ya da yerel ISP’nin sağladığı DNS’i kullanmayı tercih edebilir. Sunucu gruplarını stratejik noktalara yerleştirmek ve yoğun miktarda alan adı önbelleği kullanmak, DNS sorgularının çok daha hızlı tamamlanmasını sağlar; bu da sayfa tarama/erişim hızını artırır.
DNS sorgularının sonuçları bazen yerel işletim sistemi veya uygulamalar tarafından önbelleğe alınır. Bu nedenle hız artışı her sorguda aynı şekilde görünmeyebilir; ancak yerel önbellekte bulunmayan sonuçlar için sorgu hızındaki artış belirgin şekilde gözle görülür. Ayrıca bir anti-phishing filtresi ve giriş düzeltme (type correction) özelliği vardır. Örneğin wikipedia.og yazarsanız otomatik olarak wikipedia.org ile değiştirilir.
Kötü niyetli web sitelerinin listesini toplayarak, kullanıcı bu kötü sitelere servisleri üzerinden eriştiğinde OpenDNS bu siteleri engeller. OpenDNS ayrıca yakın zamanda phishing’e karşı bir servis başlattı (PhishTank); böylece dünya genelindeki kullanıcılar güvenilmez phishing sitelerini raporlayıp inceleyebilir.
OpenDNS, adından da anlaşılacağı üzere açık kaynak (open-source) bir yazılım değildir; yani bir open-source proje değildir. 2
DNSCrypt neden DNS pollution’ı önleyebilir
Basit ve anlaşılır şekilde anlatayım
Geleneksel DNS şifrelenmemiş (plaintext) iletir; tıpkı bir “postakart” gibi. Postakart üzerinde, belirli bir yerde “sen kimsin”, “kime gidiyor”, “hangi bilgi isteniyor” gibi alanları yazarsın. Bu durumda kartı taşıyan kişi senin yazdığını görebilir; memnun değilse, postakartını alıp içeriği değiştirerek sahte bir kopya üretip sana geri gönderebilir (ya da doğrudan bloke edip hiç iletmeyebilir—nasıl davranacağı tamamen niyetine bağlıdır).
Aynı şekilde, DNS sunucusunun sana geri gönderdiği cevap da benzer mantığa sahiptir
DNSCrypt ise DNS bilgisini şifreler. Postakart üzerindeki “yazılar” senin ve DNS sunucusunun anlayacağı bir dille olur; ama postacının ve diğer insanların okuyamayacağı bir dilde görünür. O da bunu sıradan bir mektup sanıp olduğu gibi hedefe gönderir.
Elbette bir gün postacılar “bu DNS sunucusundan çıkan şey pek sağlıklı değil gibi” diye fark edip, o sunucuya ait tüm mektupların hedefini rastgele değiştirebilir ya da tamamen atabilirler; fakat şu an bunu yapmıyorlar…
Üstte TCP kullanımından bahsedilmiş; bu asıl neden değil. Çünkü DNSCrypt UDP ile de çalışabilir. TCP seçeneği temel bir çözümden çok ek bir fonksiyon gibidir; özellikle paket kaybının yüksek olduğu ağ ortamlarında UDP kullanımı daha sorunlu olabilir. 3
Dnsmasq
Dnsmasq, C diliyle yazılmış açık kaynaklı hafif (lightweight) bir DNS yönlendirme (DNS forwarding) yazılımı ve aynı zamanda DHCP/TFTP sunucusudur. Dnsmasq; ev LAN’ı gibi küçük ağlar için tasarlanmıştır: kaynak kullanımı düşüktür ve yapılandırması kolaydır. Desteklenen platformlar arasında Debian, Fedora, Smoothwall, IP-Cop, floppyfw, Firebox, LEAF, Freesco, fli4l, CoyoteLinux ve Android yer alır. Ayrıca dd-wrt ve OpenWrt router sistemlerinde de kullanıldığı görülür. 4
Ubuntu
Ubuntu (Uluslararası fonetik: İngilizce telaffuz /ʊˈbʊntuː/; uu-buun-too) ağırlıklı olarak masaüstü uygulamalara odaklanan bir GNU/Linux işletim sistemidir. İsmi, Güney Afrika’daki Zulu veya Xhosa dilinde geçen “ubuntu” kelimesinden gelir (çeviri: ubuntu). Anlamı “insanlık” ve “benim varlığım herkesin varlığı sayesinde” şeklindedir; Afrika geleneğinden gelen bir değer anlayışını yansıtır.
Ubuntu, Mark Shuttleworth tarafından kurulmuştur. İlk sürüm—4.10—20 Ekim 2004 tarihinde yayınlanmış; geliştirme için Debian temel alınmıştır. Debian’ın daha sağlam yükseltme stratejisinden farklı olarak Ubuntu, her altı ayda bir yeni sürüm yayınlar. Böylece insanlar yeni yazılımları güncel şekilde edinebilir ve kullanabilir. Ubuntu’nun geliştirilme amacı kişisel bilgisayarları daha basit ve kullanışlı hale getirmek ve aynı zamanda kurumsal uygulamalar için sunucu sürümleri de sunmaktır. Ubuntu’nun her yeni sürümü genellikle o dönemdeki en güncel GNOME masaüstü ortamını içerir ve çoğu zaman GNOME yeni bir sürüm çıkardıktan sonraki bir ay içinde yayınlanır.
MEPIS, Xandros, Linspire, Progeny ve Libranet gibi Debian tabanlı diğer Linux dağıtımlarla kıyaslandığında Ubuntu, Debian’ın geliştirme felsefesine daha yakındır. Daha çok özgür ve açık kaynaklı yazılım kullanır; diğer dağıtımlar ise çoğunlukla pek çok kapalı kaynaklı yazılımı beraberinde getirir.
Ubuntu, Debian’ın kararsız (unstable) dalı üzerine kuruludur: yazılım formatı (deb) ve yazılım yönetimi/kurulum sistemi (Debian Apt) dahil. Ubuntu geliştiricileri, yazılım üzerinde yaptıkları değişiklikleri sadece yeni sürüm çıkardıklarında duyurmak yerine Debian topluluğuna anlık olarak geri bildirir. Hatta birçok Ubuntu geliştiricisi aynı zamanda Debian’daki ana yazılımların bakımını da yapar. Ancak Debian ile Ubuntu her zaman tamamen uyumlu değildir: Debian paketlerini Ubuntu’ya kurmak uyumluluk problemleri yaratabilir; bunun tersi de mümkündür.
Ubuntu’nun işleyişi ağırlıklı olarak Canonical şirketinin desteğine dayanır; ayrıca Linux topluluğundan gönüllü kişiler de yardım eder. Ubuntu geliştiricileri, Mark Shuttleworth’u sıkça SABDFL diye anılırlar. (self-appointed benevolent dictator for life ifadesinin kısaltması; yani “kendi atadığı ömür boyu iyi niyetli açık kaynak diktatörü” anlamında). 8 Temmuz 2005 tarihinde Mark Shuttleworth ve Canonical, Ubuntu Foundation’ın kurulduğunu ve başlangıç operasyon sermayesi olarak 10 milyon ABD doları sağlandığını duyurdu. Bu fondasyonun amacı, Ubuntu’nun gelecekte de geliştirilmesini ve destek almasını güvence altına almaktır; ancak 2006’ya kadar bu fon hâlâ tam anlamıyla çalışmaya başlamamıştı. Mark Shuttleworth, fonun Canonical’in finansal bir kriz yaşadığı dönemdeki acil işletme sermayesi olduğunu ifade etti.
Geçmiş sürümlerde kullanıcılar shipit hizmeti üzerinden ücretsiz kurulum diskleri alabiliyordu. Ubuntu 6.06, ücretsiz shipit hizmeti sunuyordu; fakat sonraki Ubuntu 6.10 sürümünde ücretsiz shipit disk gönderimi yoktu. Kullanıcılar sadece web sitesinden disk imajını indirip kayıt ederek kurulum yapabiliyordu. Ubuntu 6.06 çıktığında, ileride uzun süre desteklenmeyen sürümler için shipit’in verilmeyeceğine dair haberler vardı. Fakat Ubuntu 7.04 çıktığında shipit hizmeti tekrar başladı; ancak bu sürüm de long-term destekli (LTS) bir sürüm değildi. Ubuntu 11.04 çıkmadan önce shipit hizmeti durduruldu.
Günümüzde Ubuntu’nun beş adet uzun süreli destek sürümü (Long Term Support, LTS) var: Ubuntu 6.06, 8.04, 10.04, 12.04 ve 14.04. Ubuntu 12.04 ve 14.04 masaüstü ve sunucu sürümleri için 5 yıllık destek döngüsüne sahiptir. Daha önceki LTS sürümlerinde masaüstü 3 yıl, sunucu 5 yıl destekleniyordu. 5
Ubuntu sürüm listesi:6
Ubuntu sürüm listesi
| Sürüm numarası | Kod adı | Çince anlam |
| Ubuntu 4.10 | Warty Warthog | 多疣的疣猪 |
| Ubuntu 5.04 | Hoary Hedgehog | 白发的刺猬 |
| Ubuntu 5.10 | Breezy Badger | 活泼的獾 |
| Ubuntu 6.06 | LTS Dapper Drake | 整洁的公鸭 |
| Ubuntu 6.10 | Edgy Eft | 尖利的小蜥蜴 |
| Ubuntu 7.04 | Feisty Fawn | 烦躁不安的小鹿 |
| Ubuntu 7.10 | Gutsy Gibbon | 胆大的长臂猿 |
| Ubuntu 8.04 | LTS Hardy Heron | 坚强的苍鹭 |
| Ubuntu 8.10 | Intrepid Ibex | 勇敢的野山羊 |
| Ubuntu 9.04 | Jaunty Jackalope | 得意洋洋的怀俄明野兔 |
| Ubuntu 9.10 | Karmic Koala | 幸运的考拉 |
| Ubuntu 10.04 | LTS Lucid Lynx | 清醒的猞猁 |
| Ubuntu 10.10 | Maverick Meerkat | 标新立异的的狐獴 |
| Ubuntu 11.04 | Natty Narwhal | 敏捷的独角鲸 |
| Ubuntu 11.10 | Oneiric Ocelot | 有梦的虎猫 |
| Ubuntu 12.04 | LTS Precise Pangolin | 精准的穿山甲 |
| Ubuntu 12.10 | Quantal Quetzal | 量子的格查尔鸟 |
| Ubuntu 13.04 | Raring Ringtail | 铆足了劲的环尾猫熊 |
| Ubuntu 13.10 | Saucy Salamander | 活泼的蝾螈 |
| Ubuntu 14.04 | LTS Trusty Tahr | 可靠的塔尔羊 |
| Ubuntu 14.10 | Utopic Unicorn | 乌托邦的独角兽 |
1、PPA ayarlama
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:shnatsel/dnscrypt
2、DNSCrypt Proxy’yi kurma
Kurulum:
sudo apt-get update
sudo apt-get install dnscrypt-proxy
Yapılandırma:
DNSCrypt varsayılan portu 53 olduğundan DNSMasq ile port çakışması yaşanacak; bu yüzden portu başka bir değere almalıyız. Örneğin 40’a değiştirebilirsiniz
/etc/default/dnscrypt-proxy 7 içindeki ilgili satırı bulun ve portu 40 olarak değiştirin. İsterseniz başka bir port da kullanabilirsiniz; yeter ki sistemde başka bir port ile çakışmasın:
# What local IP the daemon will listen to, with an optional port. The default port is 53.
local
-address=127.0.0.2:40
Test:
$ sudo service dnscrypt-proxy restart
dnscrypt-proxy stop/waiting
dnscrypt-proxy start/running, process 1561
$ dig g.cn @127.0
.0.2 -p 40
; > DiG 9.8
.1-P1 <<>> g.cn @127.0.0.2 -p 40;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30656
;; flags: qr rd ra; QUERY: 1
, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0
, flags:; udp: 4096;; QUESTION SECTION:
;g.cn. IN A
;; ANSWER SECTION:
g.cn. 227
IN A 203.208.48.148g.cn. 227
IN A 203.208.48.144g.cn. 227
IN A 203.208.48.145g.cn. 227
IN A 203.208.48.146g.cn. 227
IN A 203.208.48.147
;; Query time: 113
msec;; SERVER: 127.0
.0.2#40(127.0.0.2);; WHEN: Sun Aug 23
22:28:37 2015;; MSG SIZE rcvd: 113
Açıklama:
DNSCrypt’in üç çalışma modu vardır:
Komut satırı modu: Başlatma komutunu komut satırında parametrelerle doğrudan ayarlamak 8
Desteklenen komutlar şunlardır:
$ dnscrypt-proxy --help
dnscrypt-proxy 1.4
.0
Options:
-a
--local-address=... # 监听的地址,例如: 127.0.0.1:53 -d
--Daemonize模式 # 守护进程模式 -e
--edns-payload-size=... # 后面略,详情见官方文档[^2] -h --help
-L --resolvers-list=...
-R --resolver-name=...
-l
--logfile=... -m --loglevel=...
-n --max-active-requests=...
-p --pidfile=...
-X --plugin=...
-N --provider-name=...
-k --provider-key=...
-r --resolver-address=...
-u --user=...
-t --test=...
-T --tcp-only
-V --version
Please consult the dnscrypt-proxy(8
) man page for details.
Daemonize modu: Arka planda süreç olarak çalıştırma.
Doğrudan sudo dnscrypt-proxy -d ile başlatabilirsiniz. Komut satırı parametrelerini ayrıca ayarlamanıza gerek yok; tüm parametreler /etc/default/dnscrypt-proxy konfigürasyon dosyasından okunur
Sistem servis modu:varsayılan çalışma modu
Kurulum tamamlandıktan sonra veya sistem başladığında otomatik olarak çalışır. Daemonize moduna benzer şekilde, başlatma parametreleri /etc/default/dnscrypt-proxy konfigürasyon dosyasından okunur
- Durdurma:
sudo service dnscrypt stop - Başlatma:
sudo service dnscrypt start - Yeniden başlatma:
sudo service dnscrypt restart
2、DNSMasq’yi kurma
Kurulum:
sudo apt-get update
sudo apt-get -y install dnsmasq
Yapılandırma:
/etc/dnsmasq.conf konfigürasyon dosyasını değiştirin. Dosya içeriğini ihtiyacınıza göre düzenleyebilirsiniz; burada her bir seçeneğin işlevini ve dikkat noktalarını tek tek ayrıntılandırmayacağız. Ayrıntılar için google 9’a bakın. Bu noktada sadece tek satırı değiştirmeniz gerekiyor: DNSMasq’nin upstream sunucusunu, az önce yapılandırdığınız DNSCrypt-Proxy olarak ayarlayın. İlgili satırı bulun ve şu şekilde değiştirin:
# You can control how dnsmasq talks to a server: this forces
# queries to 10.1.2.3 to be routed via eth1
# server=10.1.2.3@eth1
server=127.0
.0.2#40
Test
Dikkat: burada kullanılacak port -p 53’dir; daha önce anlatılan dnscrpyt-proxy’nin -p 40 portundan farklıdır
$ sudo service dnsmasq restart
Stopped Name Service Cache Daemon: nscd.
* Starting Name Service Cache Daemon nscd [ OK ]
* Restarting DNS forwarder and DHCP server dnsmasq [ OK ]
Stopped Name Service Cache Daemon: nscd.
* Starting Name Service Cache Daemon nscd [ OK ]
$ dig g.cn @127.0
.0.1 -p 53
; > DiG 9.8
.1-P1 <<>> g.cn @127.0.0.1 -p 53;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52188
;; flags: qr rd ra; QUERY: 1
, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0
, flags:; udp: 4096;; QUESTION SECTION:
;g.cn. IN A
;; ANSWER SECTION:
g.cn. 295
IN A 203.208.48.144g.cn. 295
IN A 203.208.48.146g.cn. 295
IN A 203.208.48.148g.cn. 295
IN A 203.208.48.145g.cn. 295
IN A 203.208.48.147
;; Query time: 113
msec;; SERVER: 127.0
.0.1#53(127.0.0.1);; WHEN: Sun Aug 23
22:41:00 2015;; MSG SIZE rcvd: 113
Açıklama:
dnsmasq başka upstream sunucularla da çalışabilir; örneğin ünlü 8.8.8.8 ve 114.114.114.114 kullanılabilir. dnsmasq varsayılan olarak dış portu dinlediği için dinlenecek IP’yi ayrıca ayarlamanıza gerek yoktur. Test için doğrudan external IP üzerinden erişebilirsiniz; örneğin:
nslookup g.cn 192.168
.31.139
3、OpenDNS geçerlilik testi
OpenDNS的测试页面 adresini ziyaret edin; eğer onay işareti (✓) görüyorsanız kurulum başarılı demektir. Sorun varsa yorum bırakın :)
1.
DNS cache pollution, Wikipedia:https://zh.wikipedia.org/wiki/域名服务器缓存污染↩ 2.
OpenDNS, Wikipedia:https://zh.wikipedia.org/wiki/OpenDNS↩ 3.
DNSCrypt’in çalışma mantığı nedir? Neden DNS pollution’u engeller?,知乎:http://www.zhihu.com/question/24253866/answer/29272628↩ 4.
Dnsmasq, Wikipedia:https://zh.wikipedia.org/wiki/Dnsmasq↩ 5.
Ubuntu, Wikipedia:https://zh.wikipedia.org/wiki/Ubuntu↩ 6.
Ubuntu sürüm listesi, Wikipedia:https://zh.wikipedia.org/wiki/Ubuntu发行版列表↩ 7.
Bu dosya DNSCrypt kurulumu sırasında otomatik olarak oluşturulur ↩ 8.
Bu, dokümandaki standart başlatma şeklidir; ayrıntılar için official dokümana bakın:https://github.com/jedisct1/dnscrypt-proxy#usage↩ 9.
DNSMasq yapılandırması:https://www.google.com/search?q=dnsmasq.conf%20%E7%9A%84#newwindow=1&safe=active&q=dnsmasq.conf+%E9%85%8D%E7%BD%AE↩