Future ForgeFuture ForgeFuture ForgeFuture Forge
خدماتنمونه‌کارهاپکیج‌هاابزارهای رایگانیادداشت‌هادرباره ماتماس
شروع پروژه
  1. خانه
  2. /یادداشت‌ها
Future ForgeFuture Forge

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

پروژه‌تان را مطرح کنید

ارتباط

hello@futureforge.ir09128464105
Future ForgeFuture Forge

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

خدمات

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

کاوش

نمونه‌کارهایادداشت‌هاپرسش‌هاپکیج‌ها

ابزارهای رایگان

ممیزی مهندسیمشاور معماریتخمین پروژهابزار پرامپت

شرکت

درباره ماتماسحریم خصوصیشرایط استفاده

پروژه‌تان را مطرح کنید

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

پروژه‌تان را مطرح کنید

ارتباط

hello@futureforge.ir09128464105
GitHubLinkedIn

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

خانهخدماتابزارهای رایگانشروع پروژه
عملیات و استقرار

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

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

سا
سهیل ابراهیم‌پور

بنیان‌گذار و مهندس محصول

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

باز بودن پورت ۲۲ به اینترنت یعنی ربات‌ها همین حالا برای 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 است. روی طراحی محصول، معماری و استقرار نرم‌افزار سفارشی کار می‌کند.

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

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

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

خدمات مرتبط

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

اگر موضوع این مقاله به سیستم یا محصول شما نزدیک است، می‌توانیم درباره دامنه واقعی صحبت کنیم.

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

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

سهیل ابراهیم‌پور
یادداشت‌ها
Logging چیست؟ ثبت رویداد برای تشخیص و پاسخ به حادثه
تعیین اندازهٔ سرور: RAM، CPU و Storage بر اساس Workload
Docker در برابر Kubernetes؛ مقایسهٔ دقیق نه شعار
چرا همیشه به Kubernetes نیاز ندارید؟
Kubernetes چیست؟ اجرای مقاوم workloadهای کانتینری

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

Logging چیست؟ ثبت رویداد برای تشخیص و پاسخ به حادثه

۲۹ شهریور ۱۴۰۵

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

تعیین اندازهٔ سرور: RAM، CPU و Storage بر اساس Workload

۲۹ شهریور ۱۴۰۵

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

Docker در برابر Kubernetes؛ مقایسهٔ دقیق نه شعار

۲۹ شهریور ۱۴۰۵

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

چرا همیشه به Kubernetes نیاز ندارید؟

۲۹ شهریور ۱۴۰۵

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

Kubernetes چیست؟ اجرای مقاوم workloadهای کانتینری

۲۹ شهریور ۱۴۰۵
همه یادداشت‌ها219
معماری نرم‌افزار13
واژه‌نامه37
عملیات و استقرار87
مهندسی محصول74
راهنمای وب8
طراحی و ساخت محصول
توسعه فول‌استک
ممیزی مهندسی
مشاوره معماری
زیرساخت و استقرار
پروژه‌تان را مطرح کنید
ابزارهای رایگان
پروژه‌تان را مطرح کنید