FutureForgeFutureForge

خدمات FutureForge

  • طراحی و ساخت محصولاز شناخت نیاز تا انتشار محصول، یک مسیر روشن پیش رو دارید.
  • توسعه فول‌استکوب‌اپلیکیشن، API و داده را هماهنگ و یکپارچه توسعه دهید.
  • ممیزی مهندسیپیش از هزینه‌ی بیشتر، از وضعیت واقعی محصول‌تان باخبر شوید.
  • مشاوره معماریپیش از یک تصمیم فنی پرهزینه، گزینه‌ها را درست بسنجید.
  • زیرساخت و استقرارمحصول را با خیال راحت منتشر کنید و پایدار نگه دارید.
  • هوش مصنوعی در محصولهوش مصنوعی را فقط جایی به کار می‌گیریم که مسئله‌ای را حل کند.
نمونه‌کارهایادداشت‌هاقیمت‌گذاریدرباره ما
شروع گفتگو
  1. خانه
  2. /یادداشت‌ها
  3. /یادداشت‌ها
FutureForge

استودیوی مهندسی محصول — طراحی، ساخت و استقرار نرم‌افزار.

خدمات

طراحی سایت با وردپرستوسعه اختصاصیمهندسی محصولزیرساخت و استقرارمشاوره معماریهوش مصنوعی در محصول

راهنمای انتخاب

یادداشت‌هاقیمت‌گذاریتخمین هزینه پروژهمقایسه روش‌هانمونه‌کارهادرباره ماتماس

ارتباط

hello@futureforge.ir

ایده‌ای برای ساخت دارید؟

نیازتان را مطرح کنید تا درباره مسیر توسعه و قدم بعدی صحبت کنیم.

شروع گفتگو

© 2026 FutureForge. همه حقوق محفوظ است.

حریم خصوصیشرایط استفاده
خانهنمونه‌کارشروعتماس
عملیات و استقرار

سخت‌سازی SSH روی سرور لینوکس: از مستندات OpenSSH و اوبونتو

سا
سهیل ابراهیم‌پور
·۲۹ شهریور ۱۴۰۵·6 دقیقه مطالعه
سخت‌سازی SSHsshd_configPasswordAuthenticationPermitRootLoginUbuntu OpenSSHsshd -TMaxAuthTries
ترمینال SSH و استیکی Disable Password و PermitRoot no

راهنمای پژوهشی سخت‌سازی OpenSSH: PermitRootLogin، PasswordAuthentication، sshd_config.d، تست sshd -t و جلوگیری از قفل‌شدن.

باز بودن پورت ۲۲ به اینترنت یعنی ربات‌ها همین حالا برای root و password حدس می‌زنند. سخت‌سازی SSH کاهش سطح حملهٔ همان دروازه‌ای است که خودتان برای مدیریت لازم دارید. این کار باید روی شواهد مستندات رسمی OpenSSH و راهنمای OpenSSH سرور اوبونتو باشد — نه کپی کور یک چک‌لیست وبلاگی که سرویس را از کار بیندازد.

اوبونتو هشدار می‌دهد: اگر تنها راه دسترسی SSH باشد و پیکربندی را خراب کنید، ممکن است قفل شوید؛ قبل از restart حتماً `sshd -t` و نشست دوم آزمایشی داشته باشید. همچنین به‌خاطر `Include /etc/ssh/sshd_config.d/*.conf` در ابتدای sshd_config، اولین مقدار برنده‌است — فایل cloud-init می‌تواند PasswordAuthentication yes را دوباره روشن کند اگر drop-in شما دیرتر لود شود.

چک‌لیست Key Auth No Root Fail2ban Port

پاسخ کوتاه

ابتدا ورود با کلید را پایدار کنید. سپس در یک فایل drop-in زود‌حرف (مثلاً `/etc/ssh/sshd_config.d/00-hardening.conf`) حداقل این‌ها را هدف بگیرید: `PermitRootLogin no`، `PasswordAuthentication no`، `KbdInteractiveAuthentication no`، `PubkeyAuthentication yes`. با `sshd -t` اعتبارسنجی، با `sshd -T` پیکربندی مؤثر را ببینید، سرویس را reload/restart کنید، از ترمینال دوم تست کنید، و تازه نشست اول را ببندید. پورت غیراستاندارد اختیاری و کم‌اثر در برابر مهاجم هدفمند است؛ کلید و بستن رمز اثر اصلی را دارند.

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

پیش‌نیازها و ایمنی عملیاتی

  1. دسترسی console/سریال ابر یا کاربر دوم با کلید معتبر.
  2. بکاپ از پیکربندی: اوبونتو پیشنهاد کپی فقط‌خواندنی از sshd_config اصلی را می‌دهد.
  3. کلید ed25519 نصب‌شده و تست‌شده (مقالهٔ کلیدها).
  4. پنجرهٔ نگهداری کوتاه و همکار آگاه در صورت قفل.

bash

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.original sudo chmod a-w /etc/ssh/sshd_config.original sudo ls -la /etc/ssh/sshd_config.d/

مدل پیکربندی اوبونتو: Include و اولین مقدار

طبق مستندات رسمی اوبونتو، به‌طور پیش‌فرض خط Include برای `sshd_config.d/*.conf` بالای فایل اصلی است. OpenSSH برای بیشتر کلیدها اولین مقدار دیده‌شده را استفاده می‌کند؛ بنابراین تنظیمات داخل drop-in بر مقادیر بعدی فایل اصلی می‌چربد. ابرتصویرها اغلب `50-cloud-init.conf` با `PasswordAuthentication yes` دارند. اگر سخت‌سازی را در `99-hardening.conf` بگذارید ممکن است دیر برسد و اثر نکند؛ پیشوند `00-` معمولاً زودتر مرتب می‌شود.

bash

grep -n Include /etc/ssh/sshd_config sudo grep -Rni password /etc/ssh/sshd_config /etc/ssh/sshd_config.d/

ساخت drop-in سخت‌سازی

bash

sudo tee /etc/ssh/sshd_config.d/00-hardening.conf >/dev/null << 'EOF' # FutureForge hardening baseline — review before production PermitRootLogin no PasswordAuthentication no KbdInteractiveAuthentication no PubkeyAuthentication yes PermitEmptyPasswords no X11Forwarding no MaxAuthTries 3 LoginGraceTime 30 ClientAliveInterval 300 ClientAliveCountMax 2 EOF

توضیح بر اساس sshd_config(5):

  • PermitRootLogin no: ورود مستقیم root را می‌بندد؛ با کاربر عادی وارد شوید و sudo کنید. مقدار پیش‌فرض مدرن اغلب prohibit-password است؛ no سخت‌گیرانه‌تر است.
  • PasswordAuthentication no: مسیر رمز را می‌بندد تا بروت‌فورس چیزی برای حدس نداشته باشد.
  • KbdInteractiveAuthentication no: مسیر تعاملی صفحه‌کلید (جایگزین ChallengeResponseAuthentication قدیمی) را می‌بندد تا رمز از مسیر دوم برنگردد.
  • PubkeyAuthentication yes: اطمینان از روشن بودن کلید.
  • MaxAuthTries / LoginGraceTime: هزینهٔ تلاش ناموفق و زمان نشست ناتمام را کم می‌کند.
  • ClientAlive*: تشخیص کلاینت مرده از کانال رمزشده (متفاوت از TCPKeepAlive).

AllowUsers یا AllowGroups را فقط وقتی فهرست پایدار دارید اضافه کنید؛ اشتباه تایپی قفل می‌سازد.

bash

# مثال اختیاری — فقط پس از تأیید نام‌ها # AllowUsers deploy alice

اعتبارسنجی و مشاهدهٔ پیکربندی مؤثر

bash

sudo sshd -t sudo sshd -T | grep -Ei 'passwordauthentication|kbdinteractiveauthentication|permitrootlogin|pubkeyauthentication|maxauthtries'

`sshd -t` نحو را بدون اعمال کامل چک می‌کند (اوبونتو همین را قبل از restart توصیه می‌کند). `sshd -T` پیکربندی نهایی را چاپ می‌کند تا ببینید آیا cloud-init هنوز password را yes کرده یا نه.

اعمال و آزمایش بدون قفل شدن

bash

sudo systemctl reload ssh.service # یا در برخی نسخه‌ها: # sudo systemctl restart ssh.service

نشست فعلی را باز نگه دارید. از ماشین دیگر یا ترمینال دیگر:

bash

ssh -o PreferredAuthentications=publickey -o PasswordAuthentication=no user@server ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no user@server

انتظار: اولی وارد شود، دومی Permission denied. ورود root باید شکست بخورد. اگر کلید شکست خورد، از نشست اول تنظیمات را برگردانید.

bash

sudo journalctl -u ssh.service -e --no-pager | tail -n 40

بنر و افشای نسخه

اوبونتو نشان می‌دهد قبل از احراز هویت، بنر پروتکل ممکن است تکهٔ OS را لو دهد. با `DebianBanner no` در drop-in می‌توان افشای OS در آن بنر را کم کرد — امنیت عمیق نیست ولی سطح اطلاعات را کم می‌کند.

bash

echo 'DebianBanner no' | sudo tee -a /etc/ssh/sshd_config.d/00-hardening.conf sudo sshd -t && sudo systemctl reload ssh

پورت غیر۲۲، فایروال و fail2ban — مرز انتظار

عوض کردن Port اسکنرهای تنبل را کم می‌کند اما جایگزین احراز هویت قوی نیست. روی برخی نسخه‌های جدید اوبونتو با socket activation، پورت ممکن است از unit سوکت کنترل شود نه فقط از sshd_config — قبل از تغییر، مستند همان نسخه را بخوانید. فایروال (ufw/nftables) باید منبع‌های مدیریتی را محدود کند. fail2ban یا مشابه می‌تواند تکرار شکست را جریمه کند؛ با PerSourcePenalties در OpenSSHهای جدیدتر هم سازوکار جریمهٔ داخلی وجود دارد. هیچ‌کدام مجوز دادن password روی اینترنت را «درست» نمی‌کنند.

جدول اولویت اقدامات

اقداماثر امنیتیریسک عملیاتی
ورود فقط با کلیدبالامتوسط اگر بدون تست
PermitRootLogin noبالاکم اگر sudo آماده باشد
بستن password و kbd-interactiveبالابالا بدون کلید پشتیبان
AllowUsers محدودبالابالا در صورت غلط املایی
MaxAuthTries پایینمتوسطکم
پورت غیر۲۲کم در برابر هدفمندمتوسط (مستندسازی/اسکن)
DebianBanner noکم (کاهش لو رفتن)خیلی کم

آنچه این مقاله عمداً نمی‌گوید

  • دستور تخریبی یا دور زدن دسترسی سیستم دیگران.
  • تضمین امنیت مطلق؛ سخت‌سازی لازم است نه کافی (پچ، کاربر، sudo، شبکه).
  • کپی کور الگوریتم‌های cipher بدون فهم سازگاری کلاینت‌ها.

چک‌لیست پایانی

  • کلیدها برای همهٔ آدم‌های مجاز نصب و تست شده‌اند.
  • sshd -T نشان می‌دهد password و root مطابق سیاست‌اند.
  • ورود رمز در تست منفی شکست می‌خورد.
  • console ابر در نشانه‌های اضطراری در دسترس است.
  • تغییرات در کنترل پیکربندی/مستند تیم ثبت شده است.

خلاصه

سخت‌سازی SSH یعنی بستن مسیرهای حدس‌زدنی و محدود کردن هویت، با احترام به مدل Include اوبونتو و قاعدة اولین مقدار OpenSSH. drop-in زودهنگام، تست sshd -t/-T، و تأیید از نشست دوم سه ستون جلوگیری از قفل‌اند. بعد از این پایه، فایروال، به‌روزرسانی و مدیریت کلید سازمانی را جدی بگیرید.

سوالات متداول

چرا PasswordAuthentication no گذاشتم ولی هنوز رمز می‌پرسد؟

احتمالاً فایل دیگری زودتر yes کرده، یا KbdInteractiveAuthentication باز است، یا Match بلاک استثنا ساخته. `sshd -T` و محتویات sshd_config.d را ببینید.

reload کافی است یا restart؟

اغلب reload برای اعمال بسیاری تنظیمات کافی است؛ اگر شک دارید و نشست امن دارید، restart سرویس ssh طبق نام واحد توزیع (ssh.service در اوبونتو).

آیا باید Protocol 2 را صریح بنویسم؟

OpenSSHهای مدرن فقط SSH2 را پشتیبانی می‌کنند؛ تمرکز روی authentication و دسترسی مفیدتر از کلیدهای تاریخی است.

منابع و مراجع

  • Ubuntu Server documentation — OpenSSH server: https://documentation.ubuntu.com/server/how-to/security/openssh-server/
  • sshd_config(5) OpenBSD/OpenSSH: https://man.openbsd.org/sshd_config.5
  • OpenSSH manuals index: https://www.openssh.com/manual.html
  • sshd(8): https://man.openbsd.org/sshd.8
  • systemd service control (reload/restart context): https://www.freedesktop.org/software/systemd/man/latest/systemctl.html

نویسنده

سا

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

یادداشت‌های مرتبط

یادداشت‌های مرتبط

دسته‌بندی‌ها

خدمات مرتبط

از یادداشت تا پروژه

اگر با مسئله‌ای شبیه این روبه‌رو هستید، درباره‌ی شرایط پروژه‌تان با هم صحبت کنیم.

برای انتخاب مسیر فنی پروژه‌تان کمک می‌خواهید؟

از مسئله و محدودیت‌هایتان بگویید؛ اگر بتوانیم همراهی‌تان کنیم، برای گفت‌وگو هماهنگ می‌کنیم.

سهیل ابراهیم‌پور
یادداشت‌ها
امنیت n8n: اعتبارنامه، وب‌هوک و SSRF
نصب n8n روی سرور با Docker Compose
n8n چیست و چگونه کار می‌کند؟
امنیت فروشگاه اینترنتی: سایت، درگاه و فرایند عملیاتی
بازیابی سرور لینوکس بعد از خرابی دیسک یا استقرار اشتباه

عملیات و استقرار

امنیت n8n: اعتبارنامه، وب‌هوک و SSRF

۹ آبان ۱۴۰۵

عملیات و استقرار

نصب n8n روی سرور با Docker Compose

۸ آبان ۱۴۰۵

عملیات و استقرار

n8n چیست و چگونه کار می‌کند؟

۸ آبان ۱۴۰۵

عملیات و استقرار

امنیت فروشگاه اینترنتی: سایت، درگاه و فرایند عملیاتی

۶ آبان ۱۴۰۵

عملیات و استقرار

بازیابی سرور لینوکس بعد از خرابی دیسک یا استقرار اشتباه

۲ آبان ۱۴۰۵
همه یادداشت‌ها315
معماری نرم‌افزار31
واژه‌نامه37
عملیات و استقرار94
مهندسی محصول122
راهنمای وب31
طراحی و ساخت محصول
توسعه فول‌استک
ممیزی مهندسی
مشاوره معماری
زیرساخت و استقرار
شروع گفتگو
ابزارهای رایگان
شروع گفتگو