نکات مهم در تامین امنیت SSH در لینوکس

پروتکل SSH (Secure Shell) ستون فقرات مدیریت از راه دور سرورهای لینوکس است. با وجود اهمیت و قدرت آن، یک پیکربندی ضعیف میتواند سرور شما را در معرض حملات سایبری جدی قرار دهد. تامین امنیت SSH یک فرآیند حیاتی و چند لایه است که شامل تنظیمات دقیق، بهروزرسانیهای مداوم و استفاده از ترفندهای پیشرفته برای جلوگیری از دسترسیهای غیرمجاز میشود. هدف این مقاله، ارائه یک راهنمای جامع برای تقویت و امنسازی سرویس SSH شما است.
بخش اول: تنظیمات اولیه و حیاتی
ایمنسازی SSH با چند تغییر ساده اما بسیار تاثیرگذار در فایل پیکربندی اصلی آن (معمولا /etc/ssh/sshd_config) آغاز میشود.
تغییر پورت پیشفرض (Port Change)
یکی از موثرترین گامهای اولیه، تغییر پورت ۲۲ پیشفرض به یک پورت غیرمعمول دیگر است (مثلا ۲۲۲۲ یا یک عدد بین ۴۹۱۵۲ تا ۶۵۵۳۵). این کار حملات خودکار و رباتهایی که به طور پیشفرض پورت ۲۲ را اسکن میکنند را خنثی کرده و امنیت SSH شما را به شدت بالا میبرد.
- فایل
/etc/ssh/sshd_configرا باز کنید. - خط
Port 22را پیدا کرده و آن را به پورت دلخواه خود تغییر دهید:Port 54321 - پس از تغییر، سرویس SSHD و فایروال خود را بهروزرسانی کنید.
غیرفعال کردن ورود کاربر Root
ورود مستقیم کاربر root از طریق SSH یک خطر امنیتی بزرگ است، زیرا این حساب بیشترین سطح دسترسی را دارد و هدف اصلی حملات جستجوی فراگیر (Brute-Force) است. معمولا یکی از راههای نفوذ به سرورهای مجازی مناسب کسب و کار، استفاده از حملات Brute Force روی همین یوزر است.
- در فایل
/etc/ssh/sshd_config، مقدارPermitRootLoginرا بهnoتغییر دهید:PermitRootLogin no - در عوض، با یک حساب کاربری عادی وارد شوید و در صورت نیاز از دستور
sudoاستفاده کنید.
محدود کردن کاربران مجاز
برای افزایش امنیت SSH، تنها به کاربرانی اجازه دسترسی دهید که واقعا به آن نیاز دارند. شما میتوانید این محدودیت را با دستورالعملهای زیر اعمال کنید:
- فقط کاربران مشخص: برای اجازه دادن به گروهی از کاربران:
AllowUsers user1 user2 - فقط گروههای مشخص: برای اجازه دادن به اعضای یک گروه:
AllowGroups sshusers
بخش دوم: استفاده از رمزنگاری قوی
رمزهای عبور ضعیف بزرگترین نقطه ضعف در هر سیستمی هستند. استفاده از کلیدهای عمومی/خصوصی یک جایگزین امنتر و راحتتر است.
احراز هویت مبتنی بر کلید (Key-Based Authentication)
این روش شامل ساخت یک جفت کلید رمزنگاری است: یک کلید خصوصی که نزد شما میماند و یک کلید عمومی که روی سرور قرار میگیرد. این روش بسیار امنتر از رمز عبور است.
- تولید کلید: با دستور
ssh-keygenدر سیستم محلی خود یک جفت کلید تولید کنید. - انتقال کلید عمومی: با دستور
ssh-copy-id user@serverکلید عمومی را به سرور منتقل کنید. - غیرفعال کردن ورود با رمز عبور: پس از اطمینان از کارکرد صحیح ورود با کلید، احراز هویت با رمز عبور را به طور کامل غیرفعال کنید.
در فایل /etc/ssh/sshd_config:
PasswordAuthentication no PubkeyAuthentication yes
استفاده از عبارت عبور (Passphrase) برای کلید خصوصی
کلید خصوصی شما باید با یک عبارت عبور (Passphrase) محافظت شود. این کار باعث میشود حتی در صورت به سرقت رفتن کلید خصوصی، مهاجم نتواند از آن استفاده کند، مگر اینکه عبارت عبور را بداند.
بخش سوم: دفاع فعال و پیشرفته
برای مقابله با حملات Brute-Force و جلوگیری از دسترسیهای مکرر، باید از ابزارهای دفاع فعال استفاده کرد.
نصب و پیکربندی Fail2Ban
Fail2Ban ابزاری ضروری است که لاگهای سرور را اسکن میکند و آدرسهای IPای که تلاشهای مکرر و ناموفق برای ورود به SSH (یا سایر سرویسها) دارند را به طور موقت یا دائم در فایروال مسدود میکند.
- نصب: آن را روی سیستم خود نصب کنید (معمولا با دستور
apt install fail2banیاyum install fail2ban). - پیکربندی: در فایل تنظیمات Fail2Ban، تعداد تلاشهای مجاز (
maxretry) و مدت زمان مسدودسازی (bantime) را بر اساس نیازهای امنیت SSH خود تنظیم کنید.
استفاده از احراز هویت چند عاملی (Multi-Factor Authentication – MFA)
MFA لایه امنیتی نهایی است. این کار مستلزم آن است که کاربران علاوه بر دانستن یک چیز (کلید یا رمز عبور)، یک چیز دیگر (مثل یک کد یکبار مصرف از یک برنامه موبایل مانند Google Authenticator) را نیز داشته باشند.
- شما میتوانید ماژول
PAMرا در لینوکس نصب و پیکربندی کنید تا MFA را برای SSH اجباری کند. این اقدام امنیت SSH را به طور چشمگیری افزایش میدهد.
بخش چهارم: سختگیری در پیکربندی
تنظیمات پیشرفتهتری در فایل sshd_config وجود دارد که میتواند به طور دقیقتر رفتار سرور SSH شما را کنترل کند.
محدود کردن زمان بیکاری (Idle Timeout)
برای جلوگیری از باز ماندن جلسات بدون استفاده و سوءاستفادههای احتمالی، باید جلسات بیکار را پس از یک مدت زمان مشخص قطع کرد.
- از دستورالعمل
ClientAliveIntervalبرای تعیین تعداد ثانیههایی که سرور منتظر پاسخ کلاینت میماند وClientAliveCountMaxبرای تعیین تعداد دفعات ارسال پیام زنده استفاده کنید.ClientAliveInterval 300(۵ دقیقه)ClientAliveCountMax 0(در صورت عدم پاسخ، قطع میشود)
استفاده از MACهای قویتر و الگوریتمهای رمزنگاری بهروز
اطمینان حاصل کنید که سرور شما از الگوریتمهای رمزنگاری مدرن و امن استفاده میکند و الگوریتمهای ضعیف را غیرفعال کنید.
- MAC (Message Authentication Codes): از الگوریتمهای قوی مانند
hmac-sha2-512-etm@openssh.comاستفاده کنید. - Ciphers: از
aes256-gcm@openssh.comیاchacha20-poly1305@openssh.comبه جای الگوریتمهای قدیمیتر مانند CBC استفاده کنید. - Key Exchange (Kex) Algorithms: از الگوریتمهای مدرن مانند
diffie-hellman-group-exchange-sha256یا منحنیهای بیضوی (ECDH) استفاده کنید.
غیرفعال کردن فورواردینگ X11 و TCP (Disable X11 and TCP Forwarding)
اگر به قابلیتهای X11 یا فورواردینگ TCP نیازی ندارید، آنها را غیرفعال کنید تا سطح حملات بالقوه (Attack Surface) را کاهش دهید.
AllowTcpForwarding noX11Forwarding no
بخش پنجم: نگهداری و مانیتورینگ
امنیت SSH یک فرآیند مستمر است و نیازمند نگهداری و مانیتورینگ دائمی است. این موضوع زمانی اهمیت پیدا میکند که به دنبال خرید زیرساخت اختصاصی برای وبسایت خود باشید. در این صورت، تمامی مسائل امنیتی سرور و جلوگیری از هک شدن آن، بر عهده شما خواهد بود.
بهروزرسانی منظم سیستم و SSHD
اطمینان حاصل کنید که سیستم عامل لینوکس و بسته SSHD همیشه به آخرین نسخههای پایدار بهروزرسانی شدهاند تا از آسیبپذیریهای امنیتی جدید جلوگیری شود.
مانیتورینگ فعال لاگها
به طور منظم لاگهای SSH (معمولا در /var/log/auth.log یا /var/log/secure) را بررسی کنید تا هرگونه تلاش مشکوک برای ورود را شناسایی کنید. استفاده از ابزارهای مدیریت لاگ میتواند این فرآیند را خودکار و آسانتر کند.
استفاده از ابزارهای اسکن امنیتی
از ابزارهایی مانند ssh-audit برای اسکن پیکربندی SSHD خود استفاده کنید تا نقاط ضعف، الگوریتمهای قدیمی یا ضعیف را شناسایی کنید و یک گزارش دقیق از وضعیت امنیت SSH خود به دست آورید.
نتیجهگیری و جمعبندی
تامین امنیت SSH در لینوکس نه تنها یک توصیه، بلکه یک ضرورت برای هر مدیر سیستمی است. با اجرای ترفندهای ذکر شده، از تغییر پورت پیشفرض و غیرفعال کردن روت گرفته تا استفاده از احراز هویت مبتنی بر کلید و ابزارهای دفاع فعال مانند Fail2Ban، شما یک لایه دفاعی بسیار مستحکم در برابر اکثریت حملات سایبری ایجاد خواهید کرد. به یاد داشته باشید که امنیت یک وضعیت ایستا نیست؛ بلکه یک فرآیند دینامیک است که نیازمند توجه و بهروزرسانی مداوم است.
سوالات متداول
SSH مخفف Secure Shell است و یک پروتکل شبکه رمزنگاری شده برای اجرای سرویسهای شبکه به صورت ایمن بر روی یک شبکه ناامن است. معمولا از آن برای دسترسی از راه دور به سرورهای لینوکس و اجرای دستورات استفاده میشود.
پورت ۲۲ هدف اصلی حملات جستجوی فراگیر (Brute-Force) خودکار است. تغییر این پورت به یک پورت غیرمعمول، ترافیک حمله را به میزان قابل توجهی کاهش میدهد و مهاجمان را مجبور به انجام اسکنهای هدفمندتر و زمانبر میکند که این کار امنیت را افزایش میدهد.
کلیدهای SSH شامل یک جفت کلید خصوصی و عمومی هستند که بسیار طولانیتر و پیچیدهتر از رمزهای عبور معمول هستند و عملاً نمیتوان آنها را با حدس زدن یا حملات Brute-Force شکست داد. کلید خصوصی همچنین میتواند با یک عبارت عبور (Passphrase) محافظت شود که لایه امنیتی دیگری اضافه میکند.
Fail2Ban یک ابزار پیشگیری از نفوذ است که فایلهای لاگ سرور را اسکن میکند. اگر تعداد تلاشهای ورود ناموفق (مثلا وارد کردن رمز عبور اشتباه) از یک آدرس IP مشخص از یک حد مجاز فراتر رود، Fail2Ban آن آدرس IP را به طور موقت یا دائم در فایروال مسدود میکند. این کار به طور موثر از حملات Brute-Force جلوگیری میکند.
غیرفعال کردن ورود مستقیم کاربر Root یک گام حیاتی است، اما کافی نیست. باید از حسابهای کاربری عادی با رمزهای عبور یا کلیدهای قوی استفاده کنید و تنها در صورت لزوم با دستور sudo یا su به دسترسی Root ارتقا پیدا کنید. همچنین باید ورود را فقط برای کاربران مجاز محدود کنید.


























شما میتوانید دیدگاه خود را در مورد این مطلب با ما با اشتراک بگذارید.