![Port Knocking در اوبونتو و دبیان Port Knocking در اوبونتو و دبیان](https://asamserver.com/wp-content/uploads/2023/09/How-to-Use-Port-Knocking-in-Linux-to-Secure-SSH-Server.png)
ایجاد امنیت SSH از طریق Port Knocking در اوبونتو و دبیان
شاید در شروع خواندن مقاله این سوال برایتان پیش بیاید که SSH چیست و چه کاربردهایی دارد. پس با یک توضیح مختصر در مورد مفهوم SSH و پروتکل شروع میکنیم. SSH در واقع یک پروتکل امن برای اتصال راه دور به کامپیوتر و یا یک سرور است.
Port Knocking در واقع یک لایه دفاعی با مکانیسم احراز هویت در لینوکس است که با استفاده از پورتهای بسته و ترتیب صحیح port knocking، کاربران مجاز را شناسایی و به آنها اجازه دسترسی به سرور را میدهد. در این روش تمامی پورتهای سرور (حتی آنهایی که در حال استفاده هستند) بسته میشوند و در صورت ارسال درخواست اتصال با ترتیب صحیح port knocking فایروال قوانین خود را به صورت پویا و لحظهای تغییر داده و با باز کردن یک پورت خاص به کاربر اجازه دسترسی میدهد. در این مقاله روش ایجاد امنیت SSH از طریق Port Knocking در اوبونتو و دبیان توضیح داده شده است.
خب چرا به امن بودن آن اشاره کردیم؟ پروتکلی به نام TelNet وجود دارد که کامپیوترها توسط آن به سادگی، بدون نیاز به اینترنت و به صورت لوکال میتوانند باهم ارتباط برقرار کنند ولی ارتباط لوکال برقرار شده از طریق این پروتکل در بلند مدت و یا از طریق شبکه اینترنت جهانی به هیچ وجه امن نیست. در این شرایط است که جای خالی یک پروتکل امن به چشم میخورد.
با نصب SSH جای خالی پروتکل امن را پر میکنیم. پس از خرید سرور مجازی لینوکس، بهترین پروتکل برای اتصال به آن SSH است. حالا برای ایمنتر کردن SSH چکار باید کنیم ؟ راههای مختلفی جهت ایجاد امنیت SSH وجود دارد که در این مقاله روش SSH Port Knocking در اوبونتو و دبیان را توضیح خواهیم داد.
چگونه SSH را از طریق Port Knocking ایمن کنیم؟
حالا پس از نصب پروتکل SSH در استفاده از آن نیز به ایجاد امنیت بیشتری نیاز داریم. یکی از راههای هوشمندانه، ایجاد امنیت SSH از طریق Port Knocking است.
پورت پیش فرضی که اتصال پروتکل SSH روی آن تنظیم میشود پورت 22 است. در روش Port Knocking بصورت معمول تمامی پورتها از دسترس خارج میشوند و شیوهای برای باز شدن یک پورت خاص جهت اتصال در نظر گرفته میشود. فرض کنید سه دکمه داریم که با فشار دادن آنها با ترتیب صحیح، پورت ورود باز میشود و اگر ترتیب فشار دادن حتی یکی از آنها درست نباشد، پورت بسته باقی میماند.
بصورت کلی در شیوه Port Knocking یک سیگنال که همان ترتیب صحیح اتصال به پورتها (یا همان زدن صحیح دکمه ها است) تعریف میکنیم تا فایروال وقتی این سیگنال را دریافت کرد، پورت مورد نظرمان را برای اتصال در دسترس قرار دهد. در اصل تمامی پورتهای اتصال به سرور از دسترس خارج بوده و قابل رویت نیستند و تلاش برای ورود ناموفق خواهد بود. اما ما نوعی تلاش برای ورود به فایروال را به عنوان سیگنالی برای باز کردن یک پورت تعریف میکنیم.
و به این صورت است که IP مورد نظر موفق به کسب دسترسی به سرور از طریق SSH خواهد شد. در این مقاله که از سری مطالب آموزش وصل شدن به سرور مجازی لینوکس است به شما آموزش خواهیم داد تا خودتان پروسه امن کردن SSH در اوبونتو را از طریق Port Knocking طی کرده و یک سیگنال Port Knocking برای پروتکل SSH سرورتان ایجاد کنید.
مراحل ایجاد امنیت SSH از طریق Port Knocking در اوبونتو و دبیان
در ادامه مقاله بصورت گام به گام به تشریح پروسه راهاندازی port knocking برای امنیت SSH اوبونتو و دبیان لینوکس میپردازیم. توجه داشته باشید که برای مخفی کردن پورتهای ورودی سرور و استفاده از Port Knocking باید از طریق کاربری که دسترسی Root دارد اقدام کنید.
گام اول: نصب و تنظیم knockd روی سرور لینوکس
پس از اینکه وارد سرور لینوکس خود شدید، از خط فرمان زیر در محیط ترمینال برای نصب knockd استفاده کنید:
$ sudo apt install knockd
پس از نصب، از طریق دستور زیر با یک نرمافزار Text Editor مثل ادیتور nano فایل knockd.conf را باز کنید.
sudo nano /etc/knockd.conf
حالا در این فایل باید 3 پارامتر را تغییر دهیم.
1. قسمت [openSSH] را در این فایل پیدا کنید. از انجایی که ترتیب knock بر روی پورتهای 7000,8000,9000 تنظیم شده و برای همه مشخص و قابل سواستفاده است، آن را بر روی پورتهای دلخواهتان تنظیم کنید. ترتیبی که انتخاب میکنید همان ترتیبی خواهد بود که برای دسترسی کاربر به سرور برای فایروال تعریف میکنیم. میتوانید پورتهای بیشتری نیز معین کنید. دقت کنید که که نیازی به بازکردن این پورتها نداریم.
2. در کامند iptables پارامتر A- را به I- تغییر دهید. در حالی که کلیه IP های دیگر نمیتوانند به سرور دسترسی داشته باشند، پس از اجرای این iptables توسط knockd هر IP ای که با ترتیب درست عمل knocking را انجام دهد میتواند به سرور دسترسی یابد.
3. برای این که بعد از خروج کاربر پورت باز نماند باید بستن پورت را برای فایروال تعریف کنیم. در قسمت [closeSSH] ترتیب knocking پیشفرض را به مقدار دلخواهتان (مانند 10003,10002,10001) ست کنید. ترتیب جدید ترتیبی خواهد بود که در بستن پورت بعد از خروج کاربر مورد استفاده واقع خواهدشد.
پس از انجام موفقیتآمیز سه عمل بالا، تغییرات را ذخیره کنید و از برنامه خارج شوید. برای دیدن نام اصلی رابط شبکه در سرور دستور زیر را در ترمینال اجرا کنید:
ip addr
فایل کانفیگ دیگری را نیز باید ویرایش کنیم. دستور زیر را در ترمینال اجرا کنید:
$ sudo nano /etc/default/knockd
دنبال خط START_KNOCKD=0 بگردید. برای فعال کردن اتو استارت در هنگام boot کردن سیستم پارامتر 0 را به 1 تغییر دهید (START_KNOCKD=1).
knockd بطور پیشفرض از طریق رابط eth0 ترتیب knocking ها را چک میکند که شاید در سرور شما صدق نکند. برای تغییر این رابط، خط زیر را پیدا کنید:
#KNOCKD_OPTS="-i eth1"
حالا برای تغییر رابط eth1 به رابط پیشفرض سرور خود فقط لازم است که # را پاک کنید.
KNOCKD_OPTS="-i ens18"
تغییرات را ذخیره کنید و فایل را ببندید.
حالا وقت آن است که knockd daemon را run و فعال کنیم. کامندهای زیر را اجرا کنید:
$ sudo systemctl start knockd
$ sudo systemctl enable knockd
برای چک کردن اینکه knockd daemon فعال شده است، کامند زیر را اجرا کنید:
$ sudo systemctl status knockd
گام دوم: بستن پورت ۲۲ در SSH
در گام دوم فرآیند ایمن سازی SSH از طریق Port Knocking در اوبونتو، حالا که knockd را فعال کردهایم، وظیفه باز و بسته کردن پورتها و دادن دسترسی به سرور به عهده knockd است. برای امنیت بیشتر بایستی پورت 22 SSH را در فایروال ببندیم. برای شروع، قوانین و وضعیت فایروال UFW را با کد زیر چک کنید:
$ sudo ufw status numbered
اگر دیدید که پورت 22 SSH بر روی خطوط 3 و 9 (بعنوان مثال) باز است از خطوط زیر برای بستن آنها استفاده کنید:
sudo ufw delete 9
sudo ufw delete 3
دقت کنید که در ابتدا باید لاین با شماره بزرگتر را ببندید.
پس از بستن پورت 22 هرگونه تلاش برای اتصال ریموت به سرور SSH با خطای ‘connection timeout’ مواجه خواهد شد و سرویس SSH به درخواست شما پاسخ نخواهد داد.
گام سوم: اتصال به سرور SSH از طریق Knock Client
جهت تکمیل مراحل راهاندازی port knocking برای حفاظت از ssh در اوبونتو و دبیان باید نحوه کانفیگ کردن کلاینت Knock را یاد بگیرید. بدین منظور با ترتیبی که ست کردهاید عمل Port Knocking را انجام دهید و وارد سرور شوید. در محیط Debian یا Ubuntu با اجرای فرمان زیر knockd daemon را نصب کنید:
$ sudo apt install knockd
بعد از اتمام نصب از طریق اجرای دستور زیر ترتیب knock را ارسال کنید.
$ knock -v server_ip knock_sequence
حالا ترتیب صحیح knock را از کامپیوتر client ارسال کنید تا فایروال سرور را در TCP port 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 بصورت اتوماتیک اعمال باز و بسته کردن پورت را هندل خواهد کرد و به درخواستهای Port Knocking پاسخ خواهد داد.
مزایای ایمن سازی SSH در اوبونتو با روش Port Knocking چیست؟
Port Knocking راهی بسیار ساده، ارزان و در عین حال هوشمندانه برای ایمن سازی SSH است. مهمترین مزیت SSH Port Knocking این است که تمامی پورتها در مقابل پورت اسکنرها ایمن هستند و به عنوان ‘غیرقابل دسترسی’ شناسایی میشوند. دومین مزیت، کاهش قابل توجه مصرف و اشغال پهنای باند توسط حملاتی مانند Brute-Force است.
کارهای باز کردن پورت برای ورود و بستن آن بعد از خروج کاربر بصورت اتوماتیک توسط برنامههای daemon مانند knockd انجام میشوند. همچنین این روش سرور را برای مهاجمین بصورت مخفی درمیآورد.
سخن آخر
در این مطلب چگونگی امن کردن SSH از طریق Port Knocking در اوبونتو و دبیان را آموختید. پیشنهاد میکنیم که به هیچ وجه این روش ایمنسازی را به عنوان تنها استراتژی دفاعی سرور خود در نظر نگیرید و از آن در کنار دیگر روشهای ایمنسازی استفاده کنید.
به صورت مختصر یاد گرفتیم که SSH چیست و Port Knocking کجا به کار میآید. نحوه عملکر Port Knocking را نیز یاد گرفتیم و دیدیم که با رعایت ترتیب صحیح در ارسال درخواست اتصال به پورتها در واقع سیگنالی به فایروال برای بازکردن پورت مخصوص میفرستیم تا بتوانیم از این طریق به سرور دسترسی داشته باشیم.