شما هنوز به سیستم وارد نشده اید.

#1 2016-12-21 11:07:35

morealaz
عضو
از : کرمان
ثبت شده: 2016-03-19
ارسال ها: 293

جلوگیری از DNS Spoofing با استفاده از DNSCrypt

سلام به دوستان
مدتها بود که از موتور جستجوی duckduckgo برای انجام تمامی جستجوهای خودم استفاده می کردم و از کار کردن با اون لذت می بردم. به لطف عزیزان پرتلاش و خستگی ناپذیر کار گروه تعیین مصادیق محتوای مجرمانه (که جا داره همینجا از تلاشهای شبانه روزی این دوستان برای بهبود کیفیت استفاده از اینترنت در کشورمون تشکر کنم) این موتور جستجو فیلتر شد و مجبور شدم دوباره به گوگل روی برگردونم. نکته جالبی که در مورد فیلترینگ این موتور جستجو و خیلی از وب سایت های دیگه وجود داره اینه که فیلترینگ به صورت مسدود کردن query های DNS انجام میشه. اینجا بود که به فکر استفاده از DNSCrypt افتادم.
DNSCrypt در واقع تمام ارتباطات با سرور DNS رو رمزنگاری می کنه و به این صورت امکان دستکاری query های DNS یا همون DNS Spoofing رو از بین میبره.
برای استفاده از DNSCrypt کارهای زیر رو باید انجام داد:
ابتدا بسته های dnscrypt-proxy و dnsmasq رو نصب کنید. بسته dnsmasq برای استفاده از dnscrypt لازم نیست ولی چون این بسته میتونه به عنوان یک سرور DNS محلی کار کنه و سرعت درخواست های شما رو بالاتر ببره، برای همین توصیه میکنم حتما از این بسته استفاده کنید و من ادامه توضیحات رو با فرض استفاده از این برنامه توضیح میدم. برای اطلاعات بیشتر به صفحه های DNSCrypt و Dnsmasq مراجعه کنید. قدم دوم اینه که یک سرور DNS که از DNSCrypt پشتیبانی کنه رو انتخاب کنید. برای اینکار به صفحه dnscrypt-resolvers.csv مراجعه کنید که لیستی از سرورها در اون وجود داره. این لیست در فایل usr/share/dnscrypt-proxy/dnscrypt-resolvers.csv/ هم موجود می باشد ولی صفحه وب ممکنه بروز تر باشه. توصیه میشه از سرورهایی که anycast هستند استفاده کنید. من خودم به عنوان نمونه از سرور dnscrypt.eu-nl استفاده کردم. بعد از اون دستور زیر رو برای ویرایش فایل dnscrypt-proxy.service اجرا کنید:

$ sudo systemctl edit dnscrypt-proxy.service

و محتوای فایل رو برای تنظیم سرور DNS انتخابی به صورت زیر قرار بدید، من این تنظیمات رو برای سرور yandex انجام دادم شما اسم سرور مورد نظر خودتون رو قرار بدید:

[Service]
ExecStart=
ExecStart=/usr/bin/dnscrypt-proxy -R dnscrypt.eu-nl

در قدم بعد فایل dnscrypt-proxy.socket رو با دستور زیر ویرایش کنید:

$ sudo systemctl edit dnscrypt-proxy.socket

و محتویاتش رو به صورت زیر قرار بدید:

[Socket]
ListenStream=
ListenDatagram=
ListenStream=127.0.0.1:5353
ListenDatagram=127.0.0.1:5353

بعد فایل etc/dnsmasq.conf/ رو ویرایش کنید و تنظیمات زیر رو در اون انجام بدید:

no-resolv
server=127.0.0.1#5353
listen-address=127.0.0.1
proxy-dnssec

سپس فایل etc/resolvconf.conf/ رو ویرایش کنید و خط name_servers=127.0.0.1 رو از حالت کامنت خارج کنید و گزینه resolv_conf_options=edns0 رو هم به انتها اضافه کنید تا به صورت زیر در بیاد:

# Configuration for resolvconf(8)
# See resolvconf.conf(5) for details

resolv_conf=/etc/resolv.conf
# If you run a local name server, you should uncomment the below line and
# configure your subscribers configuration files below.
name_servers=127.0.0.1
resolv_conf_options=edns0

اینکار باعث میشه که از سرور محلی شما که با dnsmasq ایجاد کردید استفاده بشه. edns0 باعث افزایش طول مجاز پیغام DNS از ۵۱۲ بایت تا ۴۰۹۶ بایت میشه.
در نهایت دستورات زیر رو برای اجرای این برنامه ها و فعال کردن اونها به هنگام بوت سیستم اجرا کنید:

$ sudo systemctl start dnscrypt-proxy.socket dnsmasq.service
$ sudo systemctl enable dnscrypt-proxy.socket dnsmasq.service

برای بازسازی فایل resolv.conf خودتون و استفاده از این برنامه ها باید اتصال شبکه خودتون رو ریست کنید. اگر از برنامه NetworkManager استفاده میکنید، کافیه دستور زیر رو اجرا کنید:

$ sudo systemctl restart NetworkManager.service

یا به سادگی اتصالتون رو قطع کنید و دوباره وصلش کنید. این کار فقط برای بار اول لازمه و دفعات دیگه که سیستم ریستارت میشه و برنامه ها از زمان بوت ران میشن نیازی به اینکار نیست.
حالا میتونید از یک ارتباط امن DNS استفاده کنید.
مشکل منم حل شد و دوباره دارم از duckduckgo استفاده میکنم. امیدوارم که برای شما هم مفید باشه.

ویرایش:
برای انتخاب سرور به این نکات توجه کنید:
۱- انتخاب سرور های anycast میتونه باعث بهبود قابلیت اطمینان سرور باشه. مانند سرورهای cisco و yandex و fvz-anyone
۲- اگر بخواهید امنیت سیستم خود را بالاتر ببرید میتونید از سرورهایی استفاده کنید که قابلیت DNSSEC رو دارند. این سیستم برای اعتبار سنجی صحت اطلاعات دریافت شده استفاده میشه. برای استفاده از این گزینه علاوه بر انتخاب سروری که از DNSSEC پشتیبانی میکند، بایستی گزینه proxy-dnssec رو به فایل تنظیمات Dnsmasq اضافه کنید و مطمئن شوید که بسته dnssec-anchors در سیستم شما نصب شده باشد.
از جمله سرورهای دارای قابلیت DNSSEC میتوان به dnscrypt.eu-nl و dnscrypt.eu-dk اشاره کرد.
۳− مکانیزم EDNS0 امکان تنظیم طول بسته پاسخ DNS را فراهم می کند. در حالت عادی بسته های DNS دارای حداکثر ۵۱۲ بایت می باشند که با استفاده از EDNS0 طول بسته تا ۴۰۹۶ بایت قابل گسترش است. برای فعال کردن این گزینه بایستی آپشن edns0 به انتهای فایل resolv.conf به صورت زیر اضافه شود:

options edns0

در آرچ به دلیل استفاده از resolvconf برای تولید فایل resolv.conf کافی است به انتهای فایل etc/resolvconf.conf/ عبارت زیر اضافه شود:

resolv_conf_options=edns0

آخرین ویرایش توسط morealaz (2017-01-06 13:57:35)

آفلاین

#2 2016-12-21 13:06:46

AmiNimA
عضو
ثبت شده: 2015-11-27
ارسال ها: 221
وب سایت

پاسخ: جلوگیری از DNS Spoofing با استفاده از DNSCrypt

محشر بود!!! راحت همه چی میاد با https!!!

فقط یه چیزی، من وارد نیستم توی این مفاهیم. این کار از نظر امنیتی اشکالی نداره؟ یعنی باعث ردیابی ما توسط اون سرورها مثل yandex نمیشه؟ و اگر جایی رمز عبوری چیزی وارد کردیم...؟

آخرین ویرایش توسط AmiNimA (2016-12-21 13:20:15)


لینوکس یک فرهنگ است. یک فرهنگ خوب

آفلاین

#3 2016-12-21 15:14:34

morealaz
عضو
از : کرمان
ثبت شده: 2016-03-19
ارسال ها: 293

پاسخ: جلوگیری از DNS Spoofing با استفاده از DNSCrypt

شما query های DNS رو دارید به صورت رمزنگاری شده با سرور مورد نظر DNS انجام میدید. بقیه ترافیک شما ربطی به DNS نداره. قرار نیست اطلاعات دیگه ای مبادله بشه. سرویس DNS یه سرویس جستجوی نام دامنه هست که به شما آدرس IP سرور مربوط به یه نام دامنه رو میده. البته در دنیای IT هیچ چیز مطلق نیست ولی حداقل این نکته وجود داره که ترافیک شما رمزگذاری شده است و کسی نمیتونه query های DNS شما رو دستکاری کنه، مثل کاری که عزیزان ما در کار گروه تعیین مصادیق محتوای مجرمانه انجام میدن. به جز این میشه از DNSSEC هم برای اعتبار سنجی صحت query های DNS استفاده کرد و یک لایه امنیتی دیگه به سیستم خودتون اضافه کنید.

آفلاین

#4 2016-12-21 23:23:43

pharbod
عضو
از : /
ثبت شده: 2016-08-31
ارسال ها: 50
وب سایت

پاسخ: جلوگیری از DNS Spoofing با استفاده از DNSCrypt

اقا عالی بود! عالی!

فقط اول برای من کار نمیکرد تا اینکه IP موجود توی /etc/resolv.conf که روی 192.168.1.1 بود رو به 127.0.0.1 تغییر دادم. مگه فایل /etc/resolvconf.conf نباید اتوماتیک تغییرش میداد؟ بهرحال الان کار میکنه دیگه big_smile

بعد یه سوال، چرا برای سایتهای غیر https کار نمیکنه این قضیه، به نظر میاد نباید براش فرقی بکنه.

آخرین ویرایش توسط pharbod (2016-12-22 00:12:45)

آفلاین

#5 2016-12-22 00:36:09

morealaz
عضو
از : کرمان
ثبت شده: 2016-03-19
ارسال ها: 293

پاسخ: جلوگیری از DNS Spoofing با استفاده از DNSCrypt

فربدجان بسته به اینکه از چه مکانیزمی برای مدیریت شبکه استفاده میکنید به روش های مختلفی میشه فایل resolv.conf رو تنظیم کرد که به سرور DNS محلی شما با آدرس 127.0.0.1 به عنوان اولین سرور DNS اشاره کنه.
اگر از برنامه NetworkManager استفاده می کنید، این برنامه در حالت پیش فرض تنظیمات DNS شما رو همیشه تغییر میده و برای اینکار از برنامه resolvconf استفاده میکنه. برای همین همونجور که در پست اولم توضیح دادم کافیه فایل etc/recolvconf.conf/ رو ویرایش کنید و خط name_servers=127.0.0.1 رو در انتهای فایل از حالت کامنت خارج کنید.
اگر از برنامه dhcpcd استفاده میکنید کافیه فایل etc/resolv.conf.head/ رو بسازید و محتویات اون رو به صورت زیر قرار بدید:

nameserver 127.0.0.1

تا همیشه این سرور به ابتدای فایل resolv.conf اضافه بشه.
اگر از برنامه dhclient استفاده میکنید در فایل etc/dhclient.conf/ خط زیر رو از حالت کامنت خارج کنید:

prepend domain-name-servers 127.0.0.1;

اگر از برنامه netctl استفاده میکنید، در فایل پروفایل مورد استفاده این برنامه از آپشن DNS استفاده نکنید و به صورت دستی مقدار زیر رو به ابتدای فایل resolv.conf خودتون اضافه کنید:

nameserver 127.0.0.1

در مورد اینکه چرا برای سایتهای غیر https کار نمیکنه باید بگم که این برنامه تنها یه ارتباط امن برای انجام پرس و جوهای DNS ایجاد میکنه. ولی اینکه دوستان کارگروه مصادیق از چه مکانیزمی استفاده می کنند فرق میکنه. برای سایتهای https که ارتباط با وب سایت به صورت رمزگذاری شده است و عزیزان کارگروه مصادیق به محتوای ترافیک شما دسترسی ندارند معمولا فیلترینگ به صورت مسدود کردن تنها بخش ارتباط که رمزگذاری شده نیست انجام میشه که اون هم query های DNS هست. برای همینه که وقتی از dnscrypt استفاده میشه این بخش هم رمزگذاری میشه و امکان دستکاری query ها از بین میره. ولی برای سایت هایی که از http استفاده می کنند دیگه ترافیک رمزگذاری شده نیست و دست عزیزانمون در کارگروه مصادیق مجرمانه خدا رو شکر بازه و میتونند کارشون رو به نحو احسند انجام بدهند.

آفلاین

#6 2016-12-22 10:54:13

ehsan_faal
عضو
از : تهران
ثبت شده: 2015-10-02
ارسال ها: 270

پاسخ: جلوگیری از DNS Spoofing با استفاده از DNSCrypt

یه سوال برام پیش اومده:
مگه ۱۲۷.۰.۰.۱ آدرس لوپ بک خود سیستم نیست؟
من همیشه فکر میکردم اولین DNS Server ای که تنظیم میکنیم بایستی همون default gateway باشه.
میشه منو روشن کنید(تازه دارم کلاسای نتورک رو میرم، هنوز اطلاعات زیادی راجع به این مباحث ندارم، شرمنده)


Mahatma Gandhi - The weak can never forgive. Forgiveness is the attribute of the strong

آفلاین

#7 2016-12-22 15:48:40

rahro14
عضو
ثبت شده: 2016-11-13
ارسال ها: 4
وب سایت

پاسخ: جلوگیری از DNS Spoofing با استفاده از DNSCrypt

سلام
باتشکر از مطلب بسیار کاربردی و زیبای شما
فقط اشکالی هست که نمی دونم چطور قابل حل است
مشکل به زمانی برمیگرده که isp به دلیل اتمام حجم یا تعرفه ارتباط شما را محدود میکند در این حالت همه بسته ها فلیتر میشوند ، در این زمان معمولا درخواست های dns  توسط isp هایجک میشوند و به پاسخ اکثر دامنه ها به سایت خودشان منتهی میشود ، ولی اگر طبق آموزش درخواست های دی ان اس را رمزنگاری کرده باشیم ، isp قادر نیست که محتوای بسته های دی ان اس را بخواند که پاسخ دهد لذا اصلا در این شرایط هیچ درخواست dnsی پاسخ داده نمیشود و عملا حتی دسترسی به صفحات خود isp برای تمدیدو.. نداریم.
برای حل کردن این مشکل مجبوریم سرویس های dnsencrypt و سرور محلی و سوکت را غیرفعال کنیم و فایل های resolve را موقتا تصحیح کنیم.
راه حل هایی که به ذهنم رسید :
اگر در فایل resolve  غیر دی ان اس لوکال یک دی ان اس دیگر بگذاریم کار میدهد ؟
اگر بشود از طریق افزونه هایی مثل فاکسی پروکسی برای شرایط غیرعادی یک پراکسی با قوانین عادی تعریف کرد چطور ؟
راه حل آخر هم گفتم یک اسکریپت بنویسم ، در شرایط که اتصال برقرار نیست با یک دستور شرایط را تغییر دهد.

آفلاین

#8 2016-12-22 15:51:10

morealaz
عضو
از : کرمان
ثبت شده: 2016-03-19
ارسال ها: 293

پاسخ: جلوگیری از DNS Spoofing با استفاده از DNSCrypt

ehsan_faal نوشته است که:

یه سوال برام پیش اومده:
مگه ۱۲۷.۰.۰.۱ آدرس لوپ بک خود سیستم نیست؟
من همیشه فکر میکردم اولین DNS Server ای که تنظیم میکنیم بایستی همون default gateway باشه.

اولین DNS سرور میتونه هر سرور دلخواهی که شما میخواهی ازش استفاده کنی باشه. بعضی مواقع gateway پیش فرض سیستم به عنوان سرور DNS هم عمل میکنه ولی کار این دو تا از هم جداست. وظیفه gateway پیش فرض سیستم مسیریابی ترافیک خارج از شبکه محلی سیستم هست و تمام ترافیک خروجی غیر محلی از طریق gateway به خارج از شبکه منتقل میشه که این شامل ترافیک DNS هم میشه. در عوض DNS سرور وظیفه تبدیل نام های دامنه به آدرس IP رو بعهده داره چون کلیه ارتباطات با استفاده از آدرس IP انجام میشه و مسیریابی میشه. اینجا چون ما از برنامه dnsmasq استفاده کردیم در واقع یه سرور DNS محلی داریم که روی خود سیستم ما نصب شده. برای همین آدرس 127.0.0.1 رو برای DNS پیش فرض قرار میدیم تا از این سرور استفاده کنیم. برنامه dnsmasq کارش به این صورت هست که هر درخواست DNS که دریافت میکنه اگر در حافظه cache خودش اون رو داشته باشه که آدرس IP متناظر باهاش رو سریع بر میگردونه، وگرنه از سرور پیش فرض خودش که براش تنظیم کردیم اون رو درخواست میکنه و وقتی که پاسخ رو گرفت اونو در حافظه cache خودش ذخیره میکنه و پاسخ رو بر میگردونه به درخواست اولیه ای که بهش رسیده بود. اینجوری درخواست های بعدی برای اون نام دامنه سریعتر و با استفاده از حافظه cache خودش پاسخ داده میشه.
در واقع در اینجا که ما از dnscrypt استفاده کردیم درخواست DNS ابتدا به dnsmasq میرسه بعد اون درخواست رو به dnscrypt میده و dnscrypt بعد از رمزنگاری درخواست اون رو به سرور پیش فرض خودش که براش تنظیم کردیم ارسال میکنه و بعد از دریافت پاسخ اون رو به dnsmasq تحویل میده و بعد از اون پاسخ به برنامه اولیه درخواست کننده تحویل داده میشه. درخواست های بعدی برای اون نام دامنه از طریق cache برنامه dnsmasq پاسخ داده میشه.
به عنوان نمونه فرض کنید من یه درخواست DNS برای نام دامنه ddg.gg ارسال میکنم:

❯❯❯❯ dig ddg.gg                                                                                                                                                         ~

; <<>> DiG 9.11.0-P1 <<>> ddg.gg
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23442
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;ddg.gg.				IN	A

;; ANSWER SECTION:
ddg.gg.			180	IN	A	184.72.106.52

;; Query time: 244 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Dec 22 14:39:47 IRST 2016
;; MSG SIZE  rcvd: 40

در خروجی میبینید که سرور مورد استفاده 127.0.0.1 هست که همون برنامه dnsmasq خودمونه. چون این نام دامنه قبلا درخواست نشده بود و در حافظه cache برنامه dnsmasq وجود نداره، برای همین dnsmasq باید این نام دامنه رو از سرور پیش فرض خودش درخواست کنه، می بینید که زمان انجام درخواست (Query time) 244 msec شده.
حالا اگر من مجددا همون نام دامنه رو درخواست کنم ببینید چی میشه:

❯❯❯❯ dig ddg.gg                                                                                                                                                         ~

; <<>> DiG 9.11.0-P1 <<>> ddg.gg
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3168
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;ddg.gg.				IN	A

;; ANSWER SECTION:
ddg.gg.			176	IN	A	184.72.106.52

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Dec 22 14:39:51 IRST 2016
;; MSG SIZE  rcvd: 51

این دفعه چون اون نام دامنه در حافظه cache وجود داره درخواست سریع پاسخ داده میشه و Query time ما به مقدار 0 میرسه.

آفلاین

#9 2016-12-22 16:06:33

morealaz
عضو
از : کرمان
ثبت شده: 2016-03-19
ارسال ها: 293

پاسخ: جلوگیری از DNS Spoofing با استفاده از DNSCrypt

rahro14 نوشته است که:

سلام
مشکل به زمانی برمیگرده که isp به دلیل اتمام حجم یا تعرفه ارتباط شما را محدود میکند در این حالت همه بسته ها فلیتر میشوند ، در این زمان معمولا درخواست های dns  توسط isp هایجک میشوند و به پاسخ اکثر دامنه ها به سایت خودشان منتهی میشود ، ولی اگر طبق آموزش درخواست های دی ان اس را رمزنگاری کرده باشیم ، isp قادر نیست که محتوای بسته های دی ان اس را بخواند که پاسخ دهد لذا اصلا در این شرایط هیچ درخواست dnsی پاسخ داده نمیشود و عملا حتی دسترسی به صفحات خود isp برای تمدیدو.. نداریم.
برای حل کردن این مشکل مجبوریم سرویس های dnsencrypt و سرور محلی و سوکت را غیرفعال کنیم و فایل های resolve را موقتا تصحیح کنیم.
راه حل هایی که به ذهنم رسید :
اگر در فایل resolve  غیر دی ان اس لوکال یک دی ان اس دیگر بگذاریم کار میدهد ؟
اگر بشود از طریق افزونه هایی مثل فاکسی پروکسی برای شرایط غیرعادی یک پراکسی با قوانین عادی تعریف کرد چطور ؟
راه حل آخر هم گفتم یک اسکریپت بنویسم ، در شرایط که اتصال برقرار نیست با یک دستور شرایط را تغییر دهد.

هدف اصلی برنامه dnscrypt در واقع جلوگیری از همین دستکاری های درخواست های DNS می باشد. برای این مورد خاص که شما فرمودید به نظر من موقتا سرور DNS سیستم رو تغییر بدید و اشتراک خودتون رو تمدید کنید و دوباره بعد از اون از dnscrypt استفاده کنید. چون این یه مشکل موقتیه که فقط چند وقتی یکبار پیش میاد.
در فایل resolv.conf شما میتونید حداکثر ۲ تا سرور dns قرار بدید که اگر اولی پاسخگو نبود از دومی استفاده بشه. اینو نمیدونم ولی میشه امتحان کرد. میتونید سرور اول رو 127.0.0.1 قرار بدید و سرور دوم رو مثلا سرور گوگل به آدرس 8.8.8.8 که اگر زمانی مثل مورد شما پیش اومد و dnsmasq نتونست با استفاده از dnscrypt پاسخی برگردونه از سرور دومی که رمزنگاری نشده است استفاده بشه و درخواست DNS توسط ISP هایجک بشه و بقیه ماجرا.
افزونه فاکسی پروکسی و افزونه های مشابه دیگه برای ترافیک وب یه پروکسی تنظیم میکنند و ترافیک DNS جدای از ترافیک وب هست و با هم کاری ندارند.

آفلاین

#10 2016-12-23 01:08:00

AmiNimA
عضو
ثبت شده: 2015-11-27
ارسال ها: 221
وب سایت

پاسخ: جلوگیری از DNS Spoofing با استفاده از DNSCrypt

میشه یه اسکریپت هم برای این کار نوشت. مثلا اسکریپتی که به این صورت dnscript on و off باشه. که این تنظیمات رو به حالت اول برگردونه تا بشه تمدید اشتراک اینترنت رو انجام داد. و بعد on کرد و لذت برد


لینوکس یک فرهنگ است. یک فرهنگ خوب

آفلاین

#11 2016-12-23 11:20:38

morealaz
عضو
از : کرمان
ثبت شده: 2016-03-19
ارسال ها: 293

پاسخ: جلوگیری از DNS Spoofing با استفاده از DNSCrypt

کسانی که می خواهند از DNSCrypt در سیستم عامل ویندوز استفاده کنند میتوانند از برنامه Simple DNSCrypt استفاده کنند. این برنامه یک برنامه مدیریت خیلی عالی برای DNSCrypt هست که با اون به راحتی میتونید کلیه مراحل تنظیم dnscrypt رو انجام بدید.
simplednscrypt

آفلاین

#12 2016-12-23 18:39:35

AmiNimA
عضو
ثبت شده: 2015-11-27
ارسال ها: 221
وب سایت

پاسخ: جلوگیری از DNS Spoofing با استفاده از DNSCrypt

آقا برای آندروید هم هست! منتها گوشی باید root باشه و busybox نصب باشه. و برنامه dnscrypt manager pro این کارو انجام میده.


لینوکس یک فرهنگ است. یک فرهنگ خوب

آفلاین

#13 2016-12-24 12:43:28

ehsan_faal
عضو
از : تهران
ثبت شده: 2015-10-02
ارسال ها: 270

پاسخ: جلوگیری از DNS Spoofing با استفاده از DNSCrypt

من همه ی کارهایی که گفتید رو انجام دادم ولی به محض ریست کردن نتورک منیجر ارتباطم قطع میشه و دیگه هیچ ادرسی رو نمیشناسه.
مثلا اگه ۸.۸.۸.۸ رو پینگ کنم ارتباطم وصله ولی اگه گوگل رو پینگ کنم نه.
باید چیکار کنم؟

پ ن ۱:
شرمنده، نمیدونم چی شد ولی الان داره کار میکنه.

پ ن ۲:
الان که دوباره تنظیمات رو چک کردم دیدم که خودش اتوماتیک بعد از اینکه یه بار کانکشنم رو از دست دادم از default gateway داره استفاده میکنه به جای آدرس لوپ بک.
عملا با آدرس ۱۲۷.۰.۰.۱ به عنوان DNS Server نمیتونم هیچ جا رو پینگ کنم.

آخرین ویرایش توسط ehsan_faal (2016-12-24 13:18:20)


Mahatma Gandhi - The weak can never forgive. Forgiveness is the attribute of the strong

آفلاین

#14 2016-12-24 12:49:15

pesarkermooni
عضو
ثبت شده: 2016-12-24
ارسال ها: 4

پاسخ: جلوگیری از DNS Spoofing با استفاده از DNSCrypt

سلام. ببخشید من این تنظیمات رو انجام دادم. ولی به مشکل برخوردم.
۱- اینکه من اوبونتو 16.10 دارم. و اینجا اصلا فایل  etc/resolvconf.conf/ رو ندارم که بخوام ویرایش کنم!
۲- دفعه اول که این تنظیمات رو میزنم همه چی کار میکنه و عالی هستش. سایت ها هم باز میشن. ولی بعد از اینکه یه بار dnscrypt-proxy.service رو restart میکنم دیگه بالا نمیاد و ارور میده. تو ژورنال هم نوشته بود که نمیتونه فایل /usr/bin/dnscrypt-proxy رو پیدا کنه و اجرا کنه!!
اینجا وقتی whereis dnscrypt-proxy رو گرفتم این خروجی رو داد:

dnscrypt-proxy: /usr/sbin/dnscrypt-proxy /usr/share/dnscrypt-proxy /usr/share/man/man8/dnscrypt-proxy.8.gz

و من این آدرس رو جایگزین کردم: /usr/sbin/dnscrypt-proxy
اینطوری دیگه ارور نداد ولی باز هم کار نمیکنه! یعنی انگاری غیر فعاله و مثل قبل از نصبش کار میکنه!
البته وقتی nslookup facebook.com 127.0.0.1 رو میگیرم راحت جواب میده. ولی وقتی میخوام همین فیس بوک رو پینگ کنم آی پی فیلتر رو برام پینگ میکنه!
دستور dig هم به راحتی کار میکنه! ولی عملا سایتی باز نمیشه تو مرورگر sad خروجی dig:

pesar@kermooni:~$ dig facebook.com

; <<>> DiG 9.10.3-P4-Ubuntu <<>> facebook.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56021
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 5

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;facebook.com.			IN	A

;; ANSWER SECTION:
facebook.com.		600	IN	A	157.240.8.35

;; AUTHORITY SECTION:
facebook.com.		26369	IN	NS	a.ns.facebook.com.
facebook.com.		26369	IN	NS	b.ns.facebook.com.

;; ADDITIONAL SECTION:
a.ns.facebook.com.	159939	IN	AAAA	2a03:2880:fffe:c:face:b00c:0:35
a.ns.facebook.com.	129333	IN	A	69.171.239.12
b.ns.facebook.com.	159939	IN	AAAA	2a03:2880:ffff:c:face:b00c:0:35
b.ns.facebook.com.	150857	IN	A	69.171.255.12

;; Query time: 281 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sat Dec 24 11:34:53 IRST 2016
;; MSG SIZE  rcvd: 180

چیکار کنم؟ واقعا تشکر از وقتی که گذاشتین و زحمتی که میکشین. smile

ehsan_faal نوشته است که:

من همه ی کارهایی که گفتید رو انجام دادم ولی به محض ریست کردن نتورک منیجر ارتباطم قطع میشه و دیگه هیچ ادرسی رو نمیشناسه.
مثلا اگه ۸.۸.۸.۸ رو پینگ کنم ارتباطم وصله ولی اگه گوگل رو پینگ کنم نه.
باید چیکار کنم؟

شرمنده، نمیدونم چی شد ولی الان داره کار میکنه.

ایشون هم فکر میکنم مشکل من رو داشته باشن !

آفلاین

#15 2016-12-24 13:24:47

farid
عضو
از : شیراز
ثبت شده: 2016-05-27
ارسال ها: 48

پاسخ: جلوگیری از DNS Spoofing با استفاده از DNSCrypt

* برای اینکه مطمئن بشید DNS سرور شما عوض شده از این سایت کمک بگیرید
https://dnsleaktest.com/
بعد از ورود به سایت دکمه ی standard test را بزنید.
* یکی از راه هایی که از تغییر خودکار محتوای فایل ها جلوگیری میکنه غیر قابل تغییر کردن فایل توسط دستور chattr +i هست.برای مثال
chattr +i /etc/resolv.conf
* گاهی مواقع به دلیل اینکه پورت های مورد نظر شما در حال استفاده هستند این سرویس ها قابل اجرا نیستند پس باید به شکلی پورت ها را مدیریت کنید. نمونه ای از مشکل را در این تاپیک مشاهده بفرمایید
http://bbs.archusers.ir/viewtopic.php?id=913
* یادم میاد اوبونتو به شکل پیشفرض تمام تنظیمات سرویس dnscryp-proxy را انجام داده بود حتی خودش سرور DNS توی سرویس dnscrypt-proxy هم گذاشته بود.فقط کافی بود قسمت ویرایش اتصالات شبکه مقدار 127.0.0.1 را وارد کنی (نه داخل فایل resolv.conf) و سیرویس را ریستارت کنی. 
* نمونه ای از پیکربندی:

systemctl cat dnscrypt-proxy.socket 
# /etc/systemd/system/dnscrypt-proxy.socket
[Unit]
Description=dnscrypt-proxy listening socket

[Socket]
ListenStream=
ListenDatagram=
ListenStream=127.0.0.1:40
ListenDatagram=127.0.0.1:40

[Install]
WantedBy=sockets.target
systemctl cat dnscrypt-proxy.service 
# /etc/systemd/system/dnscrypt-proxy.service
[Unit]
Description=DNSCrypt client proxy
Documentation=man:dnscrypt-proxy(8)
Requires=dnscrypt-proxy.socket
After=network.target
Before=nss-lookup.target

[Install]
Also=dnscrypt-proxy.socket
WantedBy=multi-user.target

[Service]
Type=simple
NonBlocking=true

# Fill in the resolver name with one from dnscrypt-resolvers.csv file
# It is also recommended to create a dedicated system user, for example _dnscrypt
# Additional features, such as ephemeral keys and plugins, can be enabled here as well
ExecStart=/usr/bin/dnscrypt-proxy \
          --resolver-name=dnscrypt.org-fr \
          --user=dnscrypt
tail /etc/dnsmasq.conf 
#conf-dir=/etc/dnsmasq.d

# Include all the files in a directory except those ending in .bak
#conf-dir=/etc/dnsmasq.d,.bak

# Include all files in a directory which end in .conf
#conf-dir=/etc/dnsmasq.d/,*.conf
no-resolv
server=127.0.0.1#40
listen-address=127.0.0.1

آخرین ویرایش توسط farid (2016-12-24 14:03:43)

آفلاین

#16 2016-12-24 14:14:00

pesarkermooni
عضو
ثبت شده: 2016-12-24
ارسال ها: 4

پاسخ: جلوگیری از DNS Spoofing با استفاده از DNSCrypt

من اینارو هم گذاشتم جای تنظیمات خودم ولی مشکل حل نشد!
البته اینکه میفرمایید اوبونتوی من همچین چیزی نداره sad پکیج رو + تنظیماتش رو باید خودمون انجام بدیم.
چیکار کنم حالا؟

آفلاین

#17 2016-12-24 14:25:13

Arcush
Moderator
ثبت شده: 2015-09-15
ارسال ها: 1,285

پاسخ: جلوگیری از DNS Spoofing با استفاده از DNSCrypt

pesarkermooni@ عزیز، این رو هم بخاطر داشته باشید که اگه قرار باشه بیشتر ازین وارد تنظیمات اختصاصی شده اوبونتو بشیم، باید اسم انجمن رو هم تغییر بدیم.

ویرایش: فرصتی به من هم دست داد تا از محمد عزیز بخاطر چنین دانشی تشکر کنم.

آخرین ویرایش توسط Arcush (2016-12-24 14:30:36)

آفلاین

#18 2016-12-24 14:26:41

pesarkermooni
عضو
ثبت شده: 2016-12-24
ارسال ها: 4

پاسخ: جلوگیری از DNS Spoofing با استفاده از DNSCrypt

بله. درسته. ولی فکر میکردم جایی نکته ای داشته باشه که به سادگی رفع بشه. اگه امکانش هست کمک کنین.
آی دی من هم تو تلگرام: @pesarkermooni
تشکر از لطفتون smile

آفلاین

#19 2016-12-24 14:30:16

ehsan_faal
عضو
از : تهران
ثبت شده: 2015-10-02
ارسال ها: 270

پاسخ: جلوگیری از DNS Spoofing با استفاده از DNSCrypt

دوستان به نظرتون یه جای کار نمیلنگه؟
توی تنظیماتی که توی پست اول معرفی شد قرار بر این شد که از پورت ۴۰ لوکال هاست به عنوان DNS Server استفاده بشه، بعد توی پست ۸ که از dig  استفاده شده پورت ۵۳ آدرس لوکال هاست به عنوان  DNS Server  استفاده شده.
از استارتر عزیز خواهش میکنم یکم رفع ابهام کنن.( مشکل من حل شد، نمیدونستم که پورت ۵۳ پورت  DNS هستش، الان فهمیدم و موضوع واسم جا افتاد)

متشکر


پ ن:
مشکل من حل شد، dnsmasq فعال نبود که الان ok شد.
فقط یه سوال دیگه، ما همه ی این کارا رو کردیم که مثلا به ddg دسترسی داشته باشیم، ولی من الان هم که تست میکنم با صفحه ی پیوندها روبرو میشم

آخرین ویرایش توسط ehsan_faal (2016-12-24 14:50:01)


Mahatma Gandhi - The weak can never forgive. Forgiveness is the attribute of the strong

آفلاین

#20 2016-12-24 15:40:30

morealaz
عضو
از : کرمان
ثبت شده: 2016-03-19
ارسال ها: 293

پاسخ: جلوگیری از DNS Spoofing با استفاده از DNSCrypt

چند تا نکته رو بگم که احتمالا مشکل دوستان رفع بشه:
۱- سرویس DNS به صورت پیش فرض از پورت 53 استفاده میکنه و تمام برنامه ها برای انجام Query های خودشون از این پورت استفاده میکنند و سرور های DNS هم بر روی این پورت به  درخواست ها پاسخ میدهند که این شامل برنامه dnscrypt-proxy هم میشه، منتها چونکه ما می خواستیم از برنامه dnsmasq به عنوان سرویس cache برای DNS استفاده کنیم، برای همین در تنظیمات dnscrypt-proxy پورت پیش فرض رو از 53 به 40 تغییر دادیم که پورت 53 در اختیار dnsmaqs بمونه و در عوض در تنظیمات dnsmasq مشخص کردیم که از dnscrypt بر روی پورت 40 به عنوان سرور پیش فرض خودش جهت انجام query های DNS استفاده بکند. اینجوری درخواستها ابتدا به dnsmasq میرسه و اگر اون پاسخ رو در حافظه کش خودش نداشت درخواست رو به dnscrypt-proxy می فرسته و جواب رو از اون میگیره.
2- برای اینکه این تنظیمات کار کنه باید در تنظیمات سیستم مشخص بشه که از dnsmasq که بر روی سیستم لوکال شما نصب شده به عنوان سرور DNS پیش فرض استفاده بشه. تنظیمات مربوط به سرور DNS پیش فرض در لینوکس داخل فایل etc/resolv.conf/ قرار میگیره. به این صورت که داخل این فایل آدرس nameserver پیش فرض سیستم به صورت زیر قرار میگیره:

nameserver 127.0.0.1

آدرس سرور بعد از کلمه nameserver آورده میشه و حداکثر ۲ تا سرور میشه در این فایل قرار داد. بنابراین برای اینکه سرور پیش فرض شما سرور لوکال بشه باید اولین nameserver رو با آدرس 127.0.0.1 قرار بدید.
3- معمولا برای انجام تنظیمات شبکه از برنامه هایی مثل Networkmanager و Dhcpd و غیره استفاده میشه که این برنامه ها خودشون تنظیم سرورهای DNS رو انجام میدهند و محتوای فایل resolv.conf رو تغییر می دهند. برای اینکه این برنامه ها سرور پیش فرض شما رو سرور لوکال قرار بدهند از توضیحاتی که در پست ۵ نوشتم استفاده کنید.
4- در آرچ از فریم ورک resolvconf برای تولید فایل resolv.conf استفاده میشه که با بسته openresolv نصب میشه. این فریم ورک ممکنه در توزیع های دیگه مثل اوبونتو به صورت پیش فرض استفاده نشه.
5- برنامه NetworkManager به صورت پیش فرض سرور های DNS رو تنظیم میکنه و فایل resolv.conf رو تغییر میده. برای اینکار در آرچ از فریم ورک resolvconf استفاده میکنه و همونجور که در پست اولم توضیح دادم اگر فایل تنظیمات برنامه resolvconf رو تغییر بدیم همیشه سرور لوکال به عنوان اولین سرور استفاده میشه. ولی اگر در توزیع شما به هر دلیلی از این فریم ورک استفاده نمیشه با تغییر تنظیمات برنامه NetworkManager میتونید مشکل رو حل کنید. برای اینکار ابتدا فایل تنظیمات پیش فرض NetworkManager رو به آدرس etc/NetworkManager/NetworkManager.conf/ با ویرایشگر متن دلخواهتون باز کنید. سپس در این فایل زیر قسمت [main] مقدار متغیر dns رو برابر none قرار بدهید. به این صورت:

[main]
dns=none

بعد از اون سرویس NetworkManager رو با دستور زیر ریستارت کنید:

sudo systemctl restart NetworkManager.service

اینجوری برنامه Networkmanager دیگه فایل resolv.conf شما رو تغییر نمیده. حالا خودتون فایل etc/resolv.conf/ رو با ویرایشگر متن دلخواهتون باز کنید و محتوای فایل رو به صورت زیر قرار بدهید:

nameserver 127.0.0.1

تا سرور لوکال یه عنوان سرور پیش فرض DNS شما استفاده بشه.
6- حتما مراحلی رو که در پست اول برای راه اندازی برنامه dnscrypt گفتم به ترتیب نوشته شده انجام بدید که سیستم ما به درستی تنظیم بشه.
7- به عنوان یک نکته متفرقه اگر خواستید محتوای یک فایل سرویس مربوط به systemd رو تغییر بدید مثل کاری که ما در اینجا برای فایلهای dnsmasq.service و dnscrypt-proxy.socket انجام دادیم، سعی کنید از دستور systemctl edit برای اینکار استفاده کنید. اینجوری یک فایل override برای سرویس شما ایجاد میشه که از اون استفاده میشه و فایل سرویس اصلی دست نخورده باقی میمونه.

آفلاین

#21 2016-12-31 21:05:31

hurd
عضو
از : همدان
ثبت شده: 2015-12-27
ارسال ها: 118

پاسخ: جلوگیری از DNS Spoofing با استفاده از DNSCrypt

سلام
بسیار عالی و زیبا بود دست درد نکنه

آخرین ویرایش توسط hurd (2017-01-01 19:52:08)


اول قوانین خدا را به طور کامل رعایت کنیم بعد انتظار حمایت کامل رو از خدا داشته باشیم.

آفلاین

#22 2017-01-02 10:54:11

hurd
عضو
از : همدان
ثبت شده: 2015-12-27
ارسال ها: 118

پاسخ: جلوگیری از DNS Spoofing با استفاده از DNSCrypt

سلام
جالب twitter نمیشه ولی +google و facebook می شه شما هم همین تجرب رو دارین


اول قوانین خدا را به طور کامل رعایت کنیم بعد انتظار حمایت کامل رو از خدا داشته باشیم.

آفلاین

#23 2017-01-02 14:56:07

mazhar
عضو
ثبت شده: 2016-08-01
ارسال ها: 227

پاسخ: جلوگیری از DNS Spoofing با استفاده از DNSCrypt

خیلی عالی! یعنی خیلی خیلی عالی! ممنون محمد عزیز بابت این آموزش بی نظیر، با اجازه صفحه ی ویکی رو ایجاد کردم ولی به دلیل کمبود وقت کامل کردنش شاید کمی طول بکشه. smile

آفلاین

#24 2017-01-03 20:58:05

hurd
عضو
از : همدان
ثبت شده: 2015-12-27
ارسال ها: 118

پاسخ: جلوگیری از DNS Spoofing با استفاده از DNSCrypt

سلام
twitter برای من گاهی میاد گاهی نمیاد وهمش در حال لود هستش


اول قوانین خدا را به طور کامل رعایت کنیم بعد انتظار حمایت کامل رو از خدا داشته باشیم.

آفلاین

#25 2017-01-03 22:46:36

morealaz
عضو
از : کرمان
ثبت شده: 2016-03-19
ارسال ها: 293

پاسخ: جلوگیری از DNS Spoofing با استفاده از DNSCrypt

همونجور که در پست های قبلی گفتم DNSCrypt یک فیلتر شکن نیست بلکه مکانیزمی است برای جلوگیری از DNS Spoofing و DNS hijacking که به عنوان یکی از روش های فیلترینگ استفاده می شود. برای برخی سایتها که از این طریق فیلتر شده اند و از پروتکل HTTPS استفاده میکنند جواب میده. بعضی دیگه که به روش های دیگه فیلتر شدند جواب نمیده. حالت ایده آل اینه که کل ترافیک رمزگذاری بشه. اگر وب سایت از HTTPS استفاده کنه DNSCrypt هم ترافیک DNS رو رمزگذاری میکنه. ولی خوب خیلی از وب سایتها هست که با HTTP کار میکنه و نه با HTTPS.
میشه از یک VPN  یا proxy مورد اعتماد و ایمن هم استفاده کرد که اینجوری کل ترافیک رمزگذاری میشه و از مسیر دیگه ای منتقل میشه.
ظاهرا سرویس twitter به جز فیلترینگ از طریق DNS به روش دیگه ای که به نظرم ایجاد اختلال در ارتباط با استفاده از Bandwidth throttling هست فیلتر شده.
برای همین وقتی که می خواهید به وب سایت twitter وصل بشید صفحه فیلترینگ نشون داده نمیشه ولی مرورگر همش در حال تلاش برای وصل شدن به وب سایت و در حال لود هست ولی به دلیل کند شدن ارتباط نمیتونه وصل بشه.
این کار رو برای وب سایت پروژه تور هم انجام دادند و به همین صورت هست.
در این مقاله که فربد عزیز معرفی کردند اطلاعات خوبی در مورد روش های مختلف فیلترینگ در ایران بیان میشه که خوندنش خالی از لطف نیست:
Internet Censorship in Iran: A First Look

آفلاین

پانوشت انجمن

پشتیبانی توسط تیم آرچ لینوکس ایران و نیرو گرفته با FluxBB