مجله ایرانیکاسرور آموزش سرور، هاست، وردپرس و شبکه پنل کاربری

چگونه SSH را امن کنیم؟ از حذف Root Login تا SSH Key و Fail2Ban

SSH یکی از مهم‌ترین ابزارهای مدیریت سرورهای لینوکسی است. با SSH می‌توانید از راه دور به VPS متصل شوید، نرم‌افزار نصب کنید، فایل‌ها را مدیریت کنید، سرویس‌ها را کنترل کنید و تنظیمات سرور را…

Amir Jabbari 📅 29 شهریور 1405 ⏱ 13 دقیقه مطالعه 👁 3 بازدید 💬 0 دیدگاه

SSH یکی از مهم‌ترین ابزارهای مدیریت سرورهای لینوکسی است. با SSH می‌توانید از راه دور به VPS متصل شوید، نرم‌افزار نصب کنید، فایل‌ها را مدیریت کنید، سرویس‌ها را کنترل کنید و تنظیمات سرور را تغییر دهید.

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

در این آموزش یاد می‌گیریم چگونه SSH را به شکل اصولی امن کنیم و با استفاده از SSH Key، غیرفعال کردن Root Login، محدود کردن کاربران و Fail2Ban سطح امنیت VPS را افزایش دهیم.

فهرست مطالب

این آموزش روی چه سرورهایی قابل استفاده است؟

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

🔹 Ubuntu 20.04، 22.04، 24.04 و نسخه‌های جدیدتر

🔹 Debian 10، 11، 12 و 13

🔹 Rocky Linux

🔹 AlmaLinux

🔹 CentOS

🔹 RHEL

🔹 Oracle Linux

🔹 Fedora Server

🔹 openSUSE و SUSE Linux Enterprise

البته نام بعضی پکیج‌ها یا مسیر فایل‌های تنظیمات ممکن است بین توزیع‌های مختلف کمی متفاوت باشد.

چرا باید SSH را امن کنیم؟

در حالت عادی، سرویس SSH معمولاً روی پورت 22 اجرا می‌شود و اگر VPS یک IP عمومی داشته باشد، این پورت می‌تواند از اینترنت قابل دسترسی باشد.

این موضوع به‌خودی‌خود به معنی ناامن بودن SSH نیست؛ اما قرار گرفتن SSH در معرض اینترنت باعث می‌شود سرور دائماً با تلاش‌های اتصال مختلف مواجه شود.

برای مثال ممکن است در لاگ‌های SSH تعداد زیادی تلاش ناموفق برای ورود مشاهده کنید. مهاجم ممکن است نام‌های کاربری رایج مانند root، admin، user، ubuntu و test را امتحان کند و در صورت استفاده از رمز عبور ضعیف، تلاش‌های خود را ادامه دهد.

به همین دلیل بهتر است به جای تکیه بر یک روش، چند لایه امنیتی برای SSH ایجاد کنیم.

مهم‌ترین روش‌های امن کردن SSH

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

🔹 استفاده از SSH Key

🔹 غیرفعال کردن ورود مستقیم Root

🔹 ایجاد کاربر معمولی برای مدیریت سرور

🔹 غیرفعال کردن ورود با Password

🔹 استفاده از پورت SSH غیرپیش‌فرض به‌عنوان یک لایه کمکی

🔹 محدود کردن کاربران مجاز برای SSH

🔹 نصب و تنظیم Fail2Ban

🔹 استفاده از Firewall

🔹 بررسی لاگ‌های SSH

🔹 به‌روزرسانی منظم سیستم‌عامل و OpenSSH

نکته مهم این است که تغییر پورت به‌تنهایی امنیت SSH را تضمین نمی‌کند. بهتر است چند مورد از روش‌های بالا را هم‌زمان اجرا کنید.

مرحله اول: قبل از هر تغییری یک اتصال SSH دوم باز کنید

⚠️ این مرحله بسیار مهم است.

قبل از اینکه تنظیمات SSH را تغییر دهید، پنجره SSH فعلی را نبندید. یک پنجره جدید PuTTY، Terminal یا PowerShell باز کنید و مطمئن شوید که هنوز می‌توانید به سرور متصل شوید.

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

مرحله دوم: ساخت کاربر جدید

اول بهتر است یک کاربر معمولی برای مدیریت سرور ایجاد کنیم. در Ubuntu و Debian می‌توانید از دستور زیر استفاده کنید:

adduser admin

به جای admin می‌توانید نام کاربری دلخواه خود را قرار دهید. پس از اجرای دستور، سیستم از شما یک رمز عبور می‌خواهد. سپس باید این کاربر را به گروه مدیریتی اضافه کنیم.

usermod -aG sudo admin

اکنون کاربر admin می‌تواند با استفاده از sudo دستورات مدیریتی را اجرا کند. برای آزمایش:

su - admin
sudo whoami

اگر خروجی root را مشاهده کردید، دسترسی sudo کاربر درست تنظیم شده است.

مرحله سوم: ساخت SSH Key

یکی از مهم‌ترین اقدامات امنیتی، استفاده از SSH Key Authentication به جای رمز عبور است. SSH Key از دو بخش اصلی تشکیل می‌شود: Private Key و Public Key.

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

ساخت SSH Key در ویندوز

اگر از Windows 10 یا Windows 11 استفاده می‌کنید، معمولاً می‌توانید از OpenSSH داخلی ویندوز استفاده کنید. PowerShell را باز کنید و اجرا کنید:

ssh-keygen

سپس مسیر ذخیره کلید را مشخص کنید. در حالت پیش‌فرض معمولاً کلیدها در مسیر مشابه C:\Users\YourName\.ssh\ ذخیره می‌شوند. دو فایل اصلی ایجاد می‌شود: id_ed25519 و id_ed25519.pub.

فایل بدون .pub کلید خصوصی است. کلید خصوصی را در اختیار دیگران قرار ندهید. فایل دارای .pub کلید عمومی است و می‌توان آن را روی سرور قرار داد.

چرا ED25519 پیشنهاد می‌شود؟

برای ایجاد کلید SSH می‌توانید از الگوریتم ED25519 استفاده کنید:

ssh-keygen -t ed25519

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

مرحله چهارم: انتقال Public Key به سرور

اگر از لینوکس یا macOS استفاده می‌کنید، می‌توانید از دستور زیر استفاده کنید:

ssh-copy-id admin@SERVER_IP

در ویندوز نیز می‌توانید محتوای فایل id_ed25519.pub را در فایل ~/.ssh/authorized_keys روی سرور قرار دهید. برای کاربر admin مسیر /home/admin/.ssh/authorized_keys خواهد بود.

مطمئن شوید مجوزهای فایل و پوشه صحیح هستند. برای مثال:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

مالک فایل نیز باید همان کاربر باشد. برای بررسی:

ls -la ~/.ssh

مرحله پنجم: آزمایش ورود با SSH Key

قبل از غیرفعال کردن ورود با رمز عبور، حتماً SSH Key را آزمایش کنید. مثلاً:

ssh admin@SERVER_IP

اگر از کلید خاصی استفاده می‌کنید:

ssh -i ~/.ssh/id_ed25519 admin@SERVER_IP

⚠️ تا زمانی که ورود با SSH Key را آزمایش نکرده‌اید، Password Authentication را غیرفعال نکنید.

مرحله ششم: غیرفعال کردن ورود مستقیم Root

ورود مستقیم با کاربر Root یکی از مواردی است که بهتر است در سرورهای عمومی غیرفعال شود. فایل تنظیمات SSH را باز کنید:

sudo nano /etc/ssh/sshd_config

دنبال خط PermitRootLogin yes بگردید و آن را به PermitRootLogin no تغییر دهید. اگر این گزینه وجود نداشت، می‌توانید آن را به فایل اضافه کنید.

با این تنظیم، ورود مستقیم به سرور با حساب Root از طریق SSH غیرفعال می‌شود. از این پس می‌توانید با کاربر معمولی وارد شوید و برای دستورات مدیریتی از sudo استفاده کنید.

امنیت SSH را جدی گرفته‌اید؟ حالا نوبت انتخاب یک VPS مطمئن است!

ایرانیکاسرور با ارائه سرور مجازی ایران و VPS اختصاصی، منابع پایدار، پهنای باند نامحدود، آپ‌تایم بالا و پشتیبانی ۲۴/۷، بستری امن برای مدیریت سرور شما فراهم می‌کند. همین حالا پلن مناسب خود را انتخاب کنید.

تماس با پشتیبانی: 91302460021  | ایرانیکاسرور

مرحله هفتم: غیرفعال کردن ورود با Password

اگر SSH Key را با موفقیت آزمایش کرده‌اید، می‌توانید ورود با رمز عبور را غیرفعال کنید. در فایل /etc/ssh/sshd_config گزینه PasswordAuthentication yes را به PasswordAuthentication no تغییر دهید.

همچنین بهتر است ورود تعاملی مبتنی بر رمز عبور نیز بررسی شود: KbdInteractiveAuthentication no. البته تنظیمات دقیق احراز هویت ممکن است با توجه به نسخه OpenSSH و پیکربندی سیستم متفاوت باشد.

مرحله هشتم: بررسی تنظیمات SSH قبل از Restart

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

sudo sshd -t

اگر هیچ خروجی نمایش داده نشد، معمولاً یعنی خطای syntax در فایل تنظیمات وجود ندارد. اگر خطایی مشاهده کردید، سرویس SSH را Restart نکنید و ابتدا همان خطا را برطرف کنید.

مرحله نهم: Restart کردن SSH

پس از اطمینان از صحت تنظیمات، در بسیاری از توزیع‌های لینوکس:

sudo systemctl restart ssh

در برخی سیستم‌ها ممکن است نام سرویس sshd باشد:

sudo systemctl restart sshd

برای مشاهده وضعیت:

sudo systemctl status ssh
sudo systemctl status sshd

مرحله دهم: تغییر پورت SSH

پورت پیش‌فرض SSH معمولاً 22 است. می‌توانید پورت دیگری انتخاب کنید؛ برای مثال 2222. در فایل /etc/ssh/sshd_config گزینه Port 22 را به Port 2222 تغییر دهید.

سپس قبل از Restart کردن SSH، مطمئن شوید Firewall نیز این پورت را اجازه می‌دهد. برای مثال اگر از UFW استفاده می‌کنید:

sudo ufw allow 2222/tcp

سپس sudo sshd -t و در صورت نبود خطا:

sudo systemctl restart ssh

اکنون اتصال جدید را با پورت جدید آزمایش کنید:

ssh -p 2222 admin@SERVER_IP

آیا تغییر پورت SSH ضروری است؟

خیر. تغییر پورت به‌تنهایی یک راهکار امنیتی اصلی محسوب نمی‌شود. این کار بیشتر می‌تواند تعداد زیادی از اسکن‌ها و تلاش‌های خودکار روی پورت پیش‌فرض 22 را کاهش دهد. امنیت واقعی SSH بیشتر به مواردی مانند SSH Key، غیرفعال کردن Root Login، احراز هویت قوی، Firewall و Fail2Ban وابسته است.

مرحله یازدهم: محدود کردن کاربران SSH

می‌توانید مشخص کنید چه کاربرانی اجازه ورود از طریق SSH داشته باشند. در فایل /etc/ssh/sshd_config می‌توانید از گزینه AllowUsers admin استفاده کنید.

اگر چند کاربر دارید: AllowUsers admin user2. این کار باعث می‌شود فقط کاربران مشخص‌شده اجازه ورود از طریق SSH داشته باشند.

پس از تغییر، sudo sshd -t را اجرا کنید و سپس سرویس SSH را با روش مناسب سیستم خود Reload یا Restart کنید.

مرحله دوازدهم: نصب Fail2Ban

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

sudo apt update
sudo apt install fail2ban

پس از نصب:

sudo systemctl enable --now fail2ban

برای بررسی:

sudo systemctl status fail2ban

تنظیم Fail2Ban برای SSH

بهتر است تنظیمات شخصی Fail2Ban را در فایل جداگانه انجام دهید و فایل اصلی تنظیمات را مستقیماً ویرایش نکنید. برای مثال:

sudo nano /etc/fail2ban/jail.local

می‌توانید تنظیماتی مشابه زیر قرار دهید:

[sshd]
enabled = true
port = ssh
maxretry = 5
findtime = 10m
bantime = 1h

در این مثال enabled = true باعث فعال شدن Jail مربوط به SSH می‌شود. maxretry = 5 تعداد تلاش‌های ناموفق مجاز را مشخص می‌کند. findtime = 10m بازه بررسی تلاش‌هاست و bantime = 1h مدت زمان مسدود شدن IP را مشخص می‌کند. مقادیر مناسب به شرایط سرور شما بستگی دارند.

اگر پورت SSH را تغییر داده باشیم چه؟

اگر پورت SSH را مثلاً از 22 به 2222 تغییر داده‌اید، باید مطمئن شوید Fail2Ban پورت صحیح را بررسی می‌کند. مثلاً port = 2222. سپس:

sudo systemctl restart fail2ban

و وضعیت Jail را بررسی کنید:

sudo fail2ban-client status
sudo fail2ban-client status sshd

در خروجی می‌توانید اطلاعاتی مانند تعداد IPهای مسدودشده را مشاهده کنید.

مرحله سیزدهم: استفاده از Firewall

امن‌سازی SSH نباید فقط به تنظیمات OpenSSH محدود شود. Firewall نیز باید طوری تنظیم شود که فقط سرویس‌های مورد نیاز در دسترس باشند. اگر از UFW استفاده می‌کنید:

sudo ufw status

برای اجازه دادن به SSH:

sudo ufw allow 22/tcp

اگر پورت SSH را به 2222 تغییر داده‌اید:

sudo ufw allow 2222/tcp

سپس در صورت نیاز:

sudo ufw enable

⚠️ قبل از فعال کردن Firewall مطمئن شوید پورت SSH فعلی شما اجازه دسترسی دارد. در غیر این صورت ممکن است اتصال SSH قطع شود.

مرحله چهاردهم: بررسی لاگ‌های SSH

یکی از بهترین روش‌ها برای تشخیص حملات و مشکلات SSH، بررسی لاگ‌ها است. در Ubuntu و Debian معمولاً می‌توانید از دستور زیر استفاده کنید:

sudo journalctl -u ssh

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

sudo journalctl -u ssh | grep -i "failed"

در برخی سیستم‌ها اطلاعات احراز هویت در /var/log/auth.log قرار می‌گیرد. در سیستم‌های مبتنی بر RHEL ممکن است فایل‌هایی مانند /var/log/secure مورد استفاده قرار گیرند. مسیر لاگ‌ها به توزیع و تنظیمات سیستم بستگی دارد.

مرحله پانزدهم: به‌روزرسانی OpenSSH و سیستم‌عامل

امنیت SSH فقط به پیکربندی مربوط نمی‌شود. خود سیستم‌عامل و OpenSSH نیز باید به‌روز باشند. در Ubuntu و Debian:

sudo apt update
sudo apt upgrade

همچنین بهتر است بسته‌های امنیتی و سرویس‌های مهم سرور را به‌صورت منظم بررسی کنید. استفاده از نسخه‌های قدیمی نرم‌افزار می‌تواند باعث باقی ماندن آسیب‌پذیری‌های شناخته‌شده شود.

آیا فقط با تغییر پورت SSH امن می‌شود؟

خیر. تغییر پورت می‌تواند تعداد زیادی از اسکن‌های خودکار روی پورت 22 را کاهش دهد، اما نباید آن را جایگزین روش‌های اصلی امنیتی کنید. یک پیکربندی بهتر می‌تواند شامل این موارد باشد:

🔹 SSH Key

🔹 Disable Root Login

🔹 Disable Password Authentication

🔹 Firewall

🔹 Fail2Ban

🔹 User Restrictions

🔹 System Updates

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

اگر SSH را اشتباه تنظیم کنیم چه می‌شود؟

یکی از خطرناک‌ترین اشتباهات هنگام امن کردن SSH این است که کاربر بدون آزمایش، چند گزینه را هم‌زمان تغییر دهد. برای مثال PasswordAuthentication no، PermitRootLogin no و Port 2222 را تغییر دهد و بلافاصله اتصال فعلی را ببندد.

اگر SSH Key درست کار نکند یا Firewall پورت 2222 را مسدود کرده باشد، ممکن است دیگر نتوانید از طریق SSH وارد سرور شوید. به همین دلیل همیشه:

🔹 یک اتصال SSH فعلی را باز نگه دارید.

🔹 SSH Key را آزمایش کنید.

🔹 تنظیمات را با sshd -t بررسی کنید.

🔹 Firewall را بررسی کنید.

🔹 اتصال جدید را آزمایش کنید.

🔹 سپس اتصال قبلی را ببندید.

چک‌لیست نهایی امن‌سازی SSH

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

✅ کاربر معمولی برای مدیریت سرور ایجاد شده است.

✅ کاربر موردنظر دسترسی sudo دارد.

✅ SSH Key ساخته شده است.

✅ Public Key روی سرور قرار گرفته است.

✅ ورود با SSH Key با موفقیت آزمایش شده است.

✅ ورود مستقیم Root غیرفعال شده است.

✅ در صورت امکان Password Authentication غیرفعال شده است.

✅ پورت SSH در Firewall مجاز است.

✅ Fail2Ban نصب و فعال شده است.

✅ لاگ‌های SSH بررسی شده‌اند.

✅ سیستم‌عامل و OpenSSH به‌روز هستند.

✅ یک اتصال SSH پشتیبان برای آزمایش تنظیمات وجود دارد.

یک تنظیم پیشنهادی برای VPS

برای یک VPS معمولی که از طریق اینترنت مدیریت می‌شود، می‌توانید چنین ساختاری داشته باشید:

Internet
│
▼
Firewall
│
▼
SSH
│
├── SSH Key
│
├── Root Login = Disabled
│
├── Password Login = Disabled
│
└── Allowed Users
│
▼
Fail2Ban
│
▼
Linux VPS

البته تنظیمات دقیق باید بر اساس نیاز، توزیع لینوکس، روش مدیریت کاربران و سرویس‌های فعال روی VPS انجام شود.

جمع‌بندی

امن کردن SSH یک کار تک‌مرحله‌ای نیست. بهترین نتیجه زمانی به دست می‌آید که چند لایه امنیتی را هم‌زمان استفاده کنید.

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

همچنین فراموش نکنید که تغییر پورت SSH به‌تنهایی امنیت سرور را تضمین نمی‌کند و نباید جایگزین احراز هویت قوی و کنترل دسترسی شود.

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

پیشنهاد برای مدیران VPS

اگر برای میزبانی وب‌سایت، اجرای برنامه‌ها یا مدیریت سرویس‌های خود به یک VPS نیاز دارید، می‌توانید پلن‌های سرور مجازی ایرانیکاسرور را بررسی کنید و متناسب با نیاز خود، منابع مناسب را انتخاب کنید.

مشکل SSH دارید یا نیاز به کانفیگ اختصاصی دارید؟

تیم فنی ایرانیکاسرور آماده است تا درخواست شما را بررسی کند و بهترین راه‌حل را ارائه دهد. همین حالا مشکل خود را ارسال کنید.

تماس با پشتیبانی: 91302460021 | ایرانیکاسرور

 

 

این آموزش برایت مفید بود؟ می‌توانی لینک آن را ذخیره یا برای دیگران ارسال کنی.

Amir Jabbari

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

برای اجرای آموزش به زیرساخت نیاز داری؟

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

ایرانیکاسرور
گفت‌وگو درباره آموزش

دیدگاه‌ها

0 دیدگاه برای این مطلب ثبت شده است.

هنوز دیدگاهی ثبت نشده است؛ اگر سؤال یا تجربه‌ای درباره این آموزش داری، همین‌جا بنویس. پاسخ‌های مدیریت و کاربران به‌صورت مشخص از هم تفکیک می‌شوند.

دیدگاه یا سؤال خود را بنویسید

ایمیل شما منتشر نمی‌شود. فیلدهای ضروری مشخص شده‌اند.