Mohammad Parvin
Mohammad Parvin
خواندن ۲ دقیقه·۵ سال پیش

امن کردن درخواست DNS با تانل SSH

بعضی وقتها لازم داریم که درخواست های DNS هم امن باشند

درخواست های DNS چند تا قابلیت بد دارند:

قابل شنود هستند

جواب آنها قابل تغییر هستند


مثلا روی سیستم خودتون بیاید سعی کنید IP دامنه fb.com رو با دستور dig یا nslookup بگیرید

من اینجوری این کار رو انجام میدم

dig fb.com

میبینید IP سرور فیلترینگ رو میاره (همون پیوندها)

10.10.34.35

حالا سعی کنید از سرور گوگل بپرسید IP سایت fb.com چی هست

dig @8.8.8.8 fb.com

این هم که اشتباه میگه

dig @8.8.8.8 fb.com
dig @8.8.8.8 fb.com

حالا وقتی فیلترینگ ایران میتونه این کار رو به سادگی انجام بده، پس یه هکر چی؟

اون هم یقینا میتونه به سادگی این کار رو انجام بده

اگر انجام بده چی میشه؟

اگر یک هکر بتونه اطلاعات دریافتی کلاینت های ما از DNS سرور رو تغییر بده، یعنی عمق فاجعه، میتونه سایت های مشابه سایت هایی که کاربران ما بهشون دسترسی دارند رو درست کنه و فیشینگ و بقیه موارد...

خب راه حلی که بشه جلوی این کار رو گرفت چی هست؟

ما از راه های مختلفی میتونیم استفاده کنیم

یکی از این راهها این هست که DNS سرور داخل شبکه خودمون باشه

یکی دیگه این هست از یه سرور واسط و یک تانل برای امن کردن درخواست های DNS استفاده کنیم


از اونجایی که عشق من تانل های SSH هست، در ادامه این مقاله میخوام سریع یک تانل SSH و یک شبه DNS سرور درست کنم


اول روی لوکال و روی سرور، screen رو نصب کنید

apt install screen
yum install screen
dnf install screen


بعد دستور socat رو در هردو سمت نصب کنید

apt install socat
dnf install socat
yum install socat


داخل سرور یک screen درست کنید

screen -s DNS

حالا داخل اسکرین با دستور socat یک پورت TCP با پورت ۵۳۰۰ درست می کنیم و متصل میکنیم به DNS سرور اصلی (به عنوان مثال اینجا 8.8.8.8 رو گذاشتم)

socat tcp4-listen:5300,reuseaddr,fork UDP:8.8.8.8:53


حالا از روی لوکال یک تانل به سرور می زنیم و پورت 5300 رو به لوکال bind می کنیم:

ssh user@server-ip-address -L 5300:127.0.0.1:5300

با زدن دستور قبل پورت ۵۳۰۰ سرور به ۵۳۰۰ لوکال بایند (bind) میشه

میتونیم تانل رو هم داخل اسکرین بذاریم

حالا یک اسکرین برای dns باز میکنیم

screen -s DNS

و با دستور socat میایم یک پورت UDP راه میندازیم و متصلش میکنیم به پورت ۵۳۰۰ لوکال

socat udf4-listen:53,reuseaddr,fork tcp:localhost:5300


حالا اگر بیایم و دوباره با دستور dig از لوکال خودمون آی پی fb.com رو کوئری بگیریم، میبینیم IP درست رو بر میگردونه اینبار

dig @127.0.0.1 fb.com
dig @127.0.0.1 fb.com
dig @127.0.0.1 fb.com


برای اینکه بتونید از این DNS سرور استفاده کنید باید دقت داشته باشید که حتما 127.0.0.1 رو توی فایل resolv.conf مشخص کنید

vim /etc/resolv.conf
nameserver 127.0.0.1

دقت داشته باشید چیزی که گفتم برای دورزدن فیلترینگ نیست و توقع نداشته باشید بعد از اجرای دستورات بالا سایت فیس بوک براتون باز بشه

این مقاله کوتاه صرفا جهت ایمن کردن ارتباطات DNS از طریق تانل SSH بود ;)

ssh tunneldns serverامن کردنامنیتلینوکس
Senior Sysadmin with hands-on experience with Linux, Bash Scripting, Docker, Python, Galera, Ansible, Git, CI/CD, Automation and DevOps processes
شاید از این پست‌ها خوشتان بیاید