ممکن است در ابتدای مطالعه مقاله این سوال برای شما پیش بیاید که SSH چیست و چه کاربردهایی دارد. بنابراین، با توضیح مختصری در مورد مفهوم SSH و پروتکل شروع می کنیم. SSH در واقع یک پروتکل امن برای اتصال از راه دور به کامپیوتر یا سرور است. پس چرا به بی خطر بودن آن اشاره می کنیم؟
Port Knocking در واقع یک روش دفاعی با مکانیزم احراز هویت در سیستمعامل لینوکس است که به کاربران مجاز اجازه دسترسی به سرور را میدهد، با استفاده از پورتهای بسته و ترتیب صحیح Port Knocking. در این روش، همه پورتهای سرور (حتی آنهایی که در حال استفاده هستند) بسته میشوند و در صورت ارسال درخواست اتصال با ترتیب صحیح Port Knocking، فایروال قوانین خود را به صورت پویا و لحظهای تغییر میدهد و پورت مورد نظر را باز میکند. در این مقاله، روش ایجاد امنیت برای SSH از طریق Port Knocking در اوبونتو و دبیان توضیح داده شده است.
پروتکلی به نام TelNet وجود دارد که به کامپیوترها امکان برقراری ارتباط محلی بدون نیاز به اینترنت را میدهد، اما این نوع ارتباط در دراز مدت و از طریق شبکه جهانی اینترنت امنیت کافی را فراهم نمیکند. به همین دلیل، نیاز به پروتکلی امن مطرح میشود.
نصب SSH برای پر کردن این جای خالی و ایجاد ارتباط امن میان دستگاهها موثر است. پس از خرید سرور مجازی با سیستمعامل لینوکس، استفاده از پروتکل SSH به عنوان بهترین راه برای اتصال به آن توصیه میشود. برای افزایش امنیت SSH، روشهای مختلفی وجود دارد که در این مقاله به توضیح روش SSH Port Knocking در اوبونتو و دبیان پرداخته شده است.
نحوه ی ایمن کردن SSH از طریق Port Knocking؟
پس از نصب پروتکل SSH، حالا باید برای افزایش امنیت در هنگام استفاده از آن اقدام کنیم. یک روش هوشمند برای ایجاد امنیت SSH از طریق Port Knocking در اوبونتو وجود دارد.
پورت پیشفرضی که اتصال پروتکل SSH روی آن تنظیم شده است، پورت ۲۲ است. در روش Port Knocking، معمولاً تمام پورتها در دسترس نیستند و یک روش برای باز کردن یک پورت خاص برای اتصال در نظر گرفته میشود. به عنوان مثال، سه دکمه داریم که با فشردن آنها به ترتیب صحیح، درگاه ورودی باز میشود و اگر ترتیب فشار دادن حتی یکی از آنها درست نباشد، درگاه بسته میماند.
در روش Port Knocking، سیگنالی تعریف میکنیم که ترتیب صحیح اتصال به پورتها (یا فشردن صحیح دکمهها) باشد تا زمانی که فایروال این سیگنال را دریافت کرد، پورت مورد نظر را برای اتصال در دسترس قرار دهد. به طور کلی، تمام پورتهای اتصال به سرور دور از دسترس هستند و تلاش برای ورود ناموفق خواهد بود. اما ما نوعی تلاش برای ورود به فایروال را به عنوان سیگنالی برای باز کردن یک پورت تعریف میکنیم.
به این ترتیب، IP مورد نظر از طریق SSH به سرور دسترسی خواهد داشت. در این مقاله که بخشی از سری آموزشهای نحوه اتصال به سرور مجازی لینوکس است، به شما آموزش میدهیم که خودتان از طریق Port Knocking، پروسه ایمنسازی SSH در اوبونتو را طی کنید و سیگنال Port Knocking برای پروتکل SSH ایجاد کنید.
مزایای ایمن سازی SSH در اوبونتو و دبیان با روش Port Knocking چیست؟
Port Knocking یک راه بسیار ساده، ارزان و در عین حال هوشمند برای ایمن سازی SSH است. مهمترین مزیت SSH Port Knocking این است که همه پورت ها از اسکنر پورت ایمن هستند و به عنوان “غیرقابل دسترسی” شناخته می شوند. مزیت دوم کاهش قابل توجه مصرف پهنای باند و اشغال توسط حملاتی مانند Brute-Force است.
وظایف باز کردن درگاه برای ورود و بستن آن پس از خروج کاربر به صورت خودکار توسط برنامه های daemon مانند knockd انجام می شود. همچنین این روش سرور را از دید مهاجمان پنهان می کند.
مراحل ایجاد امنیت SSH از طریق Port Knocking در اوبونتو و دبیان
در ادامه مقاله، گام به گام فرآیند تنظیم پورت knocking برای امنیت SSH در لینوکس اوبونتو و دبیان را شرح خواهیم داد. توجه داشته باشید که برای مخفی کردن پورت های ورودی سرور و استفاده از Port Knocking باید از طریق کاربری که دسترسی روت دارد اقدام کنید.
مرحله ۱: Knockd را روی سرور لینوکس نصب و پیکربندی کنید
هنگامی که به سرور لینوکس خود وارد شدید، از خط فرمان زیر در محیط ترمینال برای نصب knockd استفاده کنید:
$ sudo apt install knockd
پس از نصب فایل knockd.conf را با نرم افزار Text Editor مانند nano editor از طریق دستور زیر باز کنید.
sudo nano /etc/knockd.conf
حال باید ۳ پارامتر را در این فایل تغییر دهیم.
۱٫ بخش [openSSH] را در این فایل پیدا کنید. از آنجایی که ترتیب Knock بر روی پورت های ۷۰۰۰، ۸۰۰۰، ۹۰۰۰ تنظیم شده و برای همه شناخته شده و قابل سواستفاده است، آن را روی پورت های مورد نظر خود تنظیم کنید. ترتیبی که انتخاب می کنید، ترتیبی است که ما برای فایروال برای دسترسی کاربر به سرور تعریف می کنیم. همچنین می توانید پورت های بیشتری را مشخص کنید. توجه داشته باشید که ما نیازی به باز کردن این پورت ها نداریم.
۲٫ در دستور iptables پارامتر A- را به I- تغییر دهید. در حالی که همه IP های دیگر نمی توانند به سرور دسترسی داشته باشند، پس از اجرای این iptables توسط knockd، هر IP که عمل Knock را به ترتیب صحیح انجام دهد می تواند به سرور دسترسی پیدا کند.
۳٫ برای جلوگیری از باز شدن پورت پس از خروج کاربر، باید این مورد را برای فایروال تعریف کنیم. در بخش [closeSSH]، ترتیب پیشفرض Knock را روی مقدار دلخواه خود تنظیم کنید (مانند ۱۰۰۰۳، ۱۰۰۰۲، ۱۰۰۰۱). دنباله جدید دنباله ای خواهد بود که پس از خروج کاربر برای بستن پورت استفاده می شود.
پس از انجام موفقیت آمیز سه اقدام فوق، تغییرات را ذخیره کرده و از اپلیکیشن خارج شوید. برای مشاهده نام اصلی رابط شبکه در سرور، دستور زیر را در ترمینال اجرا کنید:
ip addr
همچنین باید فایل پیکربندی دیگری را ویرایش کنیم. دستور زیر را در ترمینال اجرا کنید:
$ sudo nano /etc/default/knockd
به دنبال خط START_KNOCKD=0 بگردید. برای فعال کردن شروع خودکار هنگام بوت کردن سیستم، پارامتر را از ۰ به ۱ تغییر دهید (START_KNOCKD=1).
به طور پیشفرض، knockd ترتیب knocking را از طریق رابط eth0 بررسی میکند، که ممکن است برای سرور شما اعمال نشود. برای تغییر این رابط، خط زیر را پیدا کنید:
#KNOCKD_OPTS="-i eth1"
حالا برای تغییر رابط eth1 به رابط پیشفرض سرور خود فقط لازم است که # را پاک کنید.
KNOCKD_OPTS="-i ens18"
تغییرات را ذخیره کنید و فایل را ببندید.
حالا نوبت اجرا و فعال کردن knockd daemon است. دستورات زیر را اجرا کنید:
$ sudo systemctl start knockd
$ sudo systemctl enable knockd
برای چک کردن اینکه knockd daemon فعال شده است، کامند زیر را اجرا کنید:
$ sudo systemctl status knockd
گام دوم: بستن پورت ۲۲ در SSH
در گام دوم فرآیند ایمن سازی SSH از طریق Port Knocking در اوبونتو، حالا که knockd را فعال کردهایم، وظیفه باز و بسته کردن پورتها و دادن دسترسی به سرور به عهده knockd است. برای امنیت بیشتر بایستی پورت ۲۲ SSH را در فایروال ببندیم. برای شروع، قوانین و وضعیت فایروال UFW را با کد زیر چک کنید:
$ sudo ufw status numbered
اگر مشاهده کردید که پورت SSH 22 در خطوط ۳ و ۹ باز است (برای مثال)، از خطوط زیر برای بستن آنها استفاده کنید:
sudo ufw delete 9
sudo ufw delete 3
توجه داشته باشید که ابتدا باید خط را با عدد بزرگتر ببندید.
پس از بستن پورت ۲۲، هر گونه تلاش برای اتصال از راه دور به سرور SSH با خطای “زمان اتصال” مواجه می شود و سرویس SSH به درخواست شما پاسخ نمی دهد.
مرحله ۳: از طریق Knock Client به سرور SSH متصل شوید
برای تکمیل مراحل تنظیم پورت knocking برای محافظت از ssh در اوبونتو و دبیان، باید نحوه پیکربندی کلاینت Knock را بیاموزید. برای این منظور Port Knocking را به ترتیبی که تعیین کرده اید انجام دهید و وارد سرور شوید. در محیط دبیان یا اوبونتو، شبح knockd را با اجرای دستور زیر نصب کنید:
$ sudo apt install knockd
بعد از اتمام نصب از طریق اجرای دستور زیر ترتیب knock را ارسال کنید.
$ knock -v server_ip knock_sequence
اکنون برای فعال کردن فایروال سرور در پورت TCP 22، دستور ضربه صحیح را از رایانه مشتری ارسال کنید.
knock -v 10.0.0.104 10001 10002 10003
از طریق knocking با ترتیب صحیح میتوانید از طریق SSH به سرور خود وارد شوید. همچنین با انجام knocking با همان IP، با ترتیبی که برای بستن پورت تعریف کردهاید میتوانید پورت را ببندید.
knock -v 10.0.0.104 10003 10002 10001
از آنجایی که knockd فقط به درخواست های knock ارسال شده به رابط اصلی شبکه پاسخ می دهد، اگر سرور چندین IP داشته باشد و شما درخواست را به یک IP ثانویه ارسال کنید، نمی توانید وارد شوید.
اکنون فرآیند ایجاد امنیت SSH از طریق Port Knocking در اوبونتو را با موفقیت به پایان رسانده اید. از این پس، knockd به طور خودکار باز و بسته شدن پورت را مدیریت می کند و به درخواست های ضربه زدن پورت پاسخ می دهد.
جمع بندی
در این مقاله نحوه ایمن سازی SSH از طریق Port Knocking در اوبونتو و دبیان را یاد گرفتید. پیشنهاد می کنیم این روش امنیتی را تنها استراتژی دفاعی سرور خود در نظر نگیرید و در کنار سایر روش های امنیتی از آن استفاده کنید.
ما به طور خلاصه یاد گرفتیم که SSH چیست و از Port Knocking در کجا استفاده می شود. همچنین نحوه عملکرد Port Knocking را یاد گرفتیم و دیدیم که با رعایت ترتیب صحیح در ارسال درخواست اتصال به پورت ها، در واقع سیگنالی را به فایروال ارسال می کنیم تا یک پورت مخصوص باز شود تا بتوانیم به سرور دسترسی داشته باشیم