OpenSSH یکی از مهمترین سرویسهای لینوکسی برای مدیریت و دسترسی از راه دور به سرورها است. از آنجایی که تقریباً تمام سرورهای لینوکسی از SSH برای مدیریت استفاده میکنند، این سرویس همواره یکی از اهداف اصلی مهاجمان محسوب میشود. اگر تنظیمات SSH بهدرستی انجام نشود، سرور شما ممکن است در معرض حملات Brute Force، تلاش برای ورود غیرمجاز و سوءاستفاده از تنظیمات پیشفرض قرار بگیرد.
در این آموزش یاد میگیرید چگونه سرویس OpenSSH را در Ubuntu 24.04 LTS و Ubuntu 26.04 بهصورت اصولی و مطابق با بهترین استانداردهای امنیتی (Best Practices) ایمن کنید.
پیشنیازها
قبل از شروع، بهتر است موارد زیر را در اختیار داشته باشید:
- یک سرور Ubuntu 24.04 یا Ubuntu 26.04
- یک کاربر دارای دسترسی sudo
- دسترسی SSH به سرور
- ترجیحاً یک جفت کلید SSH (Public/Private Key)
نکته مهم: قبل از اعمال هرگونه تغییر روی تنظیمات SSH، یک نشست (Session) SSH دیگر باز نگه دارید تا در صورت بروز خطا، دسترسی خود را از دست ندهید.
مرحله اول: بررسی نصب OpenSSH
ابتدا بررسی کنید که سرویس SSH روی سیستم نصب باشد:
ssh -V
خروجی مشابه زیر خواهد بود:
OpenSSH_9.x
برای بررسی وضعیت سرویس:
sudo systemctl status ssh
اگر سرویس در حال اجرا باشد، عبارت زیر را مشاهده خواهید کرد:
Active: active (running)
نصب OpenSSH در صورت نیاز
اگر سرویس نصب نیست:
sudo apt update
sudo apt install openssh-server -y
پس از نصب، سرویس را فعال کنید:
sudo systemctl enable ssh
sudo systemctl start ssh
و وضعیت آن را بررسی کنید:
sudo systemctl status ssh
مرحله دوم: تهیه نسخه پشتیبان از فایل تنظیمات
قبل از هر تغییری، از فایل تنظیمات نسخه پشتیبان تهیه کنید:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
در نسخههای جدید اوبونتو ممکن است فایلهای تنظیمات اضافی نیز در مسیر زیر قرار داشته باشند:
/etc/ssh/sshd_config.d/
در صورت استفاده از این پوشه، میتوانید تنظیمات سفارشی خود را داخل یک فایل جدید مانند:
/etc/ssh/sshd_config.d/security.conf
قرار دهید تا فایل اصلی دستنخورده باقی بماند.
مرحله سوم: بررسی صحت فایل تنظیمات
قبل از ویرایش فایل:
sudo sshd -T
این دستور تمام تنظیمات نهایی SSH را نمایش میدهد.
برای ویرایش فایل اصلی:
sudo nano /etc/ssh/sshd_config
یا اگر از فایلهای جداگانه استفاده میکنید:
sudo nano /etc/ssh/sshd_config.d/security.conf
مرحله چهارم: تغییر پورت SSH
پورت پیشفرض SSH برابر 22 است و تقریباً تمام رباتهای اینترنتی ابتدا این پورت را اسکن میکنند.
برای کاهش حملات خودکار، پورت را تغییر دهید.
مثلاً:
Port 2222
یا
Port 54221
از انتخاب پورتهای بسیار رایج خودداری کنید.
پس از تغییر، باید فایروال را نیز بروزرسانی کنید (در بخشهای بعدی انجام خواهیم داد).
مرحله پنجم: غیرفعال کردن ورود مستقیم Root
یکی از مهمترین اقدامات امنیتی، جلوگیری از ورود مستقیم کاربر Root است.
تنظیم زیر را پیدا کنید:
PermitRootLogin yes
آن را به شکل زیر تغییر دهید:
PermitRootLogin no
از این پس ابتدا با کاربر عادی وارد شده و سپس از دستور زیر استفاده کنید:
sudo -i
مرحله ششم: غیرفعال کردن ورود با رمز عبور (در صورت استفاده از SSH Key)
اگر از کلید SSH استفاده میکنید، بهتر است ورود با رمز عبور را کاملاً غیرفعال کنید.
ابتدا مطمئن شوید ورود با کلید بدون مشکل انجام میشود.
سپس این گزینه را تغییر دهید:
PasswordAuthentication no
همچنین بهتر است:
ChallengeResponseAuthentication no
و
KbdInteractiveAuthentication no
را نیز تنظیم کنید.
در نهایت:
UsePAM yes
را بدون تغییر باقی بگذارید مگر اینکه دلیل خاصی برای تغییر آن داشته باشید.
مرحله هفتم: محدود کردن کاربران مجاز SSH
اگر فقط یک یا چند کاربر باید بتوانند وارد سرور شوند، از گزینه زیر استفاده کنید:
AllowUsers admin
یا برای چند کاربر:
AllowUsers admin deploy backup
همچنین میتوانید گروه مشخصی را مجاز کنید:
AllowGroups sshusers
این کار سطح حمله را بهشدت کاهش میدهد.
مرحله هشتم: محدود کردن تعداد تلاشهای ورود
یکی از رایجترین حملات علیه SSH، Brute Force Attack است؛ حملهای که در آن رباتها هزاران رمز عبور را برای ورود به سرور امتحان میکنند.
OpenSSH امکان محدود کردن تعداد تلاشهای ناموفق را فراهم کرده است.
در فایل تنظیمات SSH مقادیر زیر را اضافه یا ویرایش کنید:
MaxAuthTries 3
MaxSessions 3
LoginGraceTime 30
هر یک از این تنظیمات عملکرد زیر را دارند:
- MaxAuthTries: حداکثر تعداد دفعات مجاز برای وارد کردن رمز عبور یا کلید اشتباه
- MaxSessions: حداکثر تعداد نشستهای همزمان روی یک اتصال
- LoginGraceTime: مدت زمانی که کاربر فرصت دارد فرآیند ورود را تکمیل کند
این تنظیمات باعث میشوند رباتها فرصت کمتری برای آزمودن رمزهای عبور مختلف داشته باشند.
مرحله نهم: غیرفعال کردن ورود کاربران بدون رمز
اگر از احراز هویت مبتنی بر کلید استفاده میکنید، بهتر است ورود کاربران بدون رمز نیز غیرفعال باشد.
PermitEmptyPasswords no
این گزینه از ورود کاربرانی که رمز عبور خالی دارند جلوگیری میکند.
مرحله دهم: غیرفعال کردن X11 Forwarding
اگر از برنامههای گرافیکی لینوکس روی SSH استفاده نمیکنید، این قابلیت را غیرفعال کنید.
X11Forwarding no
غیرفعال کردن این ویژگی سطح حمله را کاهش میدهد.
مرحله یازدهم: غیرفعال کردن TCP Forwarding (در صورت عدم نیاز)
SSH میتواند برای تونلسازی (Tunneling) نیز استفاده شود. اگر به این قابلیت نیازی ندارید، آن را غیرفعال کنید.
AllowTcpForwarding no
همچنین میتوانید:
PermitTunnel no
را نیز تنظیم کنید.
این گزینهها از سوءاستفاده مهاجمان برای ایجاد تونلهای مخفی جلوگیری میکنند.
مرحله دوازدهم: غیرفعال کردن Agent Forwarding
اگر از SSH Agent Forwarding استفاده نمیکنید:
AllowAgentForwarding no
این قابلیت در برخی سناریوها میتواند توسط مهاجم برای دسترسی به کلیدهای SSH سوءاستفاده شود.
مرحله سیزدهم: تنظیم Idle Timeout
برای جلوگیری از باقی ماندن نشستهای SSH بدون استفاده، زمان قطع خودکار اتصال را تنظیم کنید.
ClientAliveInterval 300
ClientAliveCountMax 2
این تنظیمات یعنی:
- هر ۳۰۰ ثانیه (۵ دقیقه) وضعیت اتصال بررسی شود.
- اگر دو بار متوالی پاسخی دریافت نشود، اتصال قطع گردد.
در مجموع، اتصال غیرفعال پس از حدود ۱۰ دقیقه بسته خواهد شد.
مرحله چهاردهم: استفاده از الگوریتمهای رمزنگاری امن
نسخههای جدید OpenSSH بهصورت پیشفرض از الگوریتمهای امن استفاده میکنند، اما در صورت نیاز میتوانید آنها را بهصورت صریح مشخص کنید.
الگوریتمهای رمزنگاری (Ciphers)
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes256-ctr
الگوریتمهای تبادل کلید (KexAlgorithms)
KexAlgorithms sntrup761x25519-sha512,sntrup761x25519-sha512@openssh.com,curve25519-sha256
الگوریتمهای MAC
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com
این الگوریتمها در نسخههای جدید OpenSSH امنیت و عملکرد مناسبی ارائه میدهند.
نکته: اگر کلاینتهای قدیمی به سرور متصل میشوند، قبل از اعمال این تنظیمات از سازگاری آنها اطمینان حاصل کنید.
مرحله پانزدهم: استفاده از پروتکل SSH نسخه ۲
نسخههای جدید OpenSSH فقط از SSH Protocol Version 2 پشتیبانی میکنند و نسخه ۱ سالهاست حذف شده است. بنابراین معمولاً نیازی به تنظیم دستی نیست.
اگر گزینه زیر را در فایل تنظیمات مشاهده کردید:
Protocol 2
میتوانید آن را بدون تغییر باقی بگذارید یا در صورت نبودن، نیازی به افزودن آن ندارید؛ زیرا OpenSSH بهصورت پیشفرض از نسخه ۲ استفاده میکند.
مرحله شانزدهم: بررسی صحت فایل تنظیمات
قبل از راهاندازی مجدد سرویس، حتماً فایل تنظیمات را بررسی کنید تا خطای نحوی نداشته باشد.
sudo sshd -t
اگر خروجی نمایش داده نشد، یعنی فایل تنظیمات صحیح است.
برای مشاهده تنظیمات نهایی اعمالشده نیز میتوانید از دستور زیر استفاده کنید:
sudo sshd -T
مرحله هفدهم: راهاندازی مجدد سرویس SSH
پس از اعمال تغییرات، سرویس را مجدداً راهاندازی کنید.
sudo systemctl restart ssh
و وضعیت آن را بررسی کنید:
sudo systemctl status ssh
اطمینان حاصل کنید که سرویس بدون خطا در حال اجرا باشد.
مرحله هجدهم: پیکربندی فایروال (UFW)
اگر پورت SSH را تغییر دادهاید، قبل از خروج از سرور باید فایروال را نیز بهروزرسانی کنید؛ در غیر این صورت ممکن است دیگر نتوانید به سرور متصل شوید.
ابتدا وضعیت UFW را بررسی کنید:
sudo ufw status
اگر هنوز UFW فعال نیست:
sudo ufw enable
اگر از پورت پیشفرض SSH (22) استفاده میکنید:
sudo ufw allow OpenSSH
یا
sudo ufw allow 22/tcp
اما اگر پورت SSH را مثلاً به 2222 تغییر دادهاید:
sudo ufw allow 2222/tcp
در صورتی که قبلاً پورت 22 را باز گذاشته بودید، بهتر است آن را ببندید:
sudo ufw delete allow 22/tcp
در پایان وضعیت قوانین را بررسی کنید:
sudo ufw status numbered
نمونه خروجی:
Status: active
To Action From
-- ------ ----
2222/tcp ALLOW Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
مرحله نوزدهم: نصب و پیکربندی Fail2Ban
یکی از بهترین ابزارهای امنیتی برای SSH، Fail2Ban است.
این نرمافزار با بررسی لاگهای سیستم، آدرس IP مهاجمانی را که چندین بار ورود ناموفق داشته باشند، بهصورت موقت یا دائم مسدود میکند.
نصب Fail2Ban
sudo apt update
sudo apt install fail2ban -y
فعال کردن سرویس:
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
ایجاد فایل تنظیمات
هرگز فایل اصلی را ویرایش نکنید.
فایل جدید ایجاد کنید:
sudo nano /etc/fail2ban/jail.local
محتوای زیر را قرار دهید:
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
[sshd]
enabled = true
معنی هر گزینه:
- bantime مدت زمان مسدود شدن IP
- findtime بازه زمانی بررسی
- maxretry تعداد تلاش ناموفق مجاز
اگر پورت SSH را تغییر دادهاید
مثلاً روی 2222:
[sshd]
enabled = true
port = 2222
راهاندازی مجدد Fail2Ban
sudo systemctl restart fail2ban
بررسی وضعیت:
sudo fail2ban-client status
برای مشاهده وضعیت SSH Jail:
sudo fail2ban-client status sshd
نمونه خروجی:
Status for the jail: sshd
Currently banned: 2
Total banned: 15
مرحله بیستم: بررسی لاگهای SSH
در Ubuntu 24.04 و نسخههای جدید، سادهترین روش استفاده از journalctl است.
مشاهده آخرین لاگهای SSH:
sudo journalctl -u ssh
مشاهده لاگهای جدید بهصورت لحظهای:
sudo journalctl -fu ssh
برای مشاهده تلاشهای ورود ناموفق:
sudo journalctl -u ssh | grep "Failed"
این لاگها به شما کمک میکنند حملات احتمالی یا خطاهای ورود را شناسایی کنید.
مرحله بیست و یکم: آزمایش اتصال قبل از خروج
یکی از رایجترین اشتباهات مدیران سرور این است که پس از اعمال تنظیمات، اتصال فعلی را میبندند و سپس متوجه میشوند دیگر امکان ورود وجود ندارد.
قبل از بستن نشست فعلی:
- یک پنجره یا ترمینال جدید باز کنید.
- با تنظیمات جدید به سرور متصل شوید.
مثلاً اگر پورت را تغییر دادهاید:
ssh username@server-ip -p 2222
اگر اتصال بدون مشکل برقرار شد، میتوانید نشست قبلی را ببندید.
مرحله بیست و دوم: بررسی تنظیمات امنیتی نهایی
برای مشاهده تنظیمات نهایی که OpenSSH از آنها استفاده میکند:
sudo sshd -T
در این خروجی میتوانید مواردی مانند:
- Port
- PasswordAuthentication
- PermitRootLogin
- Ciphers
- MACs
- KexAlgorithms
را بررسی کنید و مطمئن شوید تنظیمات موردنظر شما اعمال شدهاند.
چکلیست نهایی ایمنسازی OpenSSH
پس از پایان تنظیمات، موارد زیر را بررسی کنید:
- ✅ آخرین نسخه OpenSSH نصب شده است.
- ✅ سیستم بهروز است.
- ✅ از کلید SSH استفاده میکنید.
- ✅ ورود با رمز عبور غیرفعال شده است.
- ✅ ورود مستقیم Root غیرفعال است.
- ✅ پورت پیشفرض SSH تغییر کرده است.
- ✅ تعداد تلاشهای ورود محدود شده است.
- ✅ نشستهای غیرفعال بهصورت خودکار قطع میشوند.
- ✅ فقط کاربران مجاز امکان ورود دارند.
- ✅ الگوریتمهای رمزنگاری امن استفاده میشوند.
- ✅ UFW بهدرستی پیکربندی شده است.
- ✅ Fail2Ban فعال است.
- ✅ قبل از خروج، اتصال جدید آزمایش شده است.
- ✅ از فایل تنظیمات نسخه پشتیبان تهیه شده است.
جمعبندی
ایمنسازی OpenSSH یکی از مهمترین اقدامات برای محافظت از سرورهای لینوکسی است. با انجام تنظیماتی مانند غیرفعال کردن ورود مستقیم Root، استفاده از کلیدهای SSH، محدود کردن تعداد تلاشهای ورود، تغییر پورت پیشفرض، فعالسازی فایروال UFW و نصب Fail2Ban، میتوانید سطح امنیت سرور Ubuntu 24.04 یا Ubuntu 26.04 را به میزان قابل توجهی افزایش دهید.
در نهایت، امنیت یک فرایند مداوم است، نه یک اقدام یکباره. بنابراین توصیه میشود سیستمعامل، OpenSSH و سایر سرویسهای نصبشده را بهطور منظم بهروزرسانی کرده و لاگهای امنیتی را بهصورت دورهای بررسی کنید تا در برابر تهدیدات جدید نیز محافظت شوید.
از همراهی شما با پارمین کلود سپاسگزاریم.
نظرات کاربران