۲۰ نکته طلایی برای بهبود امنیت SSH در لینوکس

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

۱. نحوه تغییر پورت پیشفرض SSH

به طور پیشفرض، SSH  روی پورت ۲۲ لیسن می‌شود، که آن را به هدفی رایج برای حملات ربات‌های خودکار تبدیل می‌کند. یک راه ساده برای کاهش چنین حملاتی، تغییر SSH به یک پورت غیر استاندارد است.
برای انجام این کار، فایل پیکربندی SSH را با یک ویرایشگر متن باز کنید:
به دنبال خطی باشید که می‌گوید:
آن را از حالت کامنت خارج کنید (# را حذف کنید) و آن را به یک شماره پورت دلخواه تغییر دهید، به عنوان مثال:
پس از ذخیره فایل، سرویس SSH را برای اعمال تغییرات ریستارت کنید:
مهم: در Debian/Ubuntu سرویس SSH با نام ssh و در RHEL/CentOS با نام sshd شناخته می‌شود. هنگام ریستارت یا بررسی سرویس، همیشه از نام صحیح استفاده کنید.
در مرحله بعد، قوانین فایروال خود را به‌روزرسانی کنید تا ترافیک روی پورت جدید مجاز باشد.
در نسخه‌های جدیدتر OpenSSH، تغییر پورت در sshd_config ممکن است کار نکند زیرا SSH از طریق سوکت‌های systemd مدیریت می‌شود.
یک جایگزین سوکت systemd ایجاد کنید ( ListStream  را با پورت مورد نظر خود جایگزین کنید)
systemd را ریلود و سرویس SSH را ریستارت کنید:
قوانین فایروال خود را به‌روزرسانی کنید (مانند بالا).

۲. نحوه غیرفعال کردن ورود root به SSH

اجازه ورود مستقیم root از طریق SSH خطرناک است زیرا به مهاجمان یک هدف واحد برای حملات brute-force  می‌دهد. یک رویکرد امن‌تر، ورود به سیستم به عنوان یک کاربر عادی و سپس استفاده از sudo برای وظایف مدیریتی است.
برای غیرفعال کردن ورود به سیستم root، خط زیر را در فایل پیکربندی SSH خود پیدا کنید.
و آن را به این تغییر دهید:
فایل را ذخیره کنید و سرویس SSH را برای اعمال تغییر ریستارت کنید:

3. نحوه ورود به سرور لینوکس بدون رمز عبور SSH

ورود به سیستم SSH مبتنی بر رمز عبور می‌تواند راحت باشد، اما امنیت کمتری دارد و برای دسترسی مکرر می‌تواند دست و پا گیر باشد.
یک رویکرد امن‌تر و کارآمدتر، احراز هویت مبتنی بر کلید SSH است که به شما امکان می‌دهد بدون وارد کردن رمز عبور وارد سیستم شوید.
ابتدا، یک جفت کلید SSH را در دستگاه لوکال خود ایجاد کنید:
در مرحله بعد، کلید عمومی (public key) خود را در سرور راه دور کپی کنید:
پس از نصب کلید، می‌توانید بدون رمز عبور به سرور وارد شوید:

4. نحوه اجازه دادن به کاربران خاص برای SSH در لینوکس

برای بهبود امنیت SSH، می‌توانید دسترسی را محدود کنید تا فقط کاربران یا گروه‌های خاصی بتوانند وارد سیستم شوند، که برای جلوگیری از تلاش حساب‌های غیرمجاز برای اتصال SSH مفید است.
برای اجازه دادن به کاربران خاص، خط زیر را به فایل پیکربندی SSH خود اضافه کنید.
یا برای اجازه دادن به کل گروه‌ها، از دستور زیر استفاده کنید:
پس از ایجاد این تغییرات، سرویس SSH را ریستارت کنید:
از این پس، فقط کاربران مشخص شده (حسن و علی) یا گروه‌های مشخص شده (admins  و devops) می‌توانند از طریق SSH وارد سیستم شوند و به افزایش امنیت سرور کمک کنند.

5. نحوه نمایش پیام خوشامدگویی یا هشدار در ورود به SSH

نمایش پیام هنگام ورود کاربران از طریق SSH می‌تواند برای خوشامدگویی به کاربران یا نمایش هشدارهای قانونی و امنیتی مفید باشد.
یک گزینه ساده ویرایش فایل پیام روز (MOTD) است:
برای یک هشدار رسمی‌تر یا قانونی‌تر، می‌توانید یک بنر در /etc/issue.net ایجاد کنید:
سپس، با اضافه کردن یا ویرایش خط زیر در فایل پیکربندی SSH، به SSH بگویید که این بنر را نمایش دهد:
در نهایت، سرویس SSH را ریستارت کنید تا تغییرات اعمال شود:
از حالا، هر زمان که کسی از طریق SSH وارد سیستم شود، پیام خوشامدگویی یا هشدار سفارشی شما را مشاهده خواهد کرد.

۶. نحوه ردیابی تلاش‌های ناموفق ورود به SSH

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

۷. نحوه محدود کردن دسترسی SSH بر اساس آدرس IP در لینوکس

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

۸. نحوه تنظیم زمان انتظار غیرفعال برای جلسات SSH

جلسات SSH غیرفعال می‌توانند در صورت فراموش کردن خروج کاربر، خطر امنیتی ایجاد کنند و اتصال را برای سوءاستفاده‌های احتمالی باز بگذارند.
شما می‌توانید با تنظیم یک زمان انتظار غیرفعال در فایل پیکربندی SSH، جلسات غیرفعال را به طور خودکار قطع کنید.
  • ClientAliveInterval 300 – هر 300 ثانیه (5 دقیقه) یک پیام “keep-alive” ارسال می‌کند.
  • ClientAliveCountMax 0 –   در صورت عدم دریافت پاسخ، جلسه را قطع می‌کند
.با این تنظیمات، هر جلسه SSH غیرفعال پس از ۵ دقیقه به طور خودکار خاتمه می‌یابد و خطر جلسات باز بدون نظارت را کاهش می‌دهد.

۹. نحوه فعال کردن احراز هویت دو عاملی (۲FA) برای ورود به SSH

افزودن احراز هویت دو عاملی (۲FA) به SSH با نیاز به یک مرحله تایید دوم علاوه بر رمز عبور، امنیت را به میزان قابل توجهی افزایش می‌دهد.
در سیستم‌های Debian/Ubuntu، می‌توانید از Google Authenticator استفاده کنید.
سپس، با اجرای دستور زیر، احراز هویت دو عاملی را برای حساب کاربری خود تنظیم کنید:
در مرحله بعد، ماژول PAM را برای SSH با ویرایش فعال کنید:
خط زیر را اضافه کنید:
در نهایت، احراز هویت challenge-response را در فایل پیکربندی SSH مجاز کنید:
برای اعمال تغییرات، سرویس SSH را ریستارت کنید:
اکنون، هر ورود به SSH به رمز عبور شما و یک کد تایید مبتنی بر زمان نیاز دارد که امنیت سرور شما را تا حد زیادی بهبود می‌بخشد.

۱۰. نحوه محدود کردن اتصالات SSH با Fail2ban

Fail2ban ابزاری قدرتمند است که با مسدود کردن موقت آدرس‌های IP که چندین بار تلاش برای ورود ناموفق داشته‌اند، به محافظت از سرور شما در برابر حملات brute-force کمک می‌کند.
برای راه‌اندازی آن، ابتدا Fail2ban را در سیستم‌های Debian/Ubuntu نصب کنید:
در مرحله بعد، با ایجاد یا ویرایش فایل پیکربندی محلی، SSH jail را فعال کنید:
خطوط زیر را برای پیکربندی محافظت برای SSH اضافه کنید:
در نهایت، Fail2ban را ریستارت کنید تا تغییرات اعمال شوند:
با فعال کردن Fail2ban، تلاش‌های مکرر برای ورود ناموفق به طور خودکار باعث مسدود شدن موقت می‌شوند و خطر حملات brute-force را تا حد زیادی کاهش می‌دهند.
خرید VPS لینوکس با دسترسی کامل SSH و منابع اختصاصی، مناسب برای برنامه‌نویسان، توسعه‌دهندگان و مدیران سایت در پارسدو فراهم است.

۱۱. نحوه پیکربندی احراز هویت SSH مبتنی بر کلید در لینوکس

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

12. نحوه مجاز یا غیرمجاز کردن دسترسی به SSH با استفاده از hosts.allow و hosts.deny

لینوکس روشی ساده برای کنترل دسترسی به سرویس‌ها با استفاده از بسته‌های TCP ارائه می‌دهد که به فایل‌های /etc/hosts.allow و /etc/hosts.deny متکی هستند.
ابتدا، IP های مورد اعتماد را در /etc/hosts.allow مجاز کنید:
سپس، با ویرایش /etc/hosts.deny، تمام IP های دیگر را رد کنید:
با این تنظیم، فقط آدرس 192.168.1.95 می‌تواند از طریق SSH متصل شود، در حالی که تمام تلاش‌های دیگر مسدود می‌شوند.

13. نحوه بررسی و نظارت بر جلسات فعال SSH در لینوکس

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

۱۴. نحوه راه‌اندازی تونل‌سازی SSH (پورت فورواردینگ) در لینوکس

تونل‌سازی SSH یا پورت فورواردینگ، به شما امکان می‌دهد تا ترافیک شبکه را به طور ایمن از دستگاه محلی خود به یک سرور راه دور هدایت کنید، که برای دسترسی به سرویس‌های پشت فایروال یا رمزگذاری اتصالات ناامن مفید است.
برای پورت فورواردینگ محلی، می‌توانید یک پورت را در دستگاه محلی خود به پورتی در سرور راه دور ارسال کنید.
  • 8080 → پورت محلی روی دستگاه شما.
  • localhost:80 → مقصد روی سرور راه دور.
  • user@remote-server → اعتبارنامه‌های ورود به سیستم SSH شما.
پس از اجرای این دستور، هرگونه ترافیکی که به localhost:8080 روی دستگاه محلی شما ارسال شود، به طور ایمن به پورت ۸۰ روی سرور راه دور ارسال می‌شود.

۱۵. نحوه فعال کردن ثبت وقایع مفصل برای عیب‌یابی SSH

هنگام عیب‌یابی مشکلات اتصال SSH، گزارش‌های دقیق می‌توانند به شناسایی علت اصلی، مانند مشکلات احراز هویت یا تاخیرهای شبکه، کمک کنند. SSH یک حالت verbose داخلی ارائه می‌دهد که اطلاعات گام به گام در مورد فرآیند اتصال را نشان می‌دهد.
برای فعال کردن ثبت وقایع به صورت verbose، کافیست دستور زیر را اجرا کنید:
  • پرچم -vvv سطح verbosity را افزایش می‌دهد و جزئیات جامعی در مورد هر مرحله از اتصال SSH ارائه می‌دهد.
  • همچنین می‌توانید از less vs (-v یا -vv) برای خروجی با جزئیات کمتر استفاده کنید.
حالت verbose برای تشخیص مشکلات SSH بسیار ارزشمند است و به شما کمک می‌کند تا به سرعت خطاهای پیکربندی، مشکلات شبکه یا خرابی‌های احراز هویت را مشخص کنید.

16. نحوه ایمن‌سازی SSH با رمزها و پروتکل‌های قوی

ایمن‌سازی اتصالات SSH شامل اطمینان از استفاده از الگوریتم‌ها و پروتکل‌های رمزگذاری قوی است. به طور پیشفرض، SSH از چندین پروتکل و رمز پشتیبانی می‌کند که برخی از آنها قدیمی و آسیب‌پذیر هستند.
شما می‌توانید سرور SSH خود را با مشخص کردن صریح گزینه‌های ایمن در فایل پیکربندی، ایمن کنید:
  • Protocol 2 – تضمین می‌کند که فقط از پروتکل امن SSHv2 استفاده می‌شود.
  •  Ciphers  – الگوریتم‌های رمزگذاری قوی را برای انتقال داده‌ها مشخص می‌کند.
  •  MACs – کدهای احراز هویت پیام امن را برای تأیید صحت داده‌ها تنظیم می‌کند.
  •  KexAlgorithms – الگوریتم‌های تبادل کلید امن را انتخاب می‌کند.
پس از ایجاد این تغییرات، SSH را ریستارت کنید تا اعمال شوند:

17. نحوه محدود کردن دسترسی SSH به یک محدوده پورت خاص

محدود کردن دسترسی SSH به یک محدوده پورت خاص، با کنترل پورت‌های مجاز برای اتصالات، لایه امنیتی دیگری اضافه می‌کند که می‌تواند به کاهش قرار گرفتن در معرض حملات خودکار به پورت‌های بلااستفاده کمک کند.
در سیستم‌هایی که از UFW (فایروال بدون عارضه) استفاده می‌کنند، می‌توانید با دستور زیر به طیف وسیعی از پورت‌ها اجازه دسترسی دهید:
برای کاربران FirewallD، معادل آن به صورت زیر خواهد بود:
این پیکربندی، اتصالات SSH را فقط در پورت‌های 1024 تا 1040 مجاز می‌کند و دسترسی در تمام پورت‌های دیگر را مسدود می‌کند.

18. نحوه تغییر زمان پایان اتصال SSH در لینوکس

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

19. نحوه فعال کردن فشرده‌سازی SSH برای اتصالات سریع‌تر

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

20. نحوه پیکربندی نام‌های مستعار SSH برای دسترسی آسان‌تر

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

۲۱. نحوه ارسال برنامه‌های رابط کاربری گرافیکی از طریق SSH (ارسال X11)

SSH می‌تواند کاری بیش از دسترسی خط فرمان انجام دهد. همچنین می‌تواند برنامه‌های گرافیکی را از یک سرور راه دور به دستگاه محلی شما با استفاده از ارسال X11 ارسال کند، که به شما امکان می‌دهد برنامه‌های رابط کاربری گرافیکی را روی سرور اجرا کنید، گویی که به صورت محلی اجرا می‌شوند.
برای فعال کردن ارسال X11، با گزینه -X متصل شوید:
پس از اتصال، می‌توانید برنامه‌های رابط کاربری گرافیکی مانند موارد زیر را اجرا کنید:
پنجره برنامه روی دستگاه محلی شما ظاهر می‌شود، در حالی که تمام پردازش‌ها روی سرور راه دور انجام می‌شود.
نکته: مطمئن شوید که ارسال X11 در فایل پیکربندی سرور SSH مجاز است.
جمع‌بندی
SSH ابزاری ضروری برای هر کسی است که سرورهای لینوکس را مدیریت می‌کند و استفاده صحیح از آن می‌تواند کار شما را آسان‌تر و ایمن‌تر کند.
با پیروی از نکات این مطلب، می‌توانید از سرورهای خود در برابر دسترسی غیرمجاز محافظت کنید، ورود به سیستم خود را با احراز هویت مبتنی بر کلید و نام‌های مستعار ساده کنید و فعالیت‌ها را با ابزارهایی مانند fail2ban و session timeout رصد کنید.
با اصول اولیه مانند تغییر پورت پیشفرض، غیرفعال کردن ورود به سیستم root و تنظیم ورود به سیستم مبتنی بر کلید شروع کنید و سپس به تدریج ویژگی‌های پیشرفته مانند احراز هویت دو مرحله‌ای، تونل‌سازی SSH و ثبت وقایع دقیق را بررسی کنید.
تسلط بر این شیوه‌ها به شما کمک می‌کند تا سرورها را به طور کارآمد مدیریت نمائید، از حملات در امان بمانید و مانند یک مدیر لینوکس با اعتماد به نفس کار کنید.