OS:Ubuntu 12.04 64位

صفر、مقدمه

DNS pollution:

آلوده شدن کشِ سرورهای نام دامنه (DNS cache pollution) که با نام DNS cache poisoning نیز شناخته می‌شود یعنی وضعیتی که برخی بسته‌های DNS چه به‌صورت عمدی و چه به‌صورت غیرعمدی تولید می‌شوند، اما باعث می‌گردند نام دامنه به IP نادرست اشاره کند. به طور معمول در اینترنت سرورهای DNS قابل‌اعتماد وجود دارند، با این حال برای کاستن از فشار ترافیک شبکه، اغلب DNS سرورها رکوردهای تبدیل (resolution) را که از سرورهای بالادستی (upstream) گرفته‌اند موقتاً نگه می‌دارند تا دفعه بعد وقتی دستگاه دیگری درخواست حل نام دامنه را کرد، بتوانند فوری پاسخ دهند.

اگر کشِ سرور DNS محلیِ مرتبط با آن دامنه آلوده شود، می‌تواند باعث شود کامپیوترهای داخل شبکه شما را به سرور اشتباه یا به URL/صفحهٔ وب اشتباه هدایت کند. 1

OpenDNS:

OpenDNS برای کاربران شخصی و کسب‌وکارها راه‌حل DNS ارائه می‌دهد. شما می‌توانید یا از سرویس OpenDNS استفاده کنید یا از DNSای که ISP محلی‌تان می‌دهد بهره ببرید. قرار دادن خوشهٔ سرورها در مکان‌های استراتژیک و استفاده از کشِ گستردهٔ دامنه‌ها باعث می‌شود Queryهای DNS بسیار سریع‌تر انجام شوند و در نتیجه سرعت بازیابی/نمایش صفحات بیشتر شود.

گاهی نتیجهٔ پرس‌وجوی DNS توسط سیستم‌عامل یا برنامه‌های روی سیستم شما کش می‌شود؛ بنابراین افزایش سرعت ممکن است در هر بار Query به وضوح دیده نشود. اما اگر نتیجه‌ای در کش محلی وجود نداشته باشد، افزایش سرعتِ Query کاملاً مشخص خواهد بود. از دیگر ویژگی‌ها می‌توان به فیلتر ضد فیشینگ و اصلاح خودکار ورودی (type correction) اشاره کرد. برای نمونه اگر wikipedia.og را وارد کنید، به طور خودکار به wikipedia.org تغییر داده می‌شود.

OpenDNS با جمع‌آوری فهرست سایت‌های مخرب، وقتی کاربر از طریق سرویس آن‌ها به این سایت‌های مخرب دسترسی پیدا می‌کند، آن‌ها را مسدود می‌سازد. OpenDNS اخیراً سرویس ضد فیشینگ (PhishTank) را راه‌اندازی کرده است تا کاربران سراسر دنیا بتوانند سایت‌های فیشینگِ نامطمئن را گزارش دهند و مشاهده کنند.

اما OpenDNS آن‌طور که از اسمش برمی‌آید یک نرم‌افزار متن‌باز نیست؛ یعنی OpenDNS یک پروژهٔ open-source به آن معنا نیست. 2

DNSCrypt چگونه از DNS pollution جلوگیری می‌کند

خیلی ساده بگیم

DNS سنتی به صورت متنِ واضح (plaintext) ارسال می‌شود؛ مثل یک کارت پستال. روی کارت پستال در جای مشخص می‌نویسید شما کی هستید، کارت را به چه کسی می‌فرستید، و دربارهٔ چه اطلاعاتی سؤال دارید. پس فردی که کارت پستال را جابه‌جا می‌کند، می‌تواند آنچه نوشته‌اید را ببیند. اگر خوشش نیاید، می‌تواند کارت پستال شما را بردارد، محتوایش را جعل کند و نسخهٔ تغییر داده‌شده را به شما برگرداند تا شما را فریب بدهد (یا حتی اگر خواست، جلوی رسیدن کارت را بگیرد؛ هرطور که بخواهد).

پاسخ DNS سرور که به شما برمی‌گردد هم دقیقاً همین منطق را دارد.

DNSCrypt اطلاعات DNS را رمزگذاری می‌کند؛ چیزی که روی کارت پستال نوشته می‌شود به زبانی است که شما و خودِ DNS سرور می‌فهمید، اما پستچی و بقیه نمی‌فهمند. بنابراین او فکر می‌کند این فقط یک نامهٔ معمولی است و نامه را بدون تغییر به مقصد می‌رساند.

البته شاید یک روز پستچی‌ها حس کنند «این کارهای DNS سرور خیلی سالم نیست»، و در آن صورت بتوانند برای همهٔ نامه‌های یک سرور مشخص، مقصد را به‌طور کلی خراب‌کاری کنند یا نامه‌ها را دور بیندازند؛ فقط تا الان کاری نکرده‌اند…

دربارهٔ استفاده از TCP هم که در بالا گفته شده: این اصلِ ماجرا نیست، چون DNSCrypt می‌تواند با UDP کار کند. گزینهٔ TCP بیشتر یک قابلیت اضافه است؛ چون در شبکه‌هایی که نرخ از دست رفتن بسته‌ها بالاست، UDP می‌تواند واقعاً دردسرساز شود. 3

Dnsmasq

Dnsmasq یک نرم‌افزار متن‌باز سبک‌وزن است که هم به عنوان DNS forwarder و هم به عنوان DHCP/TFTP server کار می‌کند و با زبان C نوشته شده است. Dnsmasq برای شبکه‌های کوچک مثل LAN خانگی طراحی شده؛ مصرف منابع کم است و پیکربندی‌اش آسان است. پلتفرم‌های پشتیبانی‌شده شامل Debian، Fedora، Smoothwall، IP-Cop، floppyfw، Firebox، LEAF، Freesco، fli4l، CoyoteLinux و Android هستند و علاوه بر آن در سیستم‌های روتر dd-wrt و OpenWrt هم از آن استفاده می‌شود. 4

Ubuntu

Ubuntu (تلفظ بین‌المللی: تلفظ انگلیسی /ʊˈbʊntuː/؛ حدوداً uu-buun-too) یک سیستم‌عامل GNU/Linux است که بیشتر روی برنامه‌های دسکتاپ تمرکز دارد. نام آن از کلمهٔ «ubuntu» در زبان‌های زولو یا خوسا در آفریقای جنوبی گرفته شده (ترجمه: ubantu) و معنی آن «انسانیت» و «وجود من به خاطر وجود دیگران است» می‌باشد؛ مفهومی از ارزش‌های سنتی آفریقا.

Ubuntu توسط Mark Shuttleworth پایه‌گذاری شد. اولین نسخه—4.10—در ۲۰ اکتبر ۲۰۰۴ منتشر گردید و از Debian به عنوان الگوی توسعه استفاده کرد. برخلاف استراتژی ارتقای پایدارِ Debian، Ubuntu هر شش ماه یک نسخهٔ جدید منتشر می‌کند تا کاربران بتوانند در همان زمان نرم‌افزارهای جدید را دریافت و استفاده کنند. هدف توسعهٔ Ubuntu این است که کار با رایانهٔ شخصی ساده‌تر و قابل‌استفاده‌تر شود و در عین حال نسخهٔ سرور نیز برای کاربردهای سازمانی فراهم گردد. هر نسخهٔ جدید Ubuntu معمولاً شامل جدیدترین محیط دسکتاپ GNOME در همان زمان است و غالباً تا یک ماه پس از انتشار GNOME ارائه می‌شود.

در مقایسه با توزیع‌های دیگر مبتنی بر Debian مثل MEPIS، Xandros، Linspire، Progeny و Libranet، Ubuntu به ایدهٔ توسعهٔ Debian نزدیک‌تر است: عمدتاً از نرم‌افزارهای آزاد و متن‌باز استفاده می‌کند، در حالی که سایر توزیع‌ها معمولاً تعداد زیادی نرم‌افزار بسته را هم همراه خود دارند.

Ubuntu روی شاخهٔ ناپایدار Debian بنا شده است؛ چه قالب نرم‌افزار (deb) باشد و چه سیستم مدیریت و نصب نرم‌افزار (Debian Apt). توسعه‌دهندگان Ubuntu تغییرات خود را به صورت لحظه‌ای به جامعهٔ Debian بازخورد می‌دهند، نه اینکه فقط هنگام انتشار نسخهٔ جدید آن را اعلام کنند. در واقع بسیاری از توسعه‌دهندگان Ubuntu هم‌زمان نگهدارندهٔ نرم‌افزارهای اصلی در Debian هستند. با این وجود، Debian و Ubuntu لزوماً کاملاً با هم سازگار نیستند؛ یعنی نصب بسته‌های Debian روی Ubuntu ممکن است مشکلات سازگاری ایجاد کند و برعکس هم همین‌طور.

عملکرد Ubuntu عمدتاً به حمایت شرکت Canonical وابسته است و از سوی دیگر افراد علاقه‌مند داخل جامعهٔ Linux هم کمک می‌کنند. توسعه‌دهندگان اغلب Mark Shuttleworth را با عنوان SABDFL خطاب می‌کنند؛ (اختصار self-appointed benevolent dictator for life یعنی «دیکتاتور مهربانِ مادام‌العمرِ خودتعیین‌شده»). در ۸ ژوئیهٔ ۲۰۰۵، Mark Shuttleworth و Canonical اعلام کردند Ubuntu Foundation تشکیل می‌شود و مبلغ ۱۰ میلیون دلار را به عنوان سرمایهٔ اولیه برای عملیات ارائه دادند. هدف از تشکیل بنیاد این بود که در آینده Ubuntu بتواند به توسعهٔ مستمر ادامه دهد و حمایت دریافت کند، اما تا سال ۲۰۰۶ این بنیاد هنوز وارد فاز اجرایی نشده بود. Mark Shuttleworth توصیف کرد که این بنیاد در واقع سرمایهٔ عملیاتی اضطراری زمانی بوده که Canonical با بحران مالی روبه‌رو شده است.

در نسخه‌های گذشته، کاربران می‌توانستند با سرویس shipit دیسک‌های نصب رایگان دریافت کنند. Ubuntu 6.06 سرویس shipit رایگان داشت، اما در Ubuntu 6.10 نسخهٔ بعدی دیگر دیسک‌های نصبِ ارسال رایگان از طریق shipit ارائه نشد و کاربران فقط می‌توانستند از وب‌سایت فایل ایمیج دیسک را دانلود کنند و خودشان آن را روی دیسک رایت کنند. در زمان انتشار Ubuntu 6.06، خبری مطرح شد که در آینده دیگر برای نسخه‌های غیر LTS سرویس shipit ارائه نخواهد شد؛ اما در زمان معرفی Ubuntu 7.04، سرویس shipit دوباره راه افتاد، با این حال این نسخه هم LTS نبود. پیش از انتشار Ubuntu 11.04، سرویس shipit متوقف شد.

در حال حاضر پنج نسخهٔ دارای پشتیبانی بلندمدت (Long Term Support, LTS) وجود دارد: Ubuntu 6.06، 8.04، 10.04، 12.04 و 14.04. Ubuntu 12.04 و 14.04 هم برای نسخهٔ دسکتاپ و هم سرور، چرخهٔ پشتیبانی ۵ ساله دارند. نسخه‌های LTS قبلی برای دسکتاپ ۳ سال و برای سرور ۵ سال پشتیبانی می‌شدند. 5

فهرست نسخه‌های Ubuntu: 6

فهرست نسخه‌های Ubuntu

شماره نسخه کدنام معنی چینی
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

sudo apt-get install python-software-properties
sudo add-apt-repository ppa:shnatsel/dnscrypt

2、نصب DNSCrypt Proxy

نصب:

sudo apt-get update
sudo apt-get install dnscrypt-proxy

پیکربندی:

چون DNSCrypt به صورت پیش‌فرض پورت 53 دارد و با DNSMasq تداخل پورت ایجاد می‌کند، باید پورت را به عدد دیگری تغییر دهیم؛ مثلاً به 40

/etc/default/dnscrypt-proxy 7 را تغییر دهید، همان خط را پیدا کنید و پورت را به 40 تبدیل کنید. البته می‌توانید پورت دیگری هم انتخاب کنید، فقط کافی است با پورت‌های دیگر سیستم تداخل نداشته باشد:

# What local IP the daemon will listen to, with an optional port. The default port is 53.
local
-address=127.0.0.2:40

تست:

$ 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

توضیح:

DNSCrypt سه حالت اجرا دارد:

حالت خط فرمان: تنظیم دستور اجرا با پارامترها مستقیم در خط فرمان 8

دستورهای پشتیبانی‌شده:

$ 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: اجرای به صورت یک سرویس/فرآیند در پس‌زمینه

از طریق sudo dnscrypt-proxy -d می‌توانید مستقیم اجرا کنید. نیازی به تنظیم هیچ پارامتر خط فرمان نیست؛ تمام پارامترها از فایل پیکربندی /etc/default/dnscrypt-proxy خوانده می‌شود.

حالت سرویس سیستم:حالت پیش‌فرض

بعد از اتمام نصب یا با بالا آمدن سیستم، به طور خودکار اجرا می‌شود. همانند حالت Daemonize، پارامترهای شروع از فایل پیکربندی /etc/default/dnscrypt-proxy خوانده می‌شود

  • توقف:sudo service dnscrypt stop
  • شروع:sudo service dnscrypt start
  • راه‌اندازی مجدد:sudo service dnscrypt restart

2、نصب DNSMasq

نصب:

sudo apt-get update
sudo apt-get -y install dnsmasq

پیکربندی:

فایل پیکربندی /etc/dnsmasq.conf را تغییر دهید. محتوای فایل را می‌توانید طبق نیاز خودتان تنظیم کنید؛ در اینجا عملکرد گزینه‌های مختلف و نکات احتیاطی را جزئیات نمی‌نویسیم. برای جزئیات بیشتر از google 9 استفاده کنید. در اینجا فقط یک خط باید تغییر کند: سرور بالادستی (upstream) مربوط به DNSMasq را به DNSCrypt-Proxy که همین الان تنظیم کردید بگذارید.

آن را پیدا کنید و این‌گونه تغییر دهید:

# 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

تست

توجه داشته باشید که پورت اینجا -p 53 است و با پورت dnscrpyt-proxy که در بخش قبل درباره‌اش گفتیم، -p 40 فرق دارد

$ 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

توضیح:

dnsmasq می‌تواند از upstreamهای دیگر هم استفاده کند، مثلاً معروف‌های 8.8.8.8 و 114.114.114.114. به طور پیش‌فرض dnsmasq روی پورت خارجی گوش می‌دهد، بنابراین لازم نیست به طور خاص IPای که قرار است روی آن گوش بدهد را تنظیم کنید. می‌توانید مستقیم با مراجعه به external IP تست کنید، مثلاً

nslookup g.cn 192.168
.31.139

3、تست اعتبار OpenDNS

به OpenDNS的测试页面 سر بزنید؛ اگر تیک را دیدید یعنی تنظیمات درست انجام شده است. اگر مشکلی داشتید پیام بگذارید :)


1.

آلوده شدن کش DNS، ویکی‌پدیا:https://zh.wikipedia.org/wiki/域名服务器缓存污染↩ 2.

OpenDNS، ویکی‌پدیا:https://zh.wikipedia.org/wiki/OpenDNS↩ 3.

DNSCrypt چه‌طور کار می‌کند؟ چرا جلوی DNS pollution را می‌گیرد؟،知乎:http://www.zhihu.com/question/24253866/answer/29272628↩ 4.

Dnsmasq، ویکی‌پدیا:https://zh.wikipedia.org/wiki/Dnsmasq↩ 5.

Ubuntu، ویکی‌پدیا:https://zh.wikipedia.org/wiki/Ubuntu↩ 6.

لیست نسخه‌های Ubuntu، ویکی‌پدیا:https://zh.wikipedia.org/wiki/Ubuntu发行版列表↩ 7.

این فایل موقع نصب DNSCrypt به طور خودکار ساخته می‌شود ↩ 8.

این روش شروع استاندارد داخل مستندات است. جزئیات را در مستند رسمی ببینید:https://github.com/jedisct1/dnscrypt-proxy#usage↩ 9.

تنظیمات DNSMasq: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↩