چگونه با استفاده از ویژگیهای پیشرفته OpenSSH، دسترسی به سرور SSH را امن کنیم؟ #
مقدمه #
پوسته امن (SSH) یک پروتکل ارتباطی شبکه است که به کاربران اجازه میدهد تا به طور ایمن از طریق شبکههای ناامن مانند اینترنت به یک کامپیوتر از راه دور متصل شوند. SSH از معماری کلاینت-سرور پیروی میکند که در آن برنامه کلاینت به SSH Daemon میزبانی شده در یک سرور مقصد متصل میشود.
OpenSSH (پوسته امن OpenBSD) یک پیادهسازی سرویس SSH است که شامل مجموعهای از ابزارها برای شنود ایمن اتصالات ورودی، احراز هویت و اعطای دسترسی سرور به کلاینتهای مجاز است. برای محافظت از یک سرور عمومی در برابر حملات رایج شبکه، پیکربندیهای SSH را با استفاده از ویژگیهای پیشرفته OpenSSH که به شما امکان کنترل اینکه چه کسی، چگونه و چه زمانی سرور شما اتصالات کنسول از راه دور را میپذیرد، میدهد، مقاوم کنید.
این مقاله توضیح میدهد که چگونه میتوانید با استفاده از ویژگیهای پیشرفته OpenSSH، دسترسی به سرور SSH را سختتر کنید. شما باید فعالیت کلاینت SSH را کنترل کنید، سطوح اعتماد اتصال را تنظیم کنید، کاربران خاص را در دایرکتوریها محدود کنید و فواصل دسترسی را برای محافظت از سرور در برابر حملات رایج SSH پیادهسازی کنید.
پیش نیازها #
قبل از شروع:
- یک سرور مجازی لینوکس
این مقاله از یک سرور اوبونتو ۲۲.۰۴ استفاده میکند. برای پیادهسازی مراحل روی یک سرور عملیاتی، آزمایش آنها روی یک سرور توسعه با خیال راحت امکانپذیر است.
- برای دسترسی به سرور از SSH استفاده کنید
- یک کاربر sudo غیر ریشه ایجاد کنید
- به حساب کاربری sudo بروید
# su example-user
مرور کلی پیکربندی SSH #
مقاومسازی پیکربندی سرور SSH به شما این امکان را میدهد که:
- کنترل نحوه ورود کاربران سیستم به سرور
- محدود کردن تعداد دفعات ورود کاربر
- تصمیم بگیرید که چه کاربرانی میتوانند از طریق SSH به سرور وارد شوند
- محدود کردن کارهایی که کاربران مجاز میتوانند هنگام ورود به سرور انجام دهند
برای تغییر و مقاومسازی پیکربندیهای سرور SSH، باید فایل پیکربندی اصلی OpenSSH را ویرایش کنید /etc/ssh/sshd_config. هر خط بدون کامنت در این فایل، نشاندهنده یک پیکربندی فعال است که میتوانید آن را مطابق با تنظیمات دلخواه خود تنظیم کنید.
قبل از ایجاد تغییر در پیکربندی سرور SSH، از فایل پشتیبان تهیه کنید.
$ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.ORIGدستور بالا یک کپی از فایل پیکربندی ایجاد میکند که میتوانید برای بازگرداندن هرگونه تغییر، نام آن را به حالت قبل تغییر دهید.
کنترل دسترسی SSH #
در این بخش، اولین لایه دفاعی SSH را با اعمال کنترلهایی بر فرآیند احراز هویت پیادهسازی کنید. با تنظیم نحوه ورود کاربران و مدت زمان غیرفعال بودن یک جلسه، میتوانید سرور خود را در برابر حملات جستجوی فراگیر SSH محافظت کنید. دسترسی کاربر به سرور را همانطور که در مراحل بعدی توضیح داده شده است، کنترل کنید.
با استفاده از یک ویرایشگر متن مانند Nanoیا Vim، فایل پیکربندی اصلی SSH را ویرایش کنید
$ sudo nano /etc/ssh/sshd_configایجاد جفت کلیدهای SSH قوی #
این ssh-keygenابزار، کلیدها را بر اساس الگوریتمهای مختلفی از جمله RSA، DSA، ECDSA و ED25519 تولید میکند. کلیدهای RSA فقط با کلیدهایی با طول بیش از ۲۰۴۸ بیت ایمن هستند. ECDSA و ED25519 هر دو الگوریتمهای جدیدتری هستند که بر اساس رمزنگاری منحنی بیضوی عمل میکنند، برخلاف DSA. از این رو، توصیه میشود از کلیدهای ED25519 مانند زیر استفاده کنید.
- روی دستگاه محلی خود، یک جفت کلید ED25519 ایجاد کنید
$ ssh-keygen -t ed25519 -f /path/to/key/file - کلید عمومی تولید شده را کپی کنید
$ cat ~/.ssh/id_rsa.pub - برای افزودن کلید SSH خود به کلیدهای مجاز،
.sshاگر روی سرور شما ایجاد نشده است، آن را ایجاد کنید.$ mkdir -p ~/.ssh - با استفاده از
echoابزار،~/.ssh/authorized_keysفایل را به صورت زیر اضافه کنید$ echo "your-public-key" >> ~/.ssh/authorized_keys - مجوزهای صحیح را روی فایل اعمال کنید
$ sudo chmod 600 ~/.ssh/authorized_keys - برای ذخیره تغییرات، سرویس SSH را مجدداً راهاندازی کنید
$ sudo systemctl restart sshd
غیرفعال کردن ورود با رمز عبور #
در مقایسه با کلیدهای SSH، مهاجمان با استفاده از رمزهای عبور، سرورهای SSH را با روش جستجوی فراگیر (brute-force) هک میکنند. ورودهای مبتنی بر رمز عبور را برای همه کاربران سیستم غیرفعال کنید، همانطور که در مراحل زیر توضیح داده شده است.
- برای غیرفعال کردن ورودهای مبتنی بر رمز عبور و پذیرش فقط کلیدهای SSH. خط پیکربندی زیر را پیدا کنید
PasswordAuthentication yes - به طور پیشفرض، روی این تنظیم شده است ، برای غیرفعال کردن احراز هویت با رمز عبور
yes، آن را به این تغییر دهیدnoPasswordAuthentication no - برای سختتر کردن تنظیمات سرور، سایر روشهای احراز هویت را مانند زیر غیرفعال کنید.
ChallengeResponseAuthentication no KerberosAuthentication no GSSAPIAuthentication noفایل را ذخیره کنید.
غیرفعال کردن ورود با root #
توصیه میشود sudoersبه جای استفاده rootمستقیم از حساب کاربری، کاربران مدیریتی را به گروه اضافه کنید. دلیل این امر این است که کاربران و برنامههای مخرب میتوانند با دسترسی به حساب کاربری، کل سرور را به خطر بیندازند root. برای افزایش امنیت سرور، دسترسی SSH را برای rootکاربر، همانطور که در زیر توضیح داده شده است، غیرفعال کنید.
- دستورالعمل زیر را پیدا کنید
PermitRootLogin yes noبه شکل زیر تغییرش بدهPermitRootLogin noبه صورت اختیاری، برای اجازه ورود به سیستم با کاربر root، اما محدود کردن استفاده از رمز عبور به شرح زیر
PermitRootLogin prohibit-passwordدستورالعمل فوق اجازه ورود به سیستم root با استفاده از کلیدهای SSH را میدهد، اما نه
rootرمز عبور را خیر. این به یک مدیر اجازه میدهد تا دسترسی انحصاری به پوسته root داشته باشد.فایل را ذخیره کنید
قبل از غیرفعال کردن ورود root در سرور، مطمئن شوید که کاربران sudo غیر root فعال برای اجرای وظایف مدیریتی در سرور دارید. برای رفتن به
rootshell با استفاده از حساب کاربری sudo، دستور زیر را اجرا کنید:
$ sudo suتغییر پورت پیشفرض SSH #
به طور پیشفرض، SSH از پورت ۲۲برای ایمنسازی اتصالات از راه دور به سرور استفاده میکند. اکثر تهدیدات امنیتی SSH، پورت پیشفرض SSH را ۲۲قبل از حمله هدف قرار داده و آزمایش میکنند. برای افزایش امنیت سرور عملیاتی خود، پورت پیشفرض را همانطور که در مراحل زیر توضیح داده شده است، تغییر دهید.
- خط پیکربندی کامنت شده زیر را پیدا کنید.
#Port 22 - از حالت کامنت خارج کنید و عدد را برای بهروزرسانی پورت SSH در حال شنود تغییر دهید. برای مثال، آن را به
۹۰۱۰Port 9010فایل را ذخیره و ببندید
- برای اجازه دادن به اتصالات SSH ورودی روی پورت TCP جدید
۹۰۱۰، پورت را از طریق فایروال مجاز کنید.$ sudo ufw allow 9010/tcpدستور بالا اجازه میدهد تا پورت
۹۰۱۰از طریق فایروال پیشفرض UFW که روی سرورهای Vultr Ubuntu فعال است، انجام شود. در توزیعهای CentOS و RHEL، از Firewalld استفاده کنید. - برای اعمال تغییرات، فایروال را مجدداً راهاندازی کنید
$ sudo ufw reload - در یک پنجره ترمینال جدید، اتصال SSH به سرور خود را روی پورت مورد نظر آزمایش کنید.
۹۰۱۰$ ssh -p 9010 example-user@SERVER-IPدستور بالا پورت صحیح را
۹۰۱۰با استفاده از-pگزینه مشخص میکند. در صورت عدم تعیین پورت، SSH به پورتی متصل میشود۲۲که اتصال را قطع میکند.تغییر شماره پورت SSH “امنیت از طریق گمنامی” است. این کار مانع از کشف شماره پورت صحیح توسط یک مهاجم مصمم نمیشود، اما سرور را از اکثر اسکنرها و رباتهایی که به دنبال سرورهای عمومی آسیبپذیر هستند، محافظت میکند. این کار باعث میشود گزارشهای سرور پاک بمانند و به شما امکان میدهد روی تهدیدات جدیتر تمرکز کنید. علاوه بر این، هنگامی که پورت پیشفرض تغییر میکند، به کاربران سیستم دستور دهید پورت SSH جدید را برای اتصال به سرور مشخص کنند.
تنظیم زمانهای بیکاری #
یک اتصال باز و بیکار، یک تهدید مستقل است زیرا یک کاربر مخرب میتواند از راه دور یا فیزیکی به دستگاه کلاینت دسترسی پیدا کند و دستوراتی را از طرف کاربر اجرا کند. برای محافظت از کاربران سیستم، ClientAliveIntervalپیکربندی بررسی میکند که آیا کلاینت مدتی هیچ دستوری صادر نکرده است یا خیر و پیامی ارسال میکند تا بررسی کند که آیا کلاینت هنوز فعال است یا خیر. هنگامی که کلاینت فعال است، به پیام پاسخ میدهد یا سرور فرآیند را بر اساس ClientAliveCountMaxمقدار تکرار میکند و سپس کلاینت را به عنوان غیرفعال علامتگذاری کرده و اتصال را میبندد.
مهم است که زمانهای انتظار بیکاری (Idle timeout) پایینتری تنظیم کنید تا اتصالات SSH فقط زمانی که کاربر به طور فعال از جلسه استفاده میکند، باز بمانند. در این بخش، مقادیر زمان انتظار مورد نظر خود را مطابق توضیحات زیر تنظیم کنید.
- فایل پیکربندی اصلی OpenSSH را ویرایش کنید
$ sudo nano /etc/ssh/sshd_config - خط پیکربندی کامنت شده زیر را پیدا کنید.
#ClientAliveInterval 0 - آن را به عدد کمتری تغییر دهید. مثلاً
۱۲۰برای نمایش ۲ دقیقهClientAliveInterval 300 # in seconds - دستورالعمل زنده نگه داشتن مشتری را پیدا کنید
#ClientAliveCountMax 3 - از حالت کامنت خارج کنید و مقدار را به
۲کمتر یا بیشتر تغییر دهید تا یک زمان انتظار بیکاری دقیق بر حسب۴دقیقه اعمال شودClientAliveCountMax 3فایل را ذخیره و ببندید
- پیکربندی SSH را برای خطاها آزمایش کنید
$ sudo sshd -t - برای اعمال تغییرات، سرویس SSH را مجدداً راهاندازی کنید
$ systemctl restart sshdتنظیمات فوق به کلاینت اجازه میدهد تا ۴ دقیقه قبل از بسته شدن اتصال SSH غیرفعال بماند. هنگام تنظیم زمانهای غیرفعال، باید بین امنیت و تجربه کاربری تعادل برقرار کنید. مقادیر پایین، جلسه SSH را مجبور به خروج پس از یک دوره کوتاه غیرفعال بودن میکند. این امر آن را ایمنتر میکند. با این حال، کاربران هر بار که جلسه SSH را غیرفعال نگه میدارند، بارها وارد سیستم میشوند که این امر تجربه آنها را خراب میکند.
محدود کردن تلاشهای ورود به سیستم #
کنترلهای SSH مانع از دسترسی غیرمجاز مهاجمان به سرور میشوند. با این حال، سرور SSH قبل از اعطای یا رد دسترسی به کاربر، هر درخواست ورود را پردازش میکند. ثبت تلاشهای ناموفق متعدد برای ورود به سیستم، عملکرد سرور را کاهش میدهد و به حمله انکار سرویس (DoS) کمک میکند.
در این بخش، تعداد دفعات تلاش برای ورود به سرور SSH را محدود کنید تا حملات احتمالی DoS را کاهش دهید.
محدود کردن حداکثر تعداد دفعات تلاش برای ورود به سیستم #
برای محدود کردن تعداد دفعاتی که کاربر باید قبل از پایان درخواست اتصال، رمز عبور صحیح را وارد کند، MaxAuthTriesمقدار را مانند زیر روی عدد کمتری تنظیم کنید.
- خط پیکربندی کامنت شده زیر را پیدا کنید.
#MaxAuthTries 6 - از حالت کامنت خارج کنید و مقدار را به عدد کوچکتری تغییر دهید. برای مثال
۲MaxAuthTries 2مقدار فوق حداکثر تعداد دفعات تلاش برای ورود به سیستم برای هر کاربر را تعیین میکند
۲. وقتی کاربری دو بار رمز عبور اشتباه را وارد کند، اتصال SSH با یک پیام خطا بسته میشود و کاربر میتواند با راهاندازی مجدد اتصال، دوباره تلاش کند.فایل را ذخیره کنید.
پیکربندی فوق به کاربران اجازه میدهد تا دو بار با استفاده از یک رمز عبور معتبر، دسترسی به سرور را امتحان کنند. در مواردی که کاربر چندین کلید SSH دارد، بسته به حداکثر مقدار شما، یک وقفه زمانی رخ میدهد. هنگام استفاده از چندین کلید SSH، کاربر باید مسیر کلید را برای اتصال به سرور بدون عبور از محدودیت، مانند زیر مشخص کند.
$ ssh -i /path/to/key/file example-user@SERVER-IP
دوره ورود به سیستم را کاهش دهید #
وقتی کاربری به سرور متصل میشود، سرور SSH به مدت ۱۲۰ ثانیه (۲ دقیقه) منتظر میماند تا کاربر با رمز عبور یا کلید SSH صحیح با موفقیت احراز هویت شود. اگر کاربر در این مدت احراز هویت نشود، اتصال با خطا بسته میشود. در طول این دوره مجاز، یک مهاجم ممکن است روشهای مختلفی مانند آپلود اسکریپت را برای دسترسی به سرور امتحان کند. حداکثر دوره مجاز را کاهش دهید تا مدت زمانی که کاربر میتواند قبل از احراز هویت با سرور تأخیر داشته باشد را محدود کنید.
- خط پیکربندی کامنت شده زیر را پیدا کنید
#LoginGraceTime 2m - از حالت کامنت خارج کنید و مقدار را به عدد کمتری بر حسب دقیقه تغییر دهید. به عنوان مثال
۳۰، زمان پاسخ به درخواست را به ۳۰ ثانیه محدود کنید.LoginGraceTime 30فایل را ذخیره کنید.
تعداد اتصالات غیرمجاز را محدود کنید #
به طور پیشفرض، وقتی ۱۰ اتصال همزمان در انتظار احراز هویت هستند، سرویس SSH به طور تصادفی شروع به رد ۳۰٪ از تمام تلاشهای اتصال جدید میکند. نرخ رد اتصال را با استفاده از MaxStartUpsدستورالعمل کنترل کنید. به طور پیشفرض روی تنظیم شده است ۱۰:۳۰:۱۰۰، آن را بهروزرسانی کنید تا اتصالات را بر اساس مقادیر شما مانند زیر رد کند.
- خط کامنت شده زیر را پیدا کنید
#MaxStartups 10:30:100 - از حالت کامنت خارج کنید و مقدار را به … تغییر دهید.
۵:۳۰:۱۰MaxStartUps 5:30:10مقدار فوق در صورتی که ۵ اتصال باز در انتظار احراز هویت باشند، اتصالات جدید را رد میکند و در صورتی که بیش از ۱۰ اتصال احراز هویت نشده در انتظار باشند، هیچ اتصال جدیدی را نمیپذیرد.
فایل را ذخیره کنید.
بسته به کاربران سرور شما، سرورهای بزرگ سازمانی برای مدیریت خوب ترافیک کاربران به مقادیر بالاتری نیاز دارند. مقدار مثال بالا برای سرورهای کوچکتر با ۱ تا ۵ کاربر SSH همزمان مناسب است.
محدود کردن تعداد جلسات فعال برای هر کاربر #
گاهی اوقات، کاربران SSH بسته به عملیات جاری ممکن است حداکثر ۵ اتصال SSH برقرار کنند. با این حال، گاهی اوقات مهاجمان ممکن است در طول حملات MITM (مرد میانی) جلسات اضافی راهاندازی کنند. برای افزایش امنیت سرور خود، تعداد جلسات فعال برای هر کاربر را همانطور که در زیر توضیح داده شده است، محدود کنید.
- خط کامنت شده زیر را پیدا کنید
#MaxSessions 10 - از حالت کامنت خارج کنید و مقدار را به … تغییر دهید.
۵MaxSessions 5فایل را ذخیره و ببندید
مقدار فوق تعداد جلسات فعال مجاز برای هر کاربر را به محدود میکند
۵. هنگامی که کاربر بیش از تعداد۵جلسات را راهاندازی میکند، جلسه اضافی با موفقیت متصل نمیشود.
اعطای دسترسی SSH به کاربران مجاز #
کاربران سیستم شامل کاربران ادمین (sudo) و استاندارد هستند. بسته به تنظیمات سرور شما، به عنوان مثال، ممکن است فقط یک گروه کاربری خاص به امتیازات SSH نیاز داشته باشند. برای ایمنسازی سرور SSH خود، با استفاده از دستورالعملهای ، ، و مانند زیر، IT departmentمشخص کنید که کدام کاربران سیستم از SSH روی سرور استفاده کنند .AllowUsersDenyUsersAllowGroupsDenyGroups
این بخش از مقادیر مثال زیر استفاده میکند، تمام موارد را با جزئیات واقعی خود جایگزین کنید:
- کاربران: example-user، Johndoe، user2
- گروهها: مدیران فناوری اطلاعات
- آدرسهای آیپی: ۱۹۲.۰.۲.۱۰۰، ۱۹۲.۰.۲.۸، ۱۹۲.۰.۲.۵۰
- فایل پیکربندی OpenSSH را ویرایش کنید
$ sudo nano /etc/ssh/sshd_config - برای اینکه فقط به کاربران اجازه داده شود
example-userوuser2از طریق SSH وارد سیستم شوند، دستور زیر را به انتهای فایل اضافه کنید.AllowUsers example-user user2قانون فوق اجازه میدهد
example-userوuser2میتوان از هر آدرس IP وارد شد - برای اینکه به کاربران خاص اجازه دهید فقط از آدرسهای IP خاص وارد سیستم شوند، دستورالعمل زیر را اضافه کنید
AllowUsers example-user@192.0.2.100 user2@192.0.2.8 - برای اینکه به هر کاربر مجاز اجازه ورود از آدرسهای IP معتبر داده شود، دستورالعمل زیر را اضافه کنید.
AllowUsers *@192.0.2.100 *@192.0.2.8 *@192.0.2.50 - برای اجازه دادن به هر کاربر از یک زیرشبکه بلوک ۸
AllowUsers *@trusted.ip.subnet/8برای مثال، اگر به کاربران زیرشبکه اجازه دسترسی بدهید
۱۹۲.۰.۲.۰/۸، به این معنی است که همه کاربران با آدرسهای IP منبع۱۹۲.۰.۲.۱میتوانند۱۹۲.۰.۲.۲۵۵به سرور وارد شوند.برای استفاده از آدرسهای IP وایلد کارت، میتوانید دستورالعمل بالا را به صورت زیر بازنویسی کنید.
AllowUsers *@192.0.2.* - برای اعطای دسترسی SSH به کاربران یک گروه خاص، به عنوان مثال
IT_Admins، دستور زیر را به فایل اضافه کنید.AllowGroups IT_adminsفایل را ذخیره کنید و ببندید.
قانون فوق مشخص میکند که فقط کاربران متعلق به
IT_adminsمیتوانند با استفاده از SSH به سرور وارد شوند. - پیکربندی SSH را برای خطاها آزمایش کنید
$ sudo sshd -t
وقتی دستورالعملهای
AllowUsersوAllowGroupsدر فایل پیکربندی OpenSSH موجود نباشند، همه کاربران و گروهها میتوانند با استفاده از SSH به سرور وارد شوند. با این حال، وقتی دستورالعملها موجود باشند، دسترسی فقط به کاربران و گروههای خاص اعطا میشود و هیچ کاربر سیستم دیگری نمیتواند با استفاده از SSH روی سرور وارد شود.
محدود کردن اقدامات کاربر SSH #
علاوه بر اجازه دادن به کاربران و گروههای کاربری خاص، میتوان اقداماتی را که یک کاربر خاص میتواند روی سرور انجام دهد نیز محدود کرد. این یک لایه امنیتی اضافی اضافه میکند که کاربران غیرمجاز را از انجام اقدامات خاص روی سرور محدود میکند.
در این بخش، اقدامات کاربر SSH را با استفاده از دستورات، کلیدهای SSH یا مجموعه دستورات، همانطور که در زیر توضیح داده شده است، محدود کنید.
محدودیتهای کاربر و گروه #
- برای اعمال قوانین سفارشی روی کاربران خاص، از این
Matchدستورالعمل استفاده کنید. به عنوان مثال، برای کار رویexample-user، پیکربندی زیر را در انتهای فایل اضافه کنیدMatch User example-user - برای محدود کردن کاربر برای اجرای یک دستور خاص روی سرور، به عنوان مثال،
topدستورالعمل زیر را بلافاصله پس ازmatchتعریف اضافه کنید.Match User example-user ForceCommand "top"بلوک پیکربندی فوق
example-userمجوزهایی برای اجرایtopدستور اعطا میکند و مجوز کاربر را برای هرگونه دستور دیگر روی سرور سلب میکند. پس از ورود،topدستور به طور خودکار در جلسه کاربر اجرا میشود. هنگامی که کاربر ازtopبرنامه خارج میشود، جلسه پایان مییابد. - برای محدود کردن یک کاربر به اجرای فقط یک اسکریپت خاص روی سرور، دستورالعمل زیر را به پیکربندی خود اضافه کنید.
ForceCommand "/path/to/script.sh" - برای تطبیق با یک گروه کاربری خاص به جای یک کاربر واحد،
Match Groupاز دستور زیر برای ایجاد یک بلوک جدید استفاده کنید.Match Group IT_Admins ForceCommand "top"فایل را ذخیره و ببندید
بلوک Match فوق، کاربران گروه را
IT_Adminsصرفاً به اجرایtopدستور محدود میکند. وقتی کاربری از برنامه خارج میشود، جلسه SSH پایان مییابد. - پیکربندی SSH را برای خطاها آزمایش کنید
$ sudo sshd -tیک مورد استفاده رایج هنگام محدود کردن کاربران و گروههایی که از این
Matchبلوک استفاده میکنند، تنظیم حسابهای کاربری فقط SFTP روی سرور است .
محدودیتهای کلید SSH #
برای افزودن یک لایه امنیتی بیشتر، محدودیتهایی را برای استفاده از کلیدهای SSH جداگانه اعمال کنید. این ~/.ssh/authorized_keysفایل شامل فهرستی از تمام کلیدهای SSH مجاز برای دسترسی به آن حساب کاربری خاص است. به طور پیشفرض، کلیدها به شکل زیر نمایش داده میشوند:
ALGORITHM KEY USER@HOSTبرای مثال:
ecdsa-sha2-nistp521 AAAAE2VjZ.....KEY-BODY...Lf+FNXv00Pd+A== user@user's-PCدر مثال بالا، ecdsa-sha-nistp521الگوریتمی که برای تولید کلید استفاده میشود چیست؟ بدنه کلید SSH با شروع میشود AAAAو با خاتمه مییابد 00Pd+A==. user@user's-PCنام کاربری و نام میزبان کاربر مجاز به استفاده از این کلید است.
- برای اعمال محدودیتهای خاص کلید SSH، محدودیت را بلافاصله قبل از فهرست اضافه کنید. به عنوان مثال، برای محدود کردن کاربر به اجرای فقط یک دستور خاص، از
command=""پرچم زیر استفاده کنید.command="ls"عبارت فوق، کاربر SSH Key را فقط به
lsدستور محدود میکند. - اعمال محدودیت دستور روی کلید SSH
command="ls" ecdsa-sha2-nistp521 AAAAE2VjZ.....KEY-BODY...Lf+FNXv00Pd+A== user@user's-PCوقتی کاربر یک جلسه SSH را با این کلید شروع میکند، دستور
lsاجرا میشود و اگر دستور با موفقیت اجرا شود، جلسه پایان مییابد.
محدود کردن کاربران به مجموعهای از دستورات #
- برای محدود کردن یک کاربر به مجموعهای از دستورات، یک اسکریپت سفارشی ایجاد کنید که به کاربر اجازه میدهد از مجموعهای از دستورات موجود انتخاب کند. به عنوان مثال، اسکریپت زیر به کاربر اجازه میدهد بین دستورات
lsand یکی را انتخاب کندtop.#!/bin/bash echo "1. ls" echo "2. top" read -p 'Choose the number corresponding to one of the above options: ' choice # Read the choice from the user case $choice in ۱) ls ;; ۲) top ;; *) exit ;; esacاسکریپت را در دایرکتوری خانگی خود به عنوان ذخیره کنید
ssh_script.sh - اعطای امتیازات اجرا به اسکریپت
$ chmod u+x /home/example-user/ssh_script.shبرای اجرای اسکریپت، از علامتهای یا قبل از کلید SSH مجاز استفاده
ForceCommandکنیدcommand=. command=""اسکریپت را با استفاده از دستور زیر روی کاربر SSH Key هدف اعمال کنید.command="/home/example-user/ssh_script.sh" ecdsa-sha2-nistp521 AAAAE2VjZ.....KEY-BODY...Lf+FNXv00Pd+A== an@fbsdvm- در فایل پیکربندی اصلی OpenSSH، از
Matchبلوک برای اعمال اسکریپت بهexample-userصورت زیر استفاده کنید.Match User example-user ForceCommand "/home/example-user/ssh_script.sh"فایل را ذخیره و ببندید
هنگام
example-userورود به سرور،script.shشرطی برای کاربر اجرا میشود که بخش هدف را بر اساس شماره انتخاب کند. کاربر میتواند برای هر موردls، عدد ۱ یا برای هر مورد، عدد ۲ را انتخاب کندtop. سیستم دستور انتخاب شده را اجرا میکند و پس از اتمام اتصال، آن را میبندد.
کاربران سیستم Chroot #
OpenSSH به شما امکان میدهد کاربران سیستم را در دایرکتوریهای خاص زندانی کنید. این امر هنگام محدود کردن کاربران به دایرکتوریهای خاص سیستم به جای دسترسی نامحدود به تمام فایلهای سرور، اهمیت دارد. در عوض، فقط کاربران خاص میتوانند به دایرکتوریهای خاصی دسترسی داشته باشند که یک لایه امنیتی اضافی برای محافظت از دادههای سرور ایجاد میکند.
در این بخش، user2همانطور که در زیر توضیح داده شده است، دسترسی به دایرکتوری خانگی را محدود کنید و دسترسی به سایر دایرکتوریهای غیر خانگی را غیرفعال کنید.
- فایل پیکربندی OpenSSH را ویرایش کنید
$ sudo nano /etc/ssh/sshd_config - یک بلوک جدید اضافه کنید
Matchو دایرکتوری jail کاربر را مانند زیر مشخص کنیدMatch User user2 ChrootDirectory /home/user2/به صورت اختیاری، برای محدود کردن کل یک گروه کاربری مانند
Finance_Adminsیک دایرکتوری مشترک،/usr/share/departmentدستورالعمل زیر را اضافه کنید:Match Group Finance_Admins ChrootDirectory /usr/share/department/فایل را ذخیره و ببندید
- پیکربندی SSH را برای خطاها آزمایش کنید
$ sudo sshd -t - هر منبع اشتراکی را به دایرکتوری jail پیوند دهید. به عنوان مثال، برای پیوند دادن و اشتراکگذاری فایلها از
/optدایرکتوری، دستور زیر را اجرا کنید$ sudo ln -s /opt/files /home/user2/files - مجوزهای صحیح دایرکتوری را تنظیم کنید
$ sudo chmod 755 /home/user2/files - هنگام استفاده از گروهها، مالکیت دایرکتوری Chroot را به صورت زیر به گروه تغییر دهید.
$ sudo chown :Finance_Admins /usr/share/department/ - به همه کاربران گروه، مجوزهای خواندن، نوشتن و اجرا در دایرکتوری را اعطا کنید
$ sudo chmod 770 /usr/share/department/
با تنظیم دستورالعملهای Chroot در پیکربندی SSH خود، میتوانید کاربران را در یک دایرکتوری خاص حبس کنید و هر فایل لازم را برای دسترسی به آن دایرکتوری پیوند دهید.
بنرهای هشدار دهنده را نمایش دهید #
بسته به تعداد کاربران SSH روی سرور، نمایش یک بنر MOTD با هشدارها یا اطلاعیههای مهم بسیار مهم است. هنگامی که کاربری اتصال SSH را به سرور برقرار میکند، پیام قبل از اجرای هر دستوری در جلسه نمایش داده میشود. یک بنر هشدار معمولی میتواند شامل سیاستهای امنیتی، سیاست حفظ حریم خصوصی، حقوق قانونی و قوانین استفاده از سیستم باشد.
- برای تنظیم بنر هشدار SSH، یک فایل متنی جدید در یک مکان قابل دسترس مانند … ایجاد کنید.
/opt$ sudo touch /opt/ssh-banner.txt - فایل را ویرایش کنید
$ sudo nano /opt/ssh-banner.txt - محتوای بنر هشدار زیر را به فایل اضافه کنید
************************************************************************ This is a private computer. By using this system, you consent to having all activity monitored. System administrators may provide activity logs to law enforcement. Unauthorized users or usage may be subject to legal action. Do not store private data on this computer. Users are responsible for securely storing their personal access keys. ************************************************************************فایل را ذخیره و ببندید
بنر هشدار بالا را با اعلان دلخواه خود که در کنار
/etc/motdپیام سیستم نمایش داده میشود، تغییر دهید. - برای اعمال بنر هشدار، فایل پیکربندی OpenSSH را ویرایش کنید.
$ sudo nano /etc/ssh/sshd_config - دستورالعمل زیر را به فایل اضافه کنید
Banner /opt/ssh-banner.txtفایل را ذخیره و ببندید
- پیکربندی OpenSSH را برای خطاها آزمایش کنید
$ sudo sshd -t - برای اعمال تغییرات در پیکربندی سرور، سرویس SSH را مجدداً راهاندازی کنید.
$ sudo systemctl restart sshd
تست #
برای تأیید اینکه پیکربندیهای سرور SSH شما به درستی اعمال شدهاند، یک اتصال جدید به سرور برقرار کنید و پیکربندی خود را برای هر حساب کاربری مانند زیر آزمایش کنید.
- تأیید کنید که نمیتوانید با استفاده از یک دستور SSH معمولی به سرور متصل شوید
$ ssh example-admin@SERVER-IP - با استفاده از پورت دلخواه خود به سرور متصل شوید
۹۰۱۰$ ssh -p 9010 example-admin@SERVER-IP - پس از اتصال، جلسه SSH را پایان دهید
$ exit - با استفاده از یک حساب کاربری محدود یا عضوی از یک گروه محدود، اتصال SSH جدیدی برقرار کنید
$ ssh -p 9010 example-user@SERVER-IP - هنگام اتصال، تأیید کنید که کاربر فقط میتواند به
topدستور دسترسی داشته باشد. topبرای خروج از برنامه و تأیید قطع اتصال SSH، کلیدهای :Key:Ctrl: + :Key:Q: را فشار دهید.- یک اتصال SSH جدید برقرار کنید و رمز عبور حساب کاربری را اشتباه وارد کنید. در تلاش دوم، مطمئن شوید که SSH درخواست شما را مسدود میکند.
$ ssh -p 9010 user2@SERVER-IP
بسته به پیکربندیهای SSH خود، میتوانید کاربران و گروههای خاص را به اقدامات و مدت زمانهای خاص روی سرور محدود کنید تا با سیاستهای امنیتی شما مطابقت داشته باشند.
نتیجهگیری #
در این مقاله، شما سرور SSH خود را با استفاده از ویژگیهای پیشرفته OpenSSH در یک سرور Vultr Ubuntu مقاومسازی کردهاید. هنگامی که سرور SSH شما حاوی دستورالعملهای پیکربندی امن باشد، اکثر تهدیدهای امنیتی نمیتوانند از محدودیتهای سرور شما عبور کنند، به همین دلیل، دادهها و برنامههای کاربردی شما به درستی و بدون هیچ فایل خراب اجرا میشوند.
برای اطلاعات بیشتر در مورد گزینههای پیکربندی پیشرفته OpenSSH موجود، به بخش پنجم صفحه sshd_configراهنما مراجعه کنید.
$ man 5 sshd_config