SSH دروازه ورود به بیشتر سرورهای لینوکس است. اگر ضعیف پیکربندی شود، brute force و سرقت کلید میتواند کل زیرساخت را تهدید کند. این مقاله مسیر عملی امنسازی SSH را قدمبهقدم توضیح میدهد؛ مناسب VPS شخصی و سرورهای تیمی.
ورود با کلید بهجای رمز
ssh-keygen -t ed25519 -C 'you@example.com'
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server
کلید Ed25519 امروز انتخاب پیشنهادی است. پس از اطمینان از ورود با کلید، PasswordAuthentication را خاموش کنید. هرگز قبل از تست کلید، دسترسی رمز را نبندید وگرنه ممکن است قفل شوید.
تنظیمات مهم sshd_config
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
LoginGraceTime 30
AllowUsers deploy
بعد از ویرایش: sudo sshd -t برای تست سینتکس و سپس restart سرویس ssh. AllowUsers یا AllowGroups دسترسی را به افراد مشخص محدود میکند. پورت غیر۲۲ امنیت از طریق ابهام میآورد ولی جایگزین فایروال و کلید نیست؛ فقط نویز اسکنرها را کم میکند.
config سمت کلاینت
Host prod
HostName 203.0.113.10
User deploy
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
با Host alias دستورات کوتاهتر و کمتر مستعد اشتباه میشوند. IdentitiesOnly از امتحانکردن کلیدهای اضافی جلوگیری میکند و روی سرورهایی با MaxAuthTries پایین حیاتی است.
fail2ban و محدودسازی
fail2ban با خواندن لاگ auth، IPهای مشکوک را موقتاً بن میکند. کنار فایروال (ufw/firewalld) و محدود کردن IP مدیریتی سطح حمله را پایین میآورد. اگر تیم پراکنده دارید، VPN یا jump host بهتر از باز گذاشتن SSH روی اینترنت است.
چکلیست hardening
- ورود فقط با کلید
- غیرفعال کردن root login
- محدودسازی کاربران مجاز
- بهروز نگه داشتن openssh
- مانیتور تلاشهای ناموفق
- بکاپ از کلیدها در محل امن (نه داخل چت)
اگر میخواهید بعد از یادگیری این مفاهیم، مسیر استقرار را سریعتر جلو ببرید، میتوانید از پروژه ابری هوشمند هوشگراف هم استفاده کنید؛ اما مبانی این مقاله مستقل از هر پلتفرمی برای کار روزمره مفید است.
نکات عملی بیشتر درباره امنیت SSH
وقتی روی امنیت SSH کار میکنید، مهمترین اصل این است که هر تغییر را قابلبرگشت نگه دارید. یعنی قبل از اجرای دستور مخرب، خروجی را در فایل لاگ ذخیره کنید، از کانفیگ بکاپ بگیرید و اگر روی سرور production هستید، ابتدا روی staging تمرین کنید. بسیاری از خطاهای پرهزینه فقط بهخاطر عجله و نبود چکلیست ساده رخ میدهند.
یک عادت خوب این است که برای هر سناریوی پرتکرار یک runbook کوتاه داشته باشید: علائم مشکل، دستور تشخیص، اقدام اصلاحی، و معیار موفقیت. این runbook لازم نیست رسمی باشد؛ حتی یک فایل Markdown در ریپو هم کافی است تا تیم یکسان عمل کند.
در محیطهای ایران، محدودیت شبکه، latency رجیستری و قطعی لحظهای DNS هم باید در runbook بیاید. اگر دستوری به اینترنت وابسته است، مسیر جایگزین یا کش محلی را از قبل مشخص کنید.
اشتباهات رایجی که باید از آنها دوری کنید
- کپیکردن دستور از اینترنت بدون فهم پارامترها
- اجرای دستور مخرب روی production بدون بکاپ
- نادیده گرفتن لاگ و فقط نگاه به پیام خطای اول
- تغییر همزمان چند لایه (شبکه + سرویس + فایروال) بدون جداسازی تست
- ذخیره secret داخل ریپو یا اسکریپتهای عمومی
چکلیست جمعبندی
قبل از بستن کار روی امنیت SSH، این موارد را مرور کنید: آیا تغییر مستند شد؟ آیا rollback مشخص است؟ آیا مانیتورینگ یا حداقل یک healthcheck ساده وضعیت را نشان میدهد؟ آیا دسترسیها حداقل لازم هستند؟ اگر پاسخ هر کدام منفی است، کار را تمامشده فرض نکنید.
یادگیری عمیق زمانی رخ میدهد که بعد از هر حادثه، یک یادداشت کوتاه بنویسید: چه دیدید، چه فرضی اشتباه بود، و دفعه بعد چه میکنید. این چرخه از دهها دوره آموزشی سطحی مؤثرتر است.
نکات عملی بیشتر درباره امنیت SSH
وقتی روی امنیت SSH کار میکنید، مهمترین اصل این است که هر تغییر را قابلبرگشت نگه دارید. یعنی قبل از اجرای دستور مخرب، خروجی را در فایل لاگ ذخیره کنید، از کانفیگ بکاپ بگیرید و اگر روی سرور production هستید، ابتدا روی staging تمرین کنید. بسیاری از خطاهای پرهزینه فقط بهخاطر عجله و نبود چکلیست ساده رخ میدهند.
یک عادت خوب این است که برای هر سناریوی پرتکرار یک runbook کوتاه داشته باشید: علائم مشکل، دستور تشخیص، اقدام اصلاحی، و معیار موفقیت. این runbook لازم نیست رسمی باشد؛ حتی یک فایل Markdown در ریپو هم کافی است تا تیم یکسان عمل کند.
در محیطهای ایران، محدودیت شبکه، latency رجیستری و قطعی لحظهای DNS هم باید در runbook بیاید. اگر دستوری به اینترنت وابسته است، مسیر جایگزین یا کش محلی را از قبل مشخص کنید.
اشتباهات رایجی که باید از آنها دوری کنید
- کپیکردن دستور از اینترنت بدون فهم پارامترها
- اجرای دستور مخرب روی production بدون بکاپ
- نادیده گرفتن لاگ و فقط نگاه به پیام خطای اول
- تغییر همزمان چند لایه (شبکه + سرویس + فایروال) بدون جداسازی تست
- ذخیره secret داخل ریپو یا اسکریپتهای عمومی
چکلیست جمعبندی
قبل از بستن کار روی امنیت SSH، این موارد را مرور کنید: آیا تغییر مستند شد؟ آیا rollback مشخص است؟ آیا مانیتورینگ یا حداقل یک healthcheck ساده وضعیت را نشان میدهد؟ آیا دسترسیها حداقل لازم هستند؟ اگر پاسخ هر کدام منفی است، کار را تمامشده فرض نکنید.
یادگیری عمیق زمانی رخ میدهد که بعد از هر حادثه، یک یادداشت کوتاه بنویسید: چه دیدید، چه فرضی اشتباه بود، و دفعه بعد چه میکنید. این چرخه از دهها دوره آموزشی سطحی مؤثرتر است.
نکات عملی بیشتر درباره امنیت SSH
وقتی روی امنیت SSH کار میکنید، مهمترین اصل این است که هر تغییر را قابلبرگشت نگه دارید. یعنی قبل از اجرای دستور مخرب، خروجی را در فایل لاگ ذخیره کنید، از کانفیگ بکاپ بگیرید و اگر روی سرور production هستید، ابتدا روی staging تمرین کنید. بسیاری از خطاهای پرهزینه فقط بهخاطر عجله و نبود چکلیست ساده رخ میدهند.
یک عادت خوب این است که برای هر سناریوی پرتکرار یک runbook کوتاه داشته باشید: علائم مشکل، دستور تشخیص، اقدام اصلاحی، و معیار موفقیت. این runbook لازم نیست رسمی باشد؛ حتی یک فایل Markdown در ریپو هم کافی است تا تیم یکسان عمل کند.
در محیطهای ایران، محدودیت شبکه، latency رجیستری و قطعی لحظهای DNS هم باید در runbook بیاید. اگر دستوری به اینترنت وابسته است، مسیر جایگزین یا کش محلی را از قبل مشخص کنید.
اشتباهات رایجی که باید از آنها دوری کنید
- کپیکردن دستور از اینترنت بدون فهم پارامترها
- اجرای دستور مخرب روی production بدون بکاپ
- نادیده گرفتن لاگ و فقط نگاه به پیام خطای اول
- تغییر همزمان چند لایه (شبکه + سرویس + فایروال) بدون جداسازی تست
- ذخیره secret داخل ریپو یا اسکریپتهای عمومی
چکلیست جمعبندی
قبل از بستن کار روی امنیت SSH، این موارد را مرور کنید: آیا تغییر مستند شد؟ آیا rollback مشخص است؟ آیا مانیتورینگ یا حداقل یک healthcheck ساده وضعیت را نشان میدهد؟ آیا دسترسیها حداقل لازم هستند؟ اگر پاسخ هر کدام منفی است، کار را تمامشده فرض نکنید.
یادگیری عمیق زمانی رخ میدهد که بعد از هر حادثه، یک یادداشت کوتاه بنویسید: چه دیدید، چه فرضی اشتباه بود، و دفعه بعد چه میکنید. این چرخه از دهها دوره آموزشی سطحی مؤثرتر است.
نکات عملی بیشتر درباره امنیت SSH
وقتی روی امنیت SSH کار میکنید، مهمترین اصل این است که هر تغییر را قابلبرگشت نگه دارید. یعنی قبل از اجرای دستور مخرب، خروجی را در فایل لاگ ذخیره کنید، از کانفیگ بکاپ بگیرید و اگر روی سرور production هستید، ابتدا روی staging تمرین کنید. بسیاری از خطاهای پرهزینه فقط بهخاطر عجله و نبود چکلیست ساده رخ میدهند.
یک عادت خوب این است که برای هر سناریوی پرتکرار یک runbook کوتاه داشته باشید: علائم مشکل، دستور تشخیص، اقدام اصلاحی، و معیار موفقیت. این runbook لازم نیست رسمی باشد؛ حتی یک فایل Markdown در ریپو هم کافی است تا تیم یکسان عمل کند.
در محیطهای ایران، محدودیت شبکه، latency رجیستری و قطعی لحظهای DNS هم باید در runbook بیاید. اگر دستوری به اینترنت وابسته است، مسیر جایگزین یا کش محلی را از قبل مشخص کنید.
نظرات
هنوز نظری ثبت نشده. دیدگاهتان را بنویسید.