مقدمه
پوسته امن یا SSH که امروزه بهعنوان یک پروتکل شبکه از آن یاد میشود باهدف برقراری ارتباط امن برای سرویسهای شبکه در بستر یک شبکه ذاتاً ناامن طراحیشده است. پورت استاندارد TCP برای SSH، پورت ۲۲ است. بهترین کاربرد این پروتکل این است که امکان ورود به سیستمهای کامپیوتری از راه دور را برای کاربران فراهم میکند. در این پست مکانیسمهای امنیتی شبکه را توضیح خواهیم داد که به مدیران شبکه کمک میکند تا سرویس SSH را روی هر سروری به روشهای مختلفی که در ادامه تشریح شدهاند، امن کنند. این روشها عبارتاند از:
- تغییر پورت
- غیرفعال کردن امکان ورود مبتنی بر رمز عبور متنی و استفاده از کلید PGP (کلید عمومی) برای احراز هویت
- غیرفعال کردن امکان ورود کاربر root از طریق SSH و محدود کردن دسترسی کاربر SSH
- استفاده از سرویس احراز هویت گوگل
- ایجاد محدودیتهای زمانی در استفاده از SSH
- غیرفعال کردن رمز عبورهای خالی
نصب
ابتدا سرویس SSH را بر روی سیستم خود با استفاده از دستور زیر نصب میکنیم:
sudo apt-get install openssh-server
اقدام اول: تغییر پورت
بهعنوان اولین اقدام امنیتی به منظور امن سازی سرویس SSH می توان پورت پیشفرض سرویس SSH را تغییر داد. ابتدا با استفاده از نرمافزار nmap پویشی را بر روی آدرس ip سیستم خود انجام میدهیم. همانطور که در تصویر پیداست این اسکن نشان میدهد که SSH روی پورت ۲۲ در حال اجراست.
برای تغییر پورت به مسیر etc/ssh/ رفته و فایل sshd_config را در سیستم client پیدا میکنیم.
cd /etc/ssh
فایل sshd_config را با استفاده از ویرایشگر nano بازکنید.
حال پورت ۲۲ را به پورت ۲۲۲۲ طبق چیزی که در عکس زیر مشاهده میشود تغییر داده و تغییرات ایجادشده در فایل sshd_config را ذخیره کنید. بنابراین در این روش ما پورت ۲۲ را به پورت ۲۲۲۲ فرستادیم (Port Forward).
حال برای تأیید فرستادن پورت دوباره آدرس ip سیستم client را با استفاده از nmap پویش میکنیم.
nmap 192.168.1.104
خروجی nmap نشاندهنده این است که پورت ۲۲۲۲/TCP باز است. بااینحال در قسمت توضیحات سرویس، عبارت EthernetIP-1 را نشان میدهد که توضیح دقیقی از سرویس در حال اجرا را نمیدهد. این بدان معنی نیست که سرویس قابلتشخیص نیست؛ بلکه تنها در پویشهای ساده مهاجم را گمراه میکند.
با اجرای پویش با استفاده از سوئیچ تشخیص نسخه در نرمافزار nmap میتوان سرویس را بهدرستی تشخیص داد.
nmap -sV 192.168.1.104
با خروجی بعدی nmap، بهطور واضح قابلمشاهده است که سرویسهای SSH روی پورت ۲۲۲۲ TCP در حال اجراست و توضیحات نسخه OpenSSH نشان داده میشود.
اقدام دوم: ایمنسازی با کلید عمومی
برای شروع به بکارگیری این اقدام امنیتی، به برنامه PuTTY Key Generator نیاز داریم. ابتدا این برنامه متنباز را دانلود و نصب میکنیم. برنامه PuTTYgen یک ابزار تولیدکننده کلید برای ساخت کلیدهای SSH برای PuTTY است و کلیدها را با فرمت خودش ذخیره میکند. (با پسوند.ppk) برنامه را بازکرده و روی تولید (generate) کلیک کنید.
با کلیک روی تولید، روند تولید یک کلید عمومی و خصوصی را شروع میشود، که در شکل زیر قابلمشاهده است.
زمانی که کلید عمومی و خصوصی تولید شد، روی ذخیره کلید عمومی (Save Public Key) کلیک کنید. این کار کلید را بهعنوان کلید عمومی ذخیره میکند.
حال صفحه ترمینال Ubuntu ی سرور خود را بازکرده و عبارت ssh-keygen را تایپ کنید.
دستور بالا یک پوشه بانام .ssh خواهد ساخت و سپس یک فایل متنی خالی به نام authorized_keys در همان پوشه میسازد. بعدازآن فایل “ssh_login.ppk” را که قبلاً با استفاده از PuTTy Key Generator ساختهشده بود را کپی کرده و در پوشه.ssh همانطور که در شکل نمایش دادهشده paste کنید.
در ترمینال به پوشه.ssh رفته و دستور زیر را تایپ کنید.
"puttygen -L "ssh_login.ppk
این دستور یک کلید مانند شکل زیر تولید خواهد کرد.
حال این کلید را کپی کرده و در فایل خالی به نام authorized_key با استفاده از دستور nano آن را paste کرده و ذخیره کنید.
حال تب پیکربندی putty (putty configuration) را بازکنید، سپس به تب نشست (session) رفته و آدرس ip و شماره پورت سیستم کلاینتهای خود که سرور SSH روی آن تنظیمشده را بدهید.
سپس به قسمت data رفته و نام کاربری ورود خودکار (Auto-login username) را بدهید.
به مسیر SSH > Auth رفته و مسیر فایل ssh_login.ppk (کلید عمومی که قبلتر تولیدشده بود) را داده و روی open کلیک کنید.
این روند بهطور ساده از کلید عمومی برای ورود به سرور SSH استفاده میکند، بدون اینکه پسورد متنی پرسیده شود.
فایل sshd_config در مسیر etc/ssh/ را با استفاده از دستور gedit بازکنید. در اینجا ما تغییراتی را در خط #PasswordAuthentication طبق تصویر نشان دادهشده اعمال خواهیم کرد.
مقدار پیکربندی فعلی برای ورود با پسورد عبارت زیر است
PasswordAuthentication yes#
حال ما مقدار پارامتر را از yes به no ویرایش کرده و کاراکتر هش (#) را طبق تصویر نشان دادهشده در زیر، پاک میکنیم. پس از انجام موارد فوق فایل را ذخیره میکنیم. این تغییرات ورود هر کاربر به سرور SSH را از طریق پسورد غیرفعال میکند.
PasswordAuthentication no
همانطور که مشاهده میکنید این تنظیمات، ورود مبتنی بر پسورد را غیرفعال کرده است و درواقع برای ورود کلید عمومی را درخواست میکند.
اقدام سوم: غیرفعال کردن ورود root و محدود کردن دسترسی کاربر SSH
برای شروع به استفاده از این اقدام امنیتی، باید تعدادی کاربر جدید با استفاده از دستور adduser ایجاد کنید (کاربران جدیدی که ما ساختیم: h1، h2، h3، h4) سپس تغییراتی را در فایل sshd_config موجود در مسیر etc/ssh/ با استفاده از دستور gedit ایجاد کنید. خطوط پایین را زیر Authentication# تایپ کنید:
No root login allowed (h2 can login as sudo –s)# PermitRootLogin no only allow 1 users h2 (sysadmin) ## AllowUsers h2
به خاطر داشته باشید که تغییرات ایجادشده را ذخیره کنید. این کار ورود root را غیرفعال کرده و فقط اجازه ورود از راه دور به سرور SSH را به کاربر h2 خواهد داد.
همانطور که مشاهده میکنید فقط کاربر h2 توانایی ورود موفق به سرور SSH را دارد، درحالیکه اجازه ورود به سرور کاربران h1 و h3 رد شده است.
احراز هویت با گوگل
برای شروع به استفاده از امکان احراز هویت دو مرحله ای بر روی سرور SSH، شما نیاز دارید که برنامه تأییدکننده اعتبار گوگل را روی تلفن همراه خود دانلود کرده و همچنین بستههای پیشنیاز آن را موردنیاز برای Ubuntu را با استفاده از دستور زیر نصب کنید:
sudo apt-get install libpam-google-authenticator
توجه: برنامه تأییدکننده اعتبار گوگل هنگام نصب تعدادی سؤال خواهد پرسید، به هر سؤالی که پرسیده میشود با yes جواب دهید.
بعدازاینکه عملیات نصب به پایان رسید، ترمینال را بازکرده و دستور زیر را تایپ کنید:
google-authenticator
یک بارکد مشاهده خواهیم کرد. با استفاده از نرمافزار تأییدکننده اعتبار گوگل روی تلفن همراه خود آن را اسکن کنید:
زمانی که برنامه بارکد را اسکن کرد، شروع به تولید رمز عبور یکبارمصرف (One Time Password)، همانطور که در تصویر نشان دادهشده، خواهد کرد.
حال فایل sshd موجود در مسیر etc/pam.d/ را با استفاده از دستور gedit بازکرده و تغییرات زیر را در آن اعمال کنید:
- کاراکتر هش (#) را به خط include common-auth@ اضافه کنید.
- خط (auth required pam_google_authenticator.so) را زیر include common-password@ اضافه کنید.
طبق چیزی که در تصویر نشان دادهشده است.
حال فایل sshd_config موجود در مسیر etc/ssh/ را با دستور gedit بازکرده و تغییرات زیر را در آن اعمال کنید.
ChallengeResponseAuthentication yes
زمانی که ما وارد سرور SSH میشویم، یک کد تأیید را درخواست میکند، ما باید رمز عبور یکبارمصرف (One Time Password) تولیدشده در برنامه تأییدکننده اعتبار گوگل خود را وارد کنیم. همانطور که مشاهده میکنید ما با استفاده از رمز عبور یکبارمصرف با موفقیت وارد سرور SSH شدهایم.
زمانبندی
در این اقدام امنیتی ما محدودیت زمانی روی سرویس SSH در سرور اعمال خواهیم کرد. نرمافزار Cron یک سرویس ساختهشده برای لینوکس باهدف برنامهریزی و زمانبندی کارهاست، که یک کار (دستور یا script) را روی سرور فعال میکند تا بهطور خودکار در تاریخ و زمان مشخصی اجرا شود. در اینجا میخواهیم سرویسهای SSH را با استفاده از crontab برنامهریزی کنیم.
ما برنامه corntab موجود در /etc را با استفاده از دستور nano بازکردهایم. حال بیایید سرویس SSH را طوری برنامهریزی کنیم که در هر دقیقه دوم شروعشده و بعد از هر دقیقه چهارم متوقف شود. دستوری که برای برنامهریزی سرویس SSH استفاده میشود در تصویر زیر نشان دادهشده است:
برای راهاندازی مجدد سرویس صبر کنید. با استفاده از nmap پورت ۲۲ را اسکن میکنیم.
nmap -p 22 192.168.1.104
بعد از اجرای اسکن، مشاهده خواهیم کرد که سرویس SSH روی پورت ۲۲ بسته است، چون دقیقه چهارم از زمانی است که شروعشده است.
حال اگر دستور ما بهدرستی کار کند، این سرویس باید خودش در هر دقیقه دوم شروع شود. برای تأیید این موضوع ما دوباره یک اسکن با nmap را شروع میکنیم.
nmap –p 22 192.168.1.104
همانطور که میبینیم وضعیت پورت اکنون باز است. با این کار کاربر در بازه زمانی مشخص میتواند از سرویس استفاده کند.
غیرفعال کردن رمز عبور خالی
در این اقدام امنیتی، میبایست همواره ورود به سرور SSH با رمز عبور خالی غیرفعال شود. برای فعال کردن این تنظیمات، ما نیاز داریم که فایل sshd_config را با دستور gedit بازکرده و تغییرات زیر را اعمال کنیم:
PermitEmptyPasswords No
این تغییرات بهسادگی ورود به سرور SSH با رمز عبور خالی را غیرفعال خواهد کرد.
منبع: Hacking Articles
