مروری بر تعریف SSH
SSH (Secure Shell یا Secure Socket Shell) یک پروتکل شبکه است که به کاربران، بهویژه مدیران سیستم راهی امن برای دسترسی به کامپیوتر از طریق یک شبکه را می دهد.
این پروتکل، دادههای شبکه را رمزنگاری کرده و بین دو کامپیوتر جابهجا میکند. SSH علاوه بر رمزگذاری قوی بستههای داده در شبکه، بهطور گسترده توسط متخصصان شبکه برای مدیریت سیستمها و اپلیکیشنها از راه دور استفاده میشود. بنابراین افراد مختلف، چه کاربران عادی مثل ما و چه متخصصان امنیت سایبری، با SSH، از طریق اینترنت یا شبکههای داخلی به یک سیستم دیگر وصل میشوند، دستورات مدنظرشان را روی سرور اجرا کنند و فایلها را از یک سیستم به سیستم دیگر منتقل میکنند.
چه در حال خرید سرور مجازی باشید و چه یک کالا را از فروشگاه اینترنتی بخرید، احتمالا با SSH برخورد کردهاید؛ چون SSH در همه مراکز داده وجود دارد و بهطور پیشفرض توسط انواع سیستمعامل سرور مثل یونیکس، لینوکس، ویندوز و حتی کامپیوترهای خانگی اپل استفاده میشود. اگر می خواهید بدانید چرا SSH، پروتکل ایمنی است چه مزایا و کاربردهایی دارد. پیشنهاد می کنم مقاله SSH چیست را بخوانید.

پیشنیاز افزایش امنیت SSH
برای آنکه بتوانیم اقدامات مربوط به امنیت پروتکل SSH را با خیال راحت انجام دهیم، باید از تنظیمات سرور خودمان حتما بکاپ بگیریم. دستور بسیار ساده زیر، از فایل پیکربندی سیستمعامل لینوکس یک نسخه پشتیبان تهیه میکند:
cp /etc/ssh/sshd_config ~/sshd_config_original
بهترین روشها برای افزایش امنیت 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 در نظر بگیرید:
- جزئیات گزارشهایی مثل تلاش برای ورود به سیستم (هم تلاشهای موفقیتآمیز، هم موارد ناموفق)، اجرای دستورات و نوع آنها، انتقال فایل و هرگونه تغییر در فایلهای سیستم یا پیکربندی را ثبت کنید؛
- گزارشهای گرفتهشده از فرایند بررسی و ارزیابی SSH را در یک مکان امن و متمرکز ذخیره کنید.
- گزارشها را بهطور منظم برای ردیابی و شناسایی هر ناهنجاری یا نشانهای از فعالیت مخرب بررسی کنید.
- استفاده از ابزارهای امنیتی حرفهایتر را در نظر بگیرید. مثل ابزارهای سیستم تشخیص نفوذ (IDS) شبکه که برای شناسایی علائم فعالیتهای مخرب بهکار میروند
- ابزارهای امنیتی و مدیریت رویداد که به SIEM معروف هستند، دادههای گزارش و رویداد را از منابع مختلف جمعآوری و تجزیهوتحلیل میکنند.
- در سیستمعامل لینوکس، فایل syslog این گزارشها را در خود نگه میدارد. پس آن را روی هاستتان پیدا و باز کنید. ممکن است این فایل در مسیر /var/log/auth.log یا /var/log/secure باشد. بسته به پیکربندی سرور، مسیر syslog و نام فایل ممکن است متفاوت باشد. در این فایل، بهدنبال کاربران ناآشنا و مشکوک بگردید؛ بهخصوص آنهایی که برای ورود به سیستم با نامهای کاربری و رمز عبورهای رایج و ضعیف، تلاش زیادی کردند. در این فایل، چیزی شبیه خطوط زیر را در نسخه RedHat لینوکس میبینید:
... 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) و اجرای قوانین سختگیرانه در فایروال، میتوانید سطح حملات را در شبکه و ترافیک سرورتان کاهش دهید. تقسیمبندی شبکه توانایی مهاجم را برای عبور از کل شبکهتان محدود میکند. حتی اگر یک مهاجم به یک بخش دسترسی پیدا کند، فقط میتواند در آن بخش کنجکاوی کند و هیچ دسترسیای به بخشهای دیگر شبکه ندارد.
اجرای بخشبندی شبکه شامل اقدامات زیر میشود:
- تمام منابع موجود در شبکهتان از جمله سرورها، برنامهها و دادهها را جمع کنید و آنها را بر اساس عملکرد، حساسیت و الزامات امنیتی دستهبندی کنید؛
- بخشهای شبکه را بر اساس دستههایی که تعریف کردهاید، ایجاد کنید. هر بخش باید منابعی را داشته باشد که از نظر عملکرد و حساسیت امنیتی، شباهت کاملی باهم دارند؛
- مشخص کنید که چه کسانی میتوانند برای هر بخش به شبکه دسترسی داشته باشند و چه کاری میتوانند انجام دهند. باید ترافیک لازم بین بخشها مجاز را برقرار کنید
- قوانین فایروال را سفتوسخت بچینید. این قوانین دستورالعملهایی هستند که نحوه مدیریت ترافیک شبکه شما را دیکته میکنند. آنها میتوانند ترافیک را بر اساس معیارهای مختلفی مثل آدرسهای IP، پورتها و پروتکلها مجاز یا مسدود کنند.
- برای چند برابر کردن اثربخشی قوانین فایروال و افزایش امنیت SSH، مجموعهای از قوانین یا Rules را بسازید و آن را به نسخه پیشفرض تبدیل کنید تا تمام ترافیک را بهشکل خودکار مدیریت کند. مثلا دستور زیر در لینوکس، تمام ترافیک را مسدود میکند:
# 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، احراز هویت پیشرفته و ایجاد محدودیت در زمان اتصال بین سرور و سیستم کلاینت.
منابع: