آموزش ایمن سازی SSH با استفاده از Port Knocking (در اوبونتو و دبیان)
در این مقاله میخوانید
Port Knocking در SSH چیست؟ Port knocking راهی است که فقط به کاربران قانونی اجازه میدهد به خدمات روی سرور دسترسی داشته باشند. در ادامه این مقاله از وبلاگ پارس پک قصد داریم به آموزش امنیتسازی سرویس SSH با استفاده از Port Knocking بپردازیم. همچنین در مورد نحوه نصب و پیکربندی knockd و تنظیم قانون فایروال بحث خواهیم کرد. پس در ادامه با ما همراه باشید.
راه اندازی Port Knocking برای امنیت سرویس SSH
سرویس SSH بر روی سرور در حال اجرا است، اما پورت SSH توسط قوانین فایروال بسته شده است، بنابراین هیچ کس نمیتواند مستقیماً به SSH port 22 متصل شود. همچنین سرور یک Daemon Knockd را اجرا میکند که توانایی تغییر قانون فایروال و باز کردن موقت پورت SSH port 22 را برای کاربر دارد. البته اگر آن کاربر چند پورت خاص را به صورت متوالی بزند.
بنابراین Knock Sequence به نوعی مانند یک رمز عبور برای پورت SSH است. فقط کاربرانی که حق استفاده از Knock Sequence دارند، امکان استفاده از knocked برای بازکردن پورت SSH را دارند. دقت کنید زمانی که کاربر قانونی میخواهد از سیستم خارج شود، از یک Knock Sequence دیگر برای بستن پورت SSH استفاده میشود.
مراحل راه اندازی Port Knocking در SSH
برای امنیتسازی سرویس SSH بر روی سرور لینوکس با استفاده از پورت Knocking، باید مراحل زیر را به ترتیب دنبال نمایید.
مرحله اول: نصب و پیکربندی Knockd بر روی سرور Debian/Ubuntu
از دستور زیر برای نصب knocked از ریپازیتوری پیشفرض نرم افزار استفاده کنید:
sudo apt-get install knockd
فایل پیکربندی اصلی را با یک تکست ادیتور کامند لاین مانند Nano ادیت کنید:
sudo nano /etc/knockd.conf
شما باید سه مورد را در این فایل تغییر دهید. در بخش [openSSH]، به صورت پیشفرض برای opening knock sequence بر روی 7000،8000،9000 قرار داده شده است. شما میتوانید آن را به صورت دلخواه تغییر دهید.
برای مثال میتوانید آن را بر روی 10001,10002,10003 تنظیم کنید. همچنین میتوانید 4 پورت یا بیشتر را برای sequence تعریف کنید. توجه داشته باشید که شما نیازی به باز کردن این پورتها در فایروال ندارید.
سپس در کامند iptables، عبارت A- را به I- تغییر دهید؛ بنابراین این قانون iptables، اولین rule در قوانین فایروال خواهد بود. orderهای iptables rule chain بسیار اهمیت دارد. هنگامی که شما Right Knock Sequence را ارسال میکنید، Knockd کامند iptables را اجرا میکند تا پورت SSH را فقط برای آدرس IP شما باز کند. توجه داشته باشید که آدرسهای آی پی دیگر هنوز برای اتصال به پورت SSH مجاز نیستند.
اکنون در بخش [closeSSH]، میتوانید Closing Knock Sequence را به صورت دلخواه تغییر دهید. برای مثال میتوانید آن را به 10003,10002,10001 تغییر دهید.
اکنون فایل را ذخیره کنید و آن را ببندید.
در مرحله بعد دستور زیر را اجرا کنید تا نام رابط شبکه اصلیِ سرور، ظاهر شود:
ip addr
در این مثال رابط شبکه اصلی ens18 است. اکنون باید فایل پیکربندی etc/default/knockd/ را ویرایش کنید:
sudo nano /etc/default/knockd
خط زیر را پیدا کنید:
START_KNOCKD=0
0 را به 1 تغییر دهید تا در هنگام بوت شدن سیستم به صورت خودکار فعال شود.
START_KNOCKD=1
Knockd به طور پیش فرض به eth0 متصل است. رابط شبکه سرور شما ممکن است به eth0 متصل نباشد؛ بنابراین باید آن را تغییر دهید. برای انجام این کار خط زیر را پیدا کنید:
#KNOCKD_OPTS="-i eth1"
# را حذف کرده و eth1 را به نام رابط شبکه اصلی بر روی سرور خود تغییر دهید:
KNOCKD_OPTS="-i ens18"
فایل را ذخیره کرده و آن را ببندید. سپس، Knockd Daemon را شروع کنید:
sudo systemctl start knockd
اکنون autostart را فعال کنید:
sudo systemctl enable knockd
وضعیت knockd را بررسی کنید و ببینید آیا در حال اجراست یا خیر.
systemctl status knockd
مرحله دوم: SSH Port 22 را ببندید
برای بستن SSH port 22 در UFW firewall، ابتدا باید قوانین فعلی فایروال (Current Firewall Rules) را لیست کنید:
sudo ufw status numbered
همانطور که مشاهده میکنید rule اول و سوم پورت SSH را باز میکنند. برای بستن TCP port 22، این دو قانون را حذف کنید:
sudo ufw delete 3
sudo ufw delete 1
توجه: به این نکته دقت کنید که ابتدا باید rule را با یک عدد شاخص بزرگتر حذف کنید. برای مثال ما باید rule 3 را قبل از 1 حذف کنیم.
اکنون اگر بخواهید SSH را روی سرور خود امتحان کنید، سرویس SSH به ریکوئست شما پاسخ نخواهد.
مرحله سوم: استفاده از Knock Client برای Send Knock Sequence
Knockd Daemon با یک Knock Client به نام Knock باندل شده است. بنابراین بر کلاینتِ Debian یا Ubuntu خود، میتوانید آن را با اجرای دستور زیر نصب کنید:
sudo apt-get install knockd
به منظور راهاندازی فایروال سرور بر TCP port 22، به ارسال Knock Sequence صحیح از کامپیوتر کلاینت نیاز دارید:
knock -v 10.0.0.104 10001 10002 10003
در این مرحله خروجی زیر را مشاهده خواهید کرد:
hitting tcp 10.0.0.104:10001 hitting tcp 10.0.0.104:10002 hitting tcp 10.0.0.104:10003
اگر تاخیر زیادی بین Client و سرور شما وجود داشته باشد، تلاش برای Knock ممکن است با شکست مواجه شود. اگر پورت SSH همچنان بسته است، ممکن است لازم باشد که Knock Sequence را چندین بار ارسال کنید.
هنگامی که Knock با موفقیت انجام شد، میتوانید SSH را استفاده کنید. بعد از تمام کارهایی که انجام دادید، میتوانید از Port Knocking برای بستن پورت SSH آیپی خود استفاده کنید:
knock -v 10.0.0.104 10003 10002 10001
توجه داشته باشید که Knockd فقط به Knock Sequence ارسال شده به رابط اصلی شبکه (معروف به آدرس IP اصلی) پاسخ میدهد. اگر سرور چندین آدرس آی پی داشته باشد و شما سعی کنید Knock Sequence را روی آدرس IP دیگری ارسال کنید، Knockd نمی تواند پورت SSH را باز کند.
نحوه ریستارت خودکار Knockd
اگر اجرای Knockd Daemon متوقف شود، نمیتوانید SSH را وارد کنید. برای جلوگیری از این اتفاق، شما میتوانید یک Cron Job ایجاد کنید تا بهطور خودکار Knockd را هر ساعت یکبار ریستارت کنید. برای انجام این کار به صورت زیر عمل نمایید.
نخست باید فایل Crontab یوزرِ روت را ادیت کنید:
sudo crontab -e
سپس خط زیر را به فایل اضافه کنید.
@hourly systemctl restart knockd
در نهایت فایل را ذخیره کنید و ببندید.
اگر Knockd متوقف شود، همچنان میتوانید با استفاده از کنسول web-based ارائه دهنده هاست به سرور خود دسترسی داشته باشید. سپس میتوانید به صورت دستی Knockd را شروع کنید. بنابراین دوباره به SSH دسترسی خواهید داشت.
ورود بدون رمز عبور SSH
با فعال کردن احراز هویت کلید عمومی (ورود بدون رمز عبور) میتوانید امنیت سرویس SSH خود را بیشتر تقویت کنید.
جمعبندی راه اندازی port knocking
راه اندازی Port Knocking در SSH؛ همانطور که پیشتر گفته شد، Knock Sequence مانند یک رمز عبور برای پورت SSH است. فقط کاربران مجاز با Knock Sequence مناسب میتوانند برای باز کردن پورت SSH آن را فعال کنند. امیدوارم این آموزش به شما کمک کرده باشد که پورت knocking را در سرور اوبونتو/دبیان تنظیم کنید.
سوالات متداول
1. Port Security چه میکند؟
Port Security با جلوگیری از فوروارده پکتها توسط دستگاههای ناشناس، به ایمنسازی شبکه کمک میکند. هنگامی که یک لینک از کار میافتد، تمام آدرسهای قفلشده به صورت داینامیک آزاد میشوند. با امنیت پورت میتوانید تعداد آدرسهای MAC را در یک پورت معین محدود کنید.
2. آیا پورت SSH امن است؟
SSH احراز هویت مبتنی بر رمز عبور یا کلید عمومی را فراهم می کند و اتصالات بین دو نقطه پایانی شبکه را رمزگذاری می کند. این یک جایگزین امن برای پروتکل های ورود به سیستم قدیمی (مانند telnet، rlogin) و روش های ناامن انتقال فایل (مانند FTP) است.