OpenSSH یا Secure Shell به عنوان یک استاندارد جهت ارتباط Remote با سرور های لینوکسی استفاده می شود. استفاده از تنظیمات پیشفرض SSH هیچگاه کامل نبوده و زمانی که یک سرور SSH را راه اندازی می کنید، چند قدم کوتاه اما مفید وجود دارند که می تواند نصب شما را مقداری سخت کند، اما این گام ها، گام هایی مثبت در جهت افزایش امنیت سرور OpenSSH شماست با ما همراه باشید…
۱- استفاده از Username و Password پیچیده برای افزایش امنیت سرور OpenSSH
یکی از اولین مواردی که باید به آن توجه داشته باشید این است که اگر شما یک سرور SSH راه اندازی کرده اید و در فضای اینترنت قرار داده اید، احتمالا سرور شما تحت حمله توسط هکر هایی قرار خواهد گرفت که تلاش میکنند Username / Password شما را به دست بیاورند. بطور معمول هکر ها پورت ۲۲ (پورت پیش فرض SSH) را Scan میکنند تا ماشین هایی که SSH را Run کرده اند پیدا کنند، سپس تحت حملات Brute Force تلاش می کنند تا اطلاعات ورود شما را به دست آورند. با داشتن پسورد های قوی و پیچیده هر حمله ای ثبت خواهد شد و پیش از به ثمر رسیدن جلوی آن گرفته خواهد شد.
امیدواریم که در حال حاضر نیز شما از پسورد های پیچیده استفاده می کنید اما اگر این چنین نیست، پسوردی بامشخصات زیر انتخاب نمایید:
- حداقل شامل ۸ کاراکتر
- شامل حروف بزرگ و کوچک
- شامل اعداد
- شامل حداقل یک کاراکتر مانند ^,%,#,@ و …
۲- غیر فعال کردن دسترسی ROOT برای افزایش امنیت سرور OpenSSH
تنظیمات SSH Server در مسیر /etc/ssh/sshd_config دخیره شده است. برای غیر فعال کردن دسترسی root باید کد زیر را در فایل sshd_config وارد نمایید:
سپس از طریق ترمینال سرویس SSH را Restart نمایید:
در مواقعی که نیاز به دسترسی root دارید می توانید از دستور su استفاده کنید.
دستور su (Switch User , Super User , Substitute User) به کاربر اجازه میدهد دسترسی Root را با وارد کردن پسورد Root به دست بیاورد.
۳- افزایش امنیت سرور OpenSSH با محدود کردن دسترسی کاربران
دسترسی به SSH میتواند تنها محدود به کاربرانی باشد که نیاز به استفاده از SSH دارند. اگر شما اکانت های کاربری زیادی روی سیستم خود دارید میتوانید دسترسی به SSH را به کاربرانی اعطا کنید که واقعا با SSH سر و کار دارند. برای این کار بایستی یک خط با دستور AllowUsers در فایل sshd_config اضافه کنید. کد باید به این شکل باشد که بعد از دستور AllowUsers یک فاصله قرار بگیرد و نام User مورد نظر اضافه شود و User های دیگر نیز با یک فاصله از هم جدا می شوند.
۴- غیر فعال کردن Protocol 1 برای افزایش امنیت سرور OpenSSH
SSH از دو پروتکل استفاده می کند. Protocol 1 و Protocol 2. پروتکل قدیمی تر Protocol 1 است که از امنیت کمتری برخوردار است و بایستی تا زمانی که مشخصا مورد نیاز نیست غیر فعال باشد.
۵- استفاده از یک پورت غیر استاندارد (پورت به غیراز ۲۲)
همانطور که پیشتر گفتیم بصورت پیشفرض SSH برای ارتباطات ورودی از پورت ۲۲ استفاده میکند. هکر ها میتوانند به راحتی با اسکن کردن پورت ۲۲ متوجه شوند SSH روی ماشین شما در حال اجرا است یا خیر! یک روش اثر بخش برای جلوگیری از حملات هکر ها این است که پورت SSH را از پورت پیش فرض ۲۲ به به یک پورت غیر استاندارد تغییر دهید. هر پورت بدون استفاده ای (ترجیحا یک پورت بالای ۱۰۲۴ ) میتواند مورد استفاده قرار بگیرد. خیلی از افراد از پورت ۲۲۲۲ برای این کار استفاده میکنند (زیرا به راحتی به ذهن سپرده میشود) مانند پورت ۸۰۸۰ که اغلب به عنوان جایگزین پورت ۸۰ (HTTP) استفاده میشود. اما در این مورد پورت ۲۲۲۲ بهترین انتخاب نیست! به این دلیل که هکر ها بعد از پورت ۲۲ پورت ۲۲۲۲ را اسکن می کنند. بهتر است یک پورت تصادفی بالای ۱۰۲۴ که برای سرویس خاصی استفاده نمیشود انتخاب کنید. برای اعمال این تغییر یک خط مانند الگوی زیر را به فایل sshd_config اضافه کنید.
سپس سرویس SSH را Restart نمایید.
نکته: فراموش نکنید که بعد از این تغییر باید حتما Incoming پورت مورد نظر را در Firewall مورد استفاده در شبکه خود باز کنید.
در سیستم عامل CentOS 6 و بالاتر باید حتما Selinux را هم Update نمایید و پورت مورد استفاده حتما به درستی علامت گذاری شود. در غیر اینصورت SSH جلوی دسترسی به آن را می گیرد. به شما پیشنهاد می شود برای کسب اطلاعات در حوزه آموزش نصب centos مقاله را مطالعه نمایید.
برای مثال: در اینجا پورت ۲۳۴۵ مورد استفاده قرار گرفته است.
بعد از این با توجه به این که SSH دیگر روی پورت استاندارد ۲۲، Listen نمیکند، شما نیاز خواهید داشت شماره پورت جدید را به کاربرانی که قصد ارتباط با SSH را دارند اعلام کنید. برای تعیین پورت باید از طریق Command Line در SSH Client دستور زیر را وارد نمایید:
اگر به نظر شما آزار دهنده میرسد هر بار برای اتصال به SSH این روال را تکرار کنید، قطعه دستورات زیر را در فایل config واقع در مسیر ~/.ssh/config قرار دهید.
توجه داشته باشید که باید به فایل ~/.ssh/config دسترسی به شکل زیر اعطا نمایید.
۶- افزایش امنیت سرور OpenSSH با محدود کردن دسترسی به SSH از طریق Firewall
اگر شما فقط نیاز دارید که توسط یک IP خاص به SSH متصل شوید و نیاز به دسترسی به SSH از طریق IP دیگری را ندارید میتوانید نحوه اتصال به SSH را محدود به IP خاصی نمایید. برای انجام این کار می توانید یک Rule در Router ایجاد نمایید و یا از طریق دستور iptables دسترسی به پورت ۲۲ را فقط به IP مورد نظر محدود نمایید. برای مثال کد زیر دسترسی به آی پی ۱۰.۲۰.۳۰.۴۰ را روی پورت ۲۲ باز کرده و دسترسی به مابقی IP ها را به پورت ۲۲ می بندد:
اگر شما امکان محدود کردن دسترسی ها فقط از طریق یک IP را ندارید نگران نباشید. Iptables همچنان میتواند جلوی حملات Brute-Force را از طریق ثبت تعداد Login ها و Block کردن IP هایی که تلاش های متعدد برای ارتباط با پورت ۲۲ را دارند بگیرد. برای مثال:
اولین Rule تعداد تلاش های IP ها برای دسترسی به پورت ۲۲ به ثبت می کند.
دومین Rule بررسی میکند اگر آن IP برای ۴ یا بیش از ۴ بار تلاش نا موفق برای ارتباط با پورت ۲۲ را داشته است در Blacklist قرار می دهد و در غیر اینصورت ارتباط برقرار می شود.
نکته ۱: توجه داشته باشید که در صورتی که Rule برای Accept کردنIP های خاصی را ایجاد کرده باشید شامل این محدودیت ها نمی شود.
نکته ۲: در صورتی که برای ارتباط با SSH از یک پورت غیر استاندارد استفاده میکنید به جای ۲۲ در مثال های بالا از شماره پورت تعریف شده استفاده نمایید.
۷- افزایش امنیت سرور OpenSSH با استفاده از Public/Private Key برای احراز هویت
استفاده از کلید رمزنگاری شده برای احراز هویت شامل ۲ منفعت است.
اول این که احراز هویت را ساده تر می کند، به این شکل که دیگر نیازی به وارد کردن پسورد برای ورود ندارید (به شرط این که برای Key ها پسورد تعیین نکنید که در ادامه توضیح داده خواهد شد).
دوم این که میتوانید بعد از این که یک بار Public/Private Key را تولید کردید احراز هویت از طریق پسورد را بصورت کامل غیر فعال کنید. به این معنی که بدون Key امکان ورود به SSH ممکن نباشد. در نتیجه ردیابی پسورد به طور کلی منتفی خواهد شد.
پروسه ایجاد Public/Private Key برای احراز هویت و نصب روی سرور برای استفاده از آن برای ورود به SSH نسبتا ساده است.
در ابتدا باید یک جفت Public/Private Key روی سیستم لوکال ایجاد نمایید که برای اتصال به سرور استفاده میشود (شما نیاز خواهید داشت تا این پروسه را روی هر ماشینی که قصداتصال دارد انجام دهید) :
این دستور دو فایل در مسیر مخفی ~/.ssh شما ایجاد میکند. یک فایل به نام id_rsa که Private Key است و یا فایل به نام id_rsa.pub که Public Key شماست.
اگر نمی خواهید برای هربار که قصد اتصال دارید از شما Passphrase (Passphrase اساسا یک پسورد است که روی یک Public Key مشخص قرار داده میشود) خواسته شود زمانی که دستور بالا را برای تولید Public/Private Key اجرا میکنید جایی را که درخواست وارد کردن Passphrase را دارد با فشردن دکمه Enter رد کنید. این به شما بستگی دارد که تصمیم بگیرید یک Passphrase از Public Key شما محافظت کند یا خیر! اگر از Passphrase برای محافظت از Public Key استفاده نکنید در نتیجه هر کسی که به سیستم شما دسترسی پیدا کند بصورت اتوماتیک دسترسی Remote به SSH هم دارد. همچنین Root در سرور طبیعتا به Key های شما دسترسی دارد. اگر دلیلی برای نداشتن اعتماد به Root دارید، پس در دردسر بزرگی افتاده اید! رمزنگاری Public Key امنیت بیشتری را برای شما به ارمغان می اورد و زمانی که برای وارد کردن Passphrase در هر بار اتصال صرف می کنید دقیقا مشابه به وارد کردن پسورد است، با این تفاوت که به جای وارد کردن پسورد SSH ،Passphrase را برای باز کردن دسترسی Public Key وارد می نمایید.
حال زمان تنظیم کردن دسترسی های Private Key است دستور زیر را روی سیستم لوکال اجرا نمایید:
حال Public Key (id_rsa.pub ) را روی سرور کپی کنید و در لیست Authorized_keys نصب کنید:
نکته: زمانی که یک Public Key را در سرور اضافه می کنید می توانید بعدا آن را حذف کنید.
در پایان دسترسی های زیر را در سرور اعمال نمایید:
دسترسی های زیر در صورتی که StrictModes روی مسیر /etc/ssh/sshd_config تنظیم شده باشد ضروری می باشد.
با دستور زیر مطمئن شوید زمینه SELinux به درستی تنظیم شده است:
حال زمانی که اقدام به لاگین به سرور می کنید از شما پسوردی خواسته نمی شود (مگر این که نیاز باشد Passphrase را وارد کنید). بصورت پیش فرض SSH ابتدا از طریق Key احراز هویت را انجام می دهد. اگر Key را پیدا نکند و یا احراز هویت Fail شود، به سراغ احراز هویت از طریق پسورد مرسوم می رود.
یعد از یک بار امتحان می توانید از طریق Public/Private Key وارد سرور شوید، در نهایت امیدواریم با خواندن این مقاله راه کارهای افزایش امنیت سرور OpenSSH را آموخته باشید.
[irp posts=”۱۹۳۶″ name=”آموزش ساخت پسورد پیچیده + معرفی نرم افزار مدیریت رمز عبور پیچیده”]