مروری بر تعریف SSH

SSH (Secure Shell یا Secure Socket Shell) یک پروتکل شبکه است که به کاربران، به‌ویژه مدیران سیستم راهی امن برای دسترسی به کامپیوتر از طریق یک شبکه را می ‎دهد.

این پروتکل، داده‌های شبکه را رمزنگاری کرده و بین دو کامپیوتر جابه‌جا می‌کند. SSH علاوه بر رمزگذاری قوی بسته‌های داده در شبکه، به‌طور گسترده توسط متخصصان شبکه برای مدیریت سیستم‌ها و اپلیکیشن‌ها از راه دور استفاده می‌شود. بنابراین افراد مختلف، چه کاربران عادی مثل ما و چه متخصصان امنیت سایبری، با SSH، از طریق اینترنت یا شبکه‌های داخلی به یک سیستم دیگر وصل می‌شوند، دستورات مدنظرشان را روی سرور اجرا کنند و فایل‌ها را از یک سیستم به سیستم دیگر منتقل می‌کنند.

چه در حال خرید سرور مجازی باشید و چه یک کالا را از فروشگاه اینترنتی بخرید، احتمالا با SSH برخورد کرده‌اید؛ چون SSH در همه مراکز داده وجود دارد و به‌طور پیش‌فرض توسط انواع سیستم‌عامل سرور مثل یونیکس، لینوکس، ویندوز و حتی کامپیوترهای خانگی اپل استفاده می‌شود. اگر می خواهید بدانید چرا SSH، پروتکل ایمنی است چه مزایا و کاربردهایی دارد. پیشنهاد می کنم مقاله SSH چیست را بخوانید.

افزایش امنیت ssh

پیش‌نیاز افزایش امنیت SSH

برای آن‌که بتوانیم اقدامات مربوط به امنیت پروتکل SSH را با خیال راحت انجام دهیم، باید از تنظیمات سرور خودمان حتما بکاپ بگیریم. دستور بسیار ساده زیر، از فایل پیکربندی سیستم‌عامل لینوکس یک نسخه پشتیبان تهیه می‌کند:

cp /etc/ssh/sshd_config ~/sshd_config_original

بهترین روش‌ها برای افزایش امنیت SSH

برای افزایش امنیت SSH، از چند روش ساده و سریع استفاده می‌کنیم که در ادامه، هر کدام را با جزئیات کامل توضیح داده‌ایم.

۱. احراز هویت قوی و پیشرفته

اجرای احراز هویت قوی اولین خط دفاعی شما در شبکه و اینترنت است؛ چون دقیقا مثل نگهبان دروازه عمل می‌کند و جلوی بسیاری از حملات شبکه را می‌گیرد. احراز هویت همان فرایندی است که تایید می‌کند

شما همان کسی هستید که ادعا می‌کنید. برای ورود به هر سیستمی، باید هویت شما تایید شود که این تایید، چیزی بیشتر از رمز عبور است.

افزایش امنیت ssh

ما لیستی از مهم‌ترین اقدامات را برای افزایش امنیت SSH در زمینه احراز هویت پیشرفته، در زیر آورده‌ایم:

اقدام امنیتیتوضیحات و نکات مهم
استفاده از پسورد قویاز رمزهایی با حداقل ۱۲ کاراکتر استفاده کنید که شامل حروف بزرگ و کوچک، اعداد و کاراکترهای خاص باشند. برای مثال، رمز @Server$!de403* یک رمز بسیار امن است؛ اما رمزهایی مانند ۱۲۳۴ اصلاً مناسب نیستند.
فعال‌سازی احراز هویت دو مرحله‌ای (2FA)یکی از بهترین روش‌های افزایش امنیت، استفاده از رمز یکبار مصرف (OTP) است. این روش هنگام ورود، از شما می‌خواهد علاوه بر رمز عبور، از روش دوم احراز هویت مانند اثر انگشت، پیامک یا سخت‌افزار فیزیکی استفاده کنید. این کار دسترسی افراد غیرمجاز را بسیار دشوار می‌کند. (برای یادگیری نحوه فعال‌سازی، مقاله چگونه OTP را فعال کنیم را بخوانید.)
تغییر دوره‌ای رمز عبوررمز عبور حساب‌ها را به‌طور منظم تغییر دهید. بهتر است هر ۳۰ تا ۶۰ روز، رمز جدیدی انتخاب شود که کاملاً با رمز قبلی متفاوت باشد. همچنین از کاربران خود بخواهید همین کار را انجام دهند.
قفل شدن حساب پس از تلاش‌های ناموفقتنظیم کنید که اگر فردی چند بار پیاپی رمز اشتباه وارد کرد، حساب موقتاً قفل شود. این روش مانع از حملات Brute Force می‌شود که در آن مهاجم با ترکیب‌های مختلف رمز، تلاش به ورود می‌کند.
استفاده از برنامه‌های مدیریت رمز عبوراز نرم‌افزارهای مدیریت پسورد برای ذخیره امن و تولید رمزهای پیچیده استفاده کنید. این ابزارها به اعضای تیم کمک می‌کنند بدون حفظ کردن پسوردهای طولانی، امنیت اکانت‌ها را حفظ کنند.
استفاده از کلیدهای SSH به‌جای رمز عبورمدیریت و استفاده صحیح از کلیدهای SSH امنیت بسیار بالاتری نسبت به پسوردها فراهم می‌کند. این روش در بخش بعدی مقاله به‌صورت کامل توضیح داده شده است.

 

۲. مدیریت کلیدهای SSH

افزایش امنیت SSH با مدیریت کلیدهای SSH ممکن می‌شود. این روش، یکی از رایج‌ترین اشکال احراز هویت جلسات SSH است.

یک جفت کلید SSH از یک کلید عمومی و یک کلید خصوصی تشکیل شده است. کلیدهای عمومی را می‌توان با همه افراد و در هر بستری به‌اشتراک گذاشت؛ اما کلید خصوصی باید محرمانه بماند و فقط مصرف‌کننده آن را بداند.

با‌این‌حال، کلیدهای SSH شکست‌ناپذیر یا غیر قابل نفوذ نیستند. اگر کلیدهای خصوصی به دست یک هکر یا فرد سواستفاده‌گری بیفتد، امنیت اتصالات پروتکل SSH شما هم به‌خطر می‌افتد. با این اوصاف، استفاده از کلیدهای SSH کافی نیست و باید آن‌ها را به‌طور موثر و منظم مدیریت کنید.

تعدادی شیوه برای مدیریت کلیدهای SSH وجود دارد که در ادامه آن‌ها را شرح می‌دهیم:

اقدام امنیتی در مدیریت کلید SSHتوضیحات و نکات کلیدی
تولید صحیح جفت‌کلید SSHبرای ایجاد کلیدهای ایمن، از ابزارهای معتبر مانند OpenSSH استفاده کنید. هرچه مقدار بیت بالاتر باشد، امنیت بیشتر می‌شود. معمولاً ۲۰۴۸ بیت برای اتصالات معمولی و ۴۰۹۶ بیت برای ارتباطات حساس توصیه می‌شود.
محافظت از کلیدهای خصوصیکلید خصوصی مانند رمز عبور اصلی شماست؛ نباید آن را در شبکه‌های ناامن یا مکان‌های عمومی ذخیره یا ارسال کنید. برای افزایش امنیت، می‌توانید کلید خصوصی را با یک عبارت رمز (Passphrase) رمزگذاری کنید.
تغییر دوره‌ای کلیدهای SSHبازه زمانی مشخصی تعیین کنید تا کلیدهای SSH خود را به‌صورت منظم تغییر دهید یا مقدار کاراکترهای آن را عوض کنید. این کار در صورت افشای احتمالی کلید، از سوءاستفاده جلوگیری می‌کند.
انقضای خودکار کلیدهای قدیمیبرای کلیدهای SSH تاریخ انقضا تعیین کنید تا پس از مدتی به‌صورت خودکار باطل شوند. این کار مانع از استفاده ناخواسته از کلیدهای فراموش‌شده یا بلااستفاده می‌شود.
بررسی منظم وضعیت کلیدهاکلیدهای SSH را به‌طور مرتب بررسی و ارزیابی کنید تا مطمئن شوید معتبر، ایمن و در حال استفاده هستند. این اقدام از انباشته شدن کلیدهای ناامن یا غیرضروری جلوگیری می‌کند.
مدیریت خودکار کلیدهااز ابزارها یا سیستم‌های مدیریت کلید استفاده کنید تا فرآیندهایی مانند توزیع، چرخش و ارزیابی کلیدها به‌صورت خودکار انجام شوند و احتمال خطای انسانی کاهش یابد.

بسیاری از مدیران سرور تصور می‌کنند تنظیم رمز عبور قوی برای SSH کافی است، در حالی که هکرها اغلب از طریق پورت‌های شناخته‌شده به سیستم نفوذ می‌کنند. یکی از روش‌های پیشرفته‌تر برای افزایش امنیت، تغییر پورت دسترسی است. در این زمینه مقاله تغییر پورت SSH در سرور مجازی راهنمایی کامل و عملی در اختیارتان می‌گذارد.

۳. ایمن‌سازی تنظیمات SSH

تنظیمات SSH سرور شما، نحوه رفتار و تعامل سرور SSH را با کلاینت‌ها تعیین می‌کند. به عبارت دیگر، این تنظیمات دقیقا مثل کتاب قانون هستند که در مورد اتصالات SSH، موارد مجاز و غیرمجاز تصمیم‌های قاطعانه می‌گیرند.

اگر از تنظیمات پیش‌فرض SSH روی سرور استفاده می‌کنید، باید بگوییم که امنیت پروتکل SSH سرورتان به‌شدت در خطر است. مثلا اگر اجازه ورود root یا استفاده از پورت‎های پیش‌فرض را به تمام کاربران سرور داده‌اید، ممکن است کاربری که به تازگی وارد تیم‌تان شده، از این موقعیت سواستفاده کند و تمام محتوا و تصاویر سایت شما را بردارد.

پس برای افزایش امنیت SSH در چنین شرایطی، اقدامات زیر را اجرا و پیاده کنید:

پورت پیش‌فرض SSH را تغییر دهید. این پورت به‌طور پیش‌فرض روی پورت TCP با شماره ۲۲ تنظیم شده است که تمام هکرها و مهاجمان این شماره را می‌شناسند. برای تغییر این پورت، باید فایل sshd_config را در سیستم‌عامل لینوکس باز کنید و ابتدای دو خط Run SSH on a non-standard port و Port 22، یک علامت ‘#’ بگذارید تا به حالت کامنت دربیاید و اجرا نشود. دقیقا زیر آخرین خط در این فایل، بنویسید: Port 3740. حالا برای اتصال به سرور از راه دور، باید شماره پورت را ضمیمه آدرس کنید که چیزی مشابه خط زیر درمی‌آید:

ssh -p 3740 user1@10.1.0.42

باید همین جا این نکته را یاداوری کنیم که تغییر پورت لزوما امنیت پروتکل SSH را افزایش نمی‌دهد؛ اما می‌تواند میزان نویز و حملات خودکار را کاهش دهد؛

دسترسی و ورود به root سیستم‌عامل و هاست را غیر فعال کنید. تمام کاربران یک هاست به root دسترسی دارند. اگر یکی از کاربران مهاجم باشد، به root وصل می‌شود که عواقب آن می‌تواند فاجعه‌بار باشد. ما اکیدا توصیه می‌کنیم که ورود به root از طریق SSH را غیرفعال کنید و در صورت لزوم، از sudo یا افزایش امتیاز برای دسترسی به این مسیر استفاده کنید. برای انجام این کار، باید فایل پیکربندی SSH را در سیستم‌عامل لینوکس باز کنید و خط PermitRootLogin را از آن حذف کنید. یعنی عبارت yes را به no تغییر دهید. دستور آن چیزی مشابه زیر می‌شود:

PermitRootLogin no

ورود کاربران را محدود کنید و فقط به کاربران شناخته‌شده و آشنا برای خودتان اجازه دسترسی از طریق SSH را بدهید. همین اقدام ساده، خیلی راحت امنیت پروتکل SSH شما را تضمین می‌کند؛ چون تعداد نقاط ورود بالقوه برای یک مهاجم به حداقل می‌رسد.

برای داشتن اتصال SSH ایمن، انتخاب سرور مناسب اهمیت زیادی دارد. آشنایی با پلن‌ها، سیستم‌عامل‌ها و دیتاسنترها به شما کمک می‌کند انتخاب درستی داشته باشید. برای جزئیات بیشتر، مقاله راهنمای خرید سرور مجازی را بخوانید.

احراز هویت با کلید عمومی را فعال کنید که در تنظیمات SSH سرور قرار دارد. این کار به شما امکان می‌دهد تا از کلیدهای SSH برای احراز هویت استفاده کنید که شیوه‌ای امن‌تر نسبت به رمز عبور است؛

از برنامه Fail2ban یا ابزارهای مشابه استفاده کنید که آدرس‌های IP مشکوک را مسدود می‌کنند و در لیست سیاه (Blacklist) قرار می‌دهند. این فعالیت‌ها طیف وسیعی دارند؛ اما مهم‌ترین آن‌ها عبارتند از خرابی مکرر و از کار افتادن رمز عبور، تلاش‌های زیاد برای ورود به حساب کاربری با نام کاربری یا رمز عبور اشتباه که همان حمله بروت فورس است؛

فایل /etc/ssh/sshd_config خود را با استفاده از sudo nano /etc/ssh/sshd_config ویرایش کنید و مقادیر زیر را مطابق تصویر این بخش، به‌روزرسانی کنید

بعد از ویرایش محتوای این فایل، SSH هاست را با دستور زیر، سرور لینوکس نسخه Red Hat و zLinux را با دستور زیر مجددا راه‌اندازی کنید:

sudo service sshd restart

برای Reload نسخه RedHat لینوکس هم باید از دستور زیر استفاده کنید:

sudo service sshd reload

راه‌اندازی مجدد نسخه دبیان با دستور زیر انجام می‌شود:

sudo /etc/init.d/ssh restart

برای Reload نسخه دبیان لینوکس، باید از دستور زیر استفاده کنید:

sudo /etc/init.d/ssh reload

۴. نظارت و ارزیابی فعالیت‌های SSH

مهم نیست که امنیت پروتکل SSH سرور شما در چه وضعیتی است؛ در هر صورت باید همیشه مراقب آنچه در دل این پروتکل اتفاق می‌افتد، باشید. برای نظارت بر فعالیت‌های SSH، این کار به‌معنای SSH Audit است.

با اجرای مداوم SSH Audit، ترافیک SSH سرورتان را به‌شکل لحظه‌ای و زنده می‌بینید. بنابراین می‌توانید خیلی سریع هر بی‌نظمی یا نشانه‌ای از فعالیت‌های مخرب را تشخیص دهید.

خرید سرور مجازی لینوکس برای نصب SSH

سرور مجازی لینوکس ایران و خارج با پشتیبانی از انواع توزیع‌های محبوب لینوکس مانند Ubuntu، CentOS و Debian، امکان مدیریت آسان و دسترسی root را از طریق SSH برای شما فراهم می‌کند.

سرور مجازی لینوکس

با کمک نرم‌افزارها و ابزارهای آنلاین این کار، می‌توانید فعالیت SSH را ثبت کنید و با ترافیک‌های قبلی مقایسه کنید تا رد آی‌پی یا کاربران مشکوک را بگیرید.

در لیست زیر، چند نکته را یاداور می‌شویم که باید در مواقع نظارت و ارزیابی فعالیت SSH در نظر بگیرید:

...
Mar 10 18:48:02 sku sshd[1496]: Failed password for invalid user alex from 1.2.3.4 port 1585 ssh2
...
Mar 14 23:25:52 sku sshd[1496]: Failed password for invalid user alice from 1.2.3.4 port 1585 ssh2
...

۵. پیاده‌سازی قوانین بخش‌بندی شبکه و فایروال

امنیت SSH تنها به رمز عبور و کلید محدود نمی‌شود؛ بلکه بستگی زیادی به پایداری و فایروال شبکه میزبان دارد. سرورهای خارج از ایران با برخورداری از مراکز داده قدرتمند و مسیرهای ارتباطی پرسرعت، بستری امن‌تر برای اتصال فراهم می‌کنند. برای استفاده از این امکانات، بهترین راه خرید سرور مجازی خارجی است.

با اجرای بخش‌بندی شبکه (Network Segmentation) و اجرای قوانین سخت‌گیرانه در فایروال، می‌توانید سطح حملات را در شبکه و ترافیک سرورتان کاهش دهید. تقسیم‌بندی شبکه توانایی مهاجم را برای عبور از کل شبکه‌تان محدود می‌کند. حتی اگر یک مهاجم به یک بخش دسترسی پیدا کند، فقط می‌تواند در آن بخش کنجکاوی کند و هیچ دسترسی‌ای به بخش‌های دیگر شبکه ندارد.

اجرای بخش‌بندی شبکه شامل اقدامات زیر می‌شود:

# Using ufw
# Enable UFW
sudo ufw enable
# Set default deny policy for incoming traffic
sudo ufw default deny incoming

حالا باید یک‌سری دستور را اضافه کنیم تا فقط ترافیک خاصی مجاز به ارسال و دریافت باشد. کد زیر نمونه کوتاهی از چنین قانونی است:

# Using ufw
# Allow SSH from specific IP address or network
sudo ufw allow from YOUR_IP_ADDRESS to any port 22
# Replace IP_ADDRESS with the IP address or range you want to allow.

دستور زیر هم قوانین را به‌طور منظم مرور و به‌روز می‌کند. این کار باعث می‌شود تا همیشه نسبت به آپدیت بودن قوانین و اثربخشی آن‌ها روی امنیت پروتکل SSH مطمئن باشید:

# Using ufw
# List current rules
sudo ufw status verbose

امنیت SSH تا حد زیادی به نوع سروری که استفاده می‌کنید بستگی دارد. در سرورهای مجازی، منابع با دیگر کاربران به‌اشتراک گذاشته می‌شود، اما در سرور اختصاصی کنترل کامل و سطح امنیت بالاتری در اختیار شماست. برای درک بهتر این تفاوت‌ها، مقاله تفاوت سرور اختصاصی با vps را مطالعه کنید.

۶. ایجاد محدودیت در اتصالات SSH

یکی از بهترین شیوه‌ها برای افزایش امنیت SSH، اختصاص زمان مشخص به اتصال این پروتکل است تا پس از گذشت این زمان، Session کاربر منقضی شود و دیگر نتواند از سرور استفاده کند.

با این کار، او مجبور می‌شود که مجدد نام کاربری و رمز عبور را برای اتصال به سرور وارد کند. اگر یک مهاجم یا هکر باشد، تا حد زیادی فعالیت‌هایش محدود می‌شود.

دستور ClientAliveInterval در سرورهای لینوکس، مسئول محدود کردن زمان اتصال SSH هستند. با نوشتن این دستور در فایل پیکربندی، سرور پیامی به سیستم کلاینت ارسال می‌کند و انتظار پاسخ از آن را دارد.

در این میان، ClientAliveInterval فاصله زمانی بین پیام‌ها را بررسی می‌کند و مشخص می‌کند که سرور چند بار این کار را انجام دهد.

در ادامه، یک نمونه پیکربندی را آورده‌ایم که هر ۶۰ ثانیه یک‌بار، وضعیت اتصال را چک می‌کند و این کار را فقط سه بار انجام می‌دهد:

ClientAliveInterval 60

ClientAliveCountMax 3

لزومی ندارد که دقیقا از همین مقادیر استفاده کنید؛ بلکه باید این مقادیر را به چیزی که برای شبکه و شرایط سایت شما منطقی است، تغییر دهید.

نکته این دستور این است که اگر از SSH برای تونل کردن اتصالات دیگر استفاده می‌کنید، حتما باید زمان را در این دستورات به اندازه کافی طولانی در نظر بگیرید تا هر برنامه دیگری که از آن استفاده می‌کند، به‌شکل ناگهانی دچار قطع ارتباط نشود.

یک مقدار ServerAliveInterval هم وجود دارد که می‌توانید آن را در سمت کلاینت پیکربندی کنید. این دستور به سیستم کلاینت اجازه می‌دهد تا اتصالات به سرورهای SSH غیر پاسخ‌گو را قطع کنند تا منابع سخت‌افزاری‌شان هدر نرود.

آنچه در افزایش امنیت SSH خواندیم؟

مدیریت ارتباطات شبکه از راه دور، با کمک SSH خیلی ساده و امن می‌شود. اما این پروتکل نیاز به ایمن شدن دارد که ممکن است کمی کار پیچیده‌ای به‌نظر برسد؛ اما یادگیری پیکربندی این پروتکل مثل تغییر شماره پورت آن و استفاده از قوانین قاطع در فایروال سرور، تا حد زیادی امنیت پروتکل SSH را تضمین می‌کند.

می‌خواهیم در انتهای این مقاله یک مورد را یاداوری کنیم که برای ایمن‌سازی زیرساخت SSH خود، اصل اول امنیت در شبکه‌های کامپیوتری را همیشه در ذهن‌تان داشته باشید: امنیت یک سفر است، نه یک مقصد. پس باید به‌طور پیوسته و مداوم برای حفظ و ارتقا آن تلاش کنید. شما چه کارهایی را در این مسیر برای افزایش امنیت SSH انجام می‌دهید؟ آن را در بخش نظرات برای ما بنویسید.

سوالات متداولی که شما می‌پرسید

۱. چگونه امنیت پروتکل SSH را افزایش دهیم؟

با محدود کردن زمان اتصال کلاینت به سرور، تغییر شماره پورت SSH و تغییر تنظیمات پیش‎فرض SSH، می‌توانید این کار را انجام دهید.

۲. پروتکل SSH در چه زمینه‌هایی کاربرد دارد؟

مسئولیت و ماموریت اصلی این پروتکل، ایمن کردن ارتباطات شبکه است؛ اما برای پیکربندی روتر و احراز هویت سریع هم از این پروتکل استفاده می‌شود.

۳. بهترین روش افزایش امنیت SSH چیست؟

تمام روش‌هایی که برای بیشتر کردن امنیت پروتکل SSH در این مقاله توضیح دادیم، جزو بهترین روش‌ها هستند که به‌روزترین منابع معتبر آن‌ها را توصیه کرده‌اند؛ اما ساده‌ترین روش‌ها که هر کاربری می‌تواند انجام‌شان دهد عبارتند از مدیریت کلیدهای SSH، احراز هویت پیشرفته و ایجاد محدودیت در زمان اتصال بین سرور و سیستم کلاینت.

منابع:

tailscale

Red Hat Blog

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *