امن کردن دسترسی SSH

بررسی اجمالی

پروتکل SSH، تقریباً برای همه توزیع های لینوکسی پروتکل مدیریت از راه دور پیش فرض است. SSH با استفاده از رمزگذاری داده ها، محرمانگی و یکپارچگی را فراهم می کند و رمزهای عبور را دیگر به صورت متنی ساده از طریق شبکه ارسال نمی کند. با این وجود، پیکربندی پیش فرض SSH می تواند سرور را در معرض خطر امنیتی قرار دهد.
به همین دلیل چند مرحله ساده برای امن‌تر کردن سرور SSH را در این مطلب مطرح می‌کنیم که می تواند خطر را به طرز چشمگیری کاهش دهد.

ssh
ssh

پیش نیازها

در این مطلب فرض بر این است که شما قبلاً سرور RHEL / CentOS را نصب و راه اندازی کرده اید.

۱. غیرفعال کردن Root Logins

استفاده از کاربر root برای ورود به سیستم از طریق SSH توصیه نمی شود. بهترین روش استفاده از کاربر عادی برای ورود به سرور و استفاده از دستور sudo برای انجام وظیفه ای است که به root نیاز دارد. برای غیرفعال کردن ورود کاربر root به سیستم از طریق SSH ، پرونده etc/ssh/sshd_config را به شکل زیر تغییر دهید و سرویس SSH را مجدداً راه اندازی کنید.

#vim /etc/ssh/sshd_config
PermitRootLogin no
#systemctl restart sshd

۲. ورود کاربران به سیستم را محدود کنید

بطور پیش فرض، کلیه کاربران معتبر در سیستم قادر به دسترسی به سرور هستند. به دلایل امنیتی، ما باید این دسترسی را فقط برای کاربرانی که نیاز به دسترسی SSH دارند محدود کنیم. پارامتر AllowUsers و به دنبال آن یک لیست جداگانه از نام کاربری ها را به پرونده etc/ssh/sshd_config اضافه کنید. در مثال زیر ، فقط دو کاربر "nix" و "jamshid" وجود دارند که می توانند از طریق SSH به سرور وصل شوند.

$sudo vim /etc/ssh/sshd_config
AllowUsers  nix jamshid
$sudo systemctl restart sshd

۳. پروتکل 1 را غیرفعال کنید

استفاده از پروتکل 1 SSH از امنیت کمتری برخوردار است. ما باید آن را غیرفعال کنیم و همیشه از پروتکل 2 استفاده کنیم. پرونده etc/ssh/sshd_config را ویرایش کرده و سرویس SSH را به شرح زیر مجدداً راه اندازی کنید.

$sudo vim /etc/ssh/sshd_config
Protocol 2
$sudo systemctl restart sshd

۴. پورت پیش فرض را تغییر دهید

پورت 22 درگاه پیش فرض SSH برای اتصالات ورودی است. یک روش مؤثر تغییر درگاه پیش فرض SSH است، با این کار قسمتی از حملات که توسط روبات ها انجام می‌شود را خنثی می‌کنید.

$sudo vim /etc/ssh/sshd_config
Port 2223
$sudo systemctl restart sshd

اکنون باید SELinux را بررسی کنیم که اجرای دستور زیر، درگاه های sshd که مجاز به گوش دادن هستند را نمایش می‌دهد.

$sudo semanage port -l | grep ssh
ssh_port_t                     tcp      22

برای اینکه sshd بتواند به درگاه جدید 2223 گوش دهد، باید یک قانون به SELinux اضافه کنیم و سرویس SSH را به شرح زیر محدد راه اندازی کنیم.

$sudo semanage port -a -t ssh_port_t -p tcp 2223
$sudo systemctl restart sshd

۵. فایروال را پیکرپندی کنید

برای تقویت امنیت، باید فایروال رو تنظیم نماییم تا دسترسی به پورت تغییر یافته 2223 فقط از طریق آدرسهای IP مجاز محدود شود. پس از تغییرات قوانین فایروال لازم است که فایروال را reload کنید.

firewall-cmd --permanent --zone=public --add-rich-rule='
  rule family=&quotipv4&quot
  source address=&quot1.2.3.4/32&quot
  port protocol=&quottcp&quot port=&quot2223&quot accept'

firewall-cmd --reload

۶. فاصله زمانی اتصال را محدود کنید

اگر دوره اتمام اتصال SSH در سرور تنظیم نشده باشد، یک خطر امنیتی است. در بسیاری موارد، افراد بدون قفل کردن رایانه خود آن را ترک می‌کنند و SSH هنوز به سرور متصل است. بنابراین، این می تواند مشکل ساز شود. پرونده etc/ssh/sshd_config را ویرایش کنید و مدت زمان را بر حسب ثانیه تغییر دهید.

$sudo vim /etc/ssh/sshd_config
 ClientAliveInterval 300
 ClientAliveCountMax 0
 $sudo systemctl restart sshd

۷. حداکثر "عدم تأیید اعتبار" را محدود کنید

محدود کردن حداکثر عدم تأیید هویت با SSH روش خوبی برای متوقف کردن حملات brute-forcing است. اگر کاربر رمز ورود نادرست را N-1 بار از N بار را به اشتباه وارد کند ، اتصال SSH قطع خواهد شد.

$sudo vim /etc/ssh/sshd_config
MaxAuthTries 5
$sudo systemctl restart sshd

۸. آدرس گوش دادن را محدود کنید

پیکربندی پیش فرض SSH به تمام اینترفیس‌های موجود گوش می دهد. اگر چندین اینترفیس‌ در سرور وجود دارد که با آدرس های مختلف IP پیکربندی شده اند، همیشه بهتر است فقط با استفاده از آدرس IP مدیریت، کاربر را برای ورود به سرور محدود کنید.

$sudo vim /etc/ssh/sshd_config
ListenAddress 192.168.10.112
$sudo systemctl restart sshd

۹. پشتیبانی از فایل های Rhosts را غیرفعال کنید

فایل rhosts کنترل می‌کند که سرور برای دسترسی SSH به سایر سرورها با یک حساب کاربری خاص به آنها اعتماد دارند. اگر سروری به سرور دیگری اعتماد کند، آنگاه به کاربر مشخص شده امکان دسترسی SSH به سرور های قابل اعتماد را بدون نیاز به وارد کردن رمز عبور می دهد.

$sudo vim /etc/ssh/sshd_config
IgnoreRhosts yes
$sudo systemctl restart sshd

۱۰. غیرفعال کردن Empty Passwords

در بعضی موارد ، ممکن است یک حساب کاربری خاص روی سرور رمز عبوری تنظیم نکرده باشد یا دارای رمز خالی باشد. بهتر است همیشه دسترسی این کاربران از طریق SSH به سرور را غیرفعال کنید.

$sudo vim /etc/ssh/sshd_config
PermitEmptyPasswords no
$sudo systemctl restart sshd

۱۱. تأیید هویت مبتنی بر میزبان را غیرفعال کنید

تأیید هویت مبتنی بر میزبان به میزبان اجازه می دهد از طرف همه یا برخی از کاربران میزبان خاص تأیید هویت کنند. این حسابها می توانند همه حسابهای یک سیستم یا زیرمجموعه مشخص شده باشند. این نوع احراز هویت می تواند برای مدیریت cluster مفید باشد.

$sudo vim /etc/ssh/sshd_config
HostbasedAuthentication no
$sudo systemctl restart sshd

۱۲. فعال کردن Informational Log Level

خوب است که سرور SSH را پیکربندی کنید تا اطلاعات سطح INFO را ثبت کند. از آنجا که SSH یک نقطه ورود به سرور است، توصیه می شود تا حد امکان log سیستم جمع‌آوری شود، بنابراین در هنگام بروز مشکل، اطلاعات جامعی را داریم.

$sudo vim /etc/ssh/sshd_config
LogLevel INFO
$sudo systemctl restart sshd

۱۳. کاهش حداکثر تعداد اتصالات همزمان

کاهش حداکثر تعداد اتصالات همزمان به Daemon SSH می تواند در مقابل حمله brute-force کمک کننده باشد. تنظیم MaxStartups 4 به سرور ssh می گوید فقط 4 کاربر می توانند همزمان وارد سیستم شوند.

$sudo vim /etc/ssh/sshd_config
MaxStartups 4
$sudo systemctl restart sshd

۱۴. کاهش Grace Time

هنگامی که ما سعی می کنیم از طریق SSH به یک سرور راه دور وصل شویم، پیکربندی پیش فرض برای ورود به ما 2 دقیقه زمان خواهد داد. اگر کاری را انجام ندهیم یا نتوانیم با موفقیت در مدت 2 دقیقه وارد سیستم شویم، SSH قطع خواهد شد. زمان پیش فرض 2 دقیقه برای موفقیت در ورود به سیستم بسیار زیاد است. آن را به 1 دقیقه کاهش دهید.

$sudo vim /etc/ssh/sshd_config
LoginGraceTime 1m
$sudo systemctl restart sshd

۱۵.غیرفعال کردن رمزعبور SSH

تا زمانی که از رمزهای عبور قوی استفاده می کنید ، لازم نیست که ورود با استفاده از رمز را برای سرور خود غیرفعال کنید. با این حال ، اگر دوست دارید می توانید آن را غیرفعال کنید و از کلید SSH برای ورود به سرور خود استفاده کنید.

$sudo vim /etc/ssh/sshd_config
PasswordAuthentication no
$sudo systemctl restart sshd

اگر با کلید های SSH آشنایی ندارید، میتوانید مطلب "احراز هویت مبتنی بر SSH key در لینوکس" را دنبال نمایید.

نتیجه گیری

در این مطلب، تکنیک های که برای ایمن سازی سرور SSH لازم بود مطرح شد. این پست تقریباً تمام کارهایی را که اکثر کاربران برای hardening سرور SSH انجام می دهند را شامل می شود. اگر سؤال یا پیشنهادی دارید، مواردی وجود دارد که می‌توان به این مطلب اضافه نمود را می توانید در قسمت نظرات بگذارید.

اگر این مطلب را دوست داشتید آن را ❤️ کنید و به دوستان خود معرفی کنید. باعث خوشحالی خواهد بود که نظر و تجربه خود را در قسمت نظرات به اشتراک بگذارید.