ایمن سازی یا OpenSSH

supermod 19 خرداد 1396 ۰ دیدگاه

در این مقاله قصد داریم با ایمن سازی یا OpenSSH آشنا شویم. بدین منظور ابتدا با OpenSSH آشنا خواهیم شد:

 OpenSSH

ایمن‌سازی یا OpenSSH، همانند پروتکل telnet عمل می‌کند و تعدادی عملیات را برای ایمن‌سازی ارتباط و محیط سیستم‌عامل به‌عنوان نصب SSH می‌توان مطرح کرد.

ایمن سازی یا openssh

استفاده از نام کاربری و رمز عبور قوی

یکی از مهم‌ترین مسائلی که به آن باید توجه داشت، جلوگیری از لو رفتن نام کاربری و رمز عبور است. به خاطر داشته باشید استفاده از نام کاربری و رمز عبور قوی طبق استانداردها سبب می‌شود امنیت بیشتر و امکان حدس زدن و یا شناختن آن بسیار کاهش یابد. برای ایجاد یک رمز عبور قوی لازم است تا از یک (Password generator) استفاده کنید، یا اگر خود می‌خواهید آن را انتخاب کنید نکات زیر را در آن رعایت کنید:

  • حداقل تعداد کاراکترها در آن ۸ باشد.
  • استفاده از کاراکترهای (Upper & Lower case) در آن.
  • در آن هم از کاراکتر الفبا و هم از اعداد استفاده شود.
  • از کاراکترهای غیر الفبایی نیز در آن استفاده گردد.

جلوگیری از لاگین شدن root

تنظیمات مربوط به SSH در آدرس (/etc/ssh/sshd_config) است. بنابراین برای جلوگیری از ورود root دستورهای زیر را اجرا می‌کنیم.

# Prevent root logins:

PermitRootLogin no

و سپس restart می‌کنیم:

service sshd restart

اگر نیاز به دسترسی root داشتید، می‌توانید در ابتدای دستورات مورد نظر خود از پیشوند (Su) استفاده کنید.

محدود کردن لاگین‌های کاربران

به یاد داشته باشید تنها به افرادی اجازه‌ی ورود به سیستم بدهید که نیاز دارند و از اعطای این حق به همه خودداری کنید. برای مشخص کردن کاربرانی که مجوز وارد شدن دارند، ابتدا باید آن‌ها را تعریف کرد. به تنظیمات SSH در آدرس (/etc/ssh/sshd_config) بروید و نام کاربری کاربران را اضافه کنید.

AllowUsers allice bob

غیرفعال کردن پروتکل ۱

SSH دارای دو پروتکل است که با نام‌های پروتکل ۱ و پروتکل ۲ شناخته می‌شود. پروتکل ۱ به‌نسبت دارای امنیت کمتری است و می‌بایست آن را غیرفعال کنید؛ مگر آن که بدانید مستقیماً به همان نیاز دارید. برای غیر فعال کردن این پروتکل باز به تنظیمات SSH در آدرس (/etc/ssh/sshd_config) می‌رویم و پروتکل را (uncomment) می‌کنیم:

# Protocol 2,1

 Protocol 2

 سپس sshd را restart می‌کنیم.

استفاده از پورت‌های کمتر شناخته

به‌طور پیش‌فرض ssh برای دریافت کانکشن‌ها از پورت ۲۲ استفاده می‌کند؛ اگر هکری بخواهد به سیستم شما نفوذ کند، به راحتی می‌تواند با اسکن کردن پورت ۲۲ به اطلاعات پی ببرد. بنابراین لازم است تا پورت آن را از حالت پیش فرض به یکی از پورت‌های دیگر تغییر دهیم. بسیاری از افراد پورت ۲۲۲۲ را به‌عنوان پورت جایگزین و یا ۸۰۸۰ را به‌عنوان پورت جایگزین برای (http) قرار می‌دهند. البته انتخاب پورت ۲۲۲۲ خیلی عاقلانه نیست؛ چرا که بدلیل شباهت به پورت ۲۲ هکرها حتماً آن را نیز اسکن می‌‍کنند. بهتر است پورتی را انتخاب کنید که کمتر شناخته شده باشد. برای این‌که تنظیمات پورت را تغییر دهید:

# Run ssh on a non-standard port:

Port 2345  #Change me

و سپس ssh را restart کنید. به یاد داشته باشید این تغییرات پورت را در فایروال و روترها نیز تأثیر گذار است و باید تغییراتی در آن‌ها نیز ایجاد کنید. برای مثال در CentOS 7 نیاز است تا تغییرات زیر در فایروال انجام گیرد:

$ firewall-cmd --add-port 2345/tcp

$ firewall-cmd --add-port 2345/tcp --permanent

در سیستم‌عامل‌های CentOS 6 و بالاتر نیاز است تا (selinux ، Labeling) را نیز تنظیم کنید.

$ semanage port -a -t ssh_port_t -p tcp 2345 #Change me

برای شناساندن پورت ssh به کلاینت نیز از دستور زیر استفاده می‌کنیم:

ssh -p 2345 myserver

فیلتر کردن SSH در فایروال

اگر شما تنها یک IP برای دسترسی کنترل از راه دور دارید، بهتر است تا دیگر ارتباط‌ها را در فایروال مثلا توسط Iptable‌ ها  فیلتر کنید:

iptables -A INPUT -p tcp -s 72.232.194.162 --dport 22 -j ACCEPT

اگر شما نمی‌توانید آدرس IP مبدأ را محدود کنید و می‌بایست که پورت SSH را باز بگذارید، در آن صورت استفاده از 0Iptabl ها می‌توانند جلوی حمله‌ی (Brute-force attack) را با مسدود کردن لاگین‌های تکراری از یک IP آدرس بگیرند.

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name ssh --rsource iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent ! --rcheck --seconds 60 --hitcount 4 --name ssh --rsource -j ACCEPT

دستور اول (IP‌)هایی که ورود یا سعی بر ورود می‌کنند را رکورد و نگه‌داری می‌کند و دستور دوم چک می‌کند که ‌(IP) ورودی در۶۰ ثانیه بیش از ۴ باز قصد ورود نداشته باشد. آن‌گاه اجازه دسترسی به آن داده می‌شود.

استفاده از کلیدهای عمومی و خصوصی

استفاده از کلیدهای رمزدار شده برای احراز هویت دو هدف اصلی را تأمین می‌کند. اول این‌که دیگر نیازی به وارد کردن رمز عبورهای سخت و طولانی نیست و ثانیاً بدون وجود کلید خصوصی (private) دیگر نمی‌توان احراز هویت کرد و وارد شد؛ درصورتی‌که قبلا با داشتن رمز عبور هر کسی می‌توانست به سیستم وارد شود و خطر حمله‌های تشخیص رمز نیز کاهش می‌یابد.

ابتدا یک جفت کلید (public/private) را در کلاینت خود ایجاد کنید و سپس آن را با سرور به اشتراک بگذارید. توجه داشته باشید هر کلاینتی که نیاز به برقراری ارتباط با سرور داشته باشد نیاز به داشتن این کلید دارد.

ssh-keygen -t rsa

این دستور سبب ایجاد دو فایل مخفی با نام‌های (id_rsa) «کلید خصوصی»، و (id_rsa.pub) «کلید عمومی» در دایرکتوری (~/..ssh) می‌سازد.

توجه داشته باشید بهتر است تا این کلید رمز گردد؛ وگرنه کلید به دست هر کسی بیفتد و سیستم شما دسترسی پیدا کند می‌تواند با سرور ارتباط برقرار کند.

پس از آن برای private key حق و مجوز تعریف کنید:

chmod 700 ~/.sshchmod 600 ~/.ssh/id_rsa

پس از آن کلید عمومی را بر روی سرور ذخیره کنید و (authorized_key) را نصب کنید:

cat id_rsa.pub >> ~/.ssh/authorized_keys

و نهایتاً اگر (StrictModes) در (/etc/ssh/sshd_config) به‌عنوان پیش‌فرض (Y) تعریف شده باشد، نیاز است تا حقوق دسترسی آن را مشخص کنید:

chmod 700 ~/.sshchmod 600 ~/.ssh/authorized_keys

مطمئن شوید قسمت‌های درستی از (SELinux) تنظیم شده‌اند:

restorecon -Rv ~/.ssh

برای غیرفعال کردن رمز عبور به‌طور کامل می‌توان از دستور زیر استفاده کرد:

# Disable password authentication forcing use of keys

PasswordAuthentication no

استفاده از پرسش‌های متداول

برای مثال در ابتدای برای ورود سوال پرسیده می‌شود که: سیستم‌عامل CentOS از ورژن (X) و ورژن پیش از آن (Y) استفاده می‌کند. ورژن (X) دارای یک نقص است، آن را به‌روز‌رسانی کنم؟

در پاسخ باید جواب منفی داده شود؛ چرا که طبق صورت سوال ورژن (X) آخرین نسخه است و بعد از آن ورژن جدیدی نیامده است.

OpenSSH
فناوران شبکه سینداد (دانش بنیان)

سینداد یعنی هدیه‌ی سیمرغ، یا فرزند سیمرغ؛ به عبارتی یعنی خود سیمرغ، با همه ی شگفتی هایش، اما جوانتر و سرزنده تر. و این چیزی است که ما سعی می کنیم در سینداد باشیم. از سال ۱۳۸۵ دانش مان را به صورت خدماتی در حوزه ی هاستینگ، شبکه و تولید نرم افزار در اختیار مشتریان مان قرار داده ایم و به این افتخار می کنیم که تک تک آنها تا به امروز همراه ما مانده اند. باور داریم که سینداد صرفاً یک شرکت نیست، بلکه نوعی باور است به ارائه ی شگفت انگیز از هر چیز.