DevOps Engineer / personal Site : sadeghkhademi.com
امن کردن دسترسی 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="ipv4"
source address="1.2.3.4/32"
port protocol="tcp" port="2223" 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 انجام می دهند را شامل می شود. اگر سؤال یا پیشنهادی دارید، مواردی وجود دارد که میتوان به این مطلب اضافه نمود را می توانید در قسمت نظرات بگذارید.
اگر این مطلب را دوست داشتید آن را ❤️ کنید و به دوستان خود معرفی کنید. باعث خوشحالی خواهد بود که نظر و تجربه خود را در قسمت نظرات به اشتراک بگذارید.
مطلبی دیگر از این انتشارات
مقدمهای بر اصطلاحات شبکه و پروتکلها
مطلبی دیگر از این انتشارات
دواپس؛ ارائه نرمافزار، با دغدغه و مسئولیتپذیری مشترک
مطلبی دیگر از این انتشارات
HTTPS چگونه کار میکند ؟