نوشته‌ها

امنیت سرور لینوکس: امن سازی لاگین روت

در سیستم عامل لینوکس اکانت روت (root) به کل سیستم دسترسی دارد. بنابرین باید دسترسی به روت تا حد امکان محدود و دشوار باشد تا هکرها نتوانند به راحتی دسترسی روت پیدا کنند.

 

بستن اتصال ssh برای root

اولین مرحله در امن سازی اکانت root در لینوکس، بستن دسترسی ssh برای این اکانت است. برای این کار فایل /etc/ssh/sshd_config را ویرایش کرده و خط زیر را به آن اضافه کنید:

PermitRootLogin no

در صورتی که می‌خواهید اکانت روت همچنان قابلیت اتصال ssh با کلید خصوصی شما را داشته باشد، می‌توانید به جای no از آپشن prohibit-password استفاده کنید:

PermitRootLogin prohibit-password

 

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

با افزایش دفعاتی که رمز عبور شما هش (hash) می‌شود، امنیت لاگین به سرور لینوکسی شما نیز افزایش پیدا می‌کند؛‌ زیرا هکر باید برای کرک کردن رمز عبور روت، هش‌های بیشتری را پردازش کند. بصورت پیشفرض در سیستم‌های لینوکسی، shadow پنج هزار بار رمز عبور شما را هش می‌کند. با ویرایش آپشن زیر در فایل /etc/pam.d/passwd می‌توانید دفعات هش رمز عبور را افزایش دهید، اما به خاطر داشته باشید که با افزایش این عدد، لاگین شما به سرور لینوکس هم کندتر خواهد شد.

password required pam_unix.so sha512 shadow nullok rounds=65536

 

رمز عبور شما بعد از انجام این تنظیمات به صورت خودکار هش مجدد نمی‌شود، بنابرین باید بعد از انجام تغییرات،‌ یک بار رمز عبور خود را تنظیم کنید:

passwd $username

 

لاگین امن با اکانت روت

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

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

useradd admin

یک رمز عبور پیچیده هم برای آن انتخاب کنید:

passwd admin

سپس با ویرایش فایل /etc/sudoers.d/admin-account و اضافه کردن خط زیر، دسترسی سودو (sudo) یا سوپر یوزر را برای این اکانت فعال کنید:

admin ALL=(ALL) ALL

 

 استفاده از کیبورد امن لاگین ترمینال لینوکس

کلید امن لاگین (Secure Attention Key)، ترکیبی از کلیدهای کیبورد است که پروسه‌های اضافه در بک گراند صفحه لاگین ترمینال را می‌بندد تا از عدم وجود پروسه بدافزارها (تروجان و نرم افزارهای جاسوسی که برای گرفتن یا شنود رمز عبور استفاده می‌شوند) اطمینان حاصل کند. بنابراین قبل از وارد کردن کلمه عبور اکانت سرور حتما این کلیدهای لاگین امن را وارد کنید.

 

فعال سازی کیبورد امن لاگین سرور

توالی کلیدهای امن (SAK) در سرورهای لینوکسی فعال است. این توالی به صورت پیشفرض ALT+SYSRQ+K است. اما این کلیدها فقط زمانی کار می‌کنند که کرنل لینوکس با پشتیبانی از sysrq کامپایل شده باشد. بنابرین پیشنهاد می‌شود برای استفاده از SAK دنباله کلیدهای خود را در loadkeys تعریف کنید. با توجه به اینکه ctrl+alt+del از قبل برای ریبوت سرور رزرو شده است، ما در این مقاله از ctrl-alt-pause استفاده می‌کنیم. برای تعریف این دنباله دستور زیر را در فایل rc.sysinit (یا rc.local) اضافه کنید:

echo "control alt keycode 101 = SAK" | /bin/loadkeys

 

حالا می‌توانید با خیال راحت قبل از وارد کردن رمز اکانت روت، دنباله مذکور را وارد کنید تا تمام برنامه‌هایی که /dev/console را باز کرده‌اند، بسته شوند. ممکن است پراسس‌ها یا برنامه‌هایی هم به صورت ناخواسته بسته شوند، به خصوص برنامه‌هایی که به اشتباه /dev/console را باز کرده‌اند. در این صورت به جای لینوکس، توزیع و پکیج‌هایی که از آن استفاده می‌کنید را سرزنش کنید. می‌توانید از دستور زیر برای مشاهده پراسس‌هایی که با زدن کلید امن لاگین بسته می‌شوند، استفاده کنید.

# ls -l /proc/[0-9]*/fd/* | grep console

l-wx------    1 root     root           64 Mar 18 00:46 /proc/579/fd/0 -> /dev/console

یکی از معیارهای مهم سایت‌ها، سرعت بارگذاری آن‌ها است. سرعت وبسایت نه تنها باعث رضایت بازدیدکنندگان از سایت می‌شود، بلکه به صورت مستقیم روی سئو سایت و رتبه سایت در موتورهای جستجو تاثیر می‌گذارد. یکی از روش‌هایی که تاثیر به سزایی در افزایش سرعت سایت دارد، پیاده‌سازی سیستم کش (cache) است. با توجه به استفاده فراوان از سایت‌های وردپرس (wordpress)، افزونه‌های زیادی برای کش کردن سایت وجود دارند. گرچه نصب افزونه‌های کش بسیار راحت بوده، اما کارایی آن در مقابل سیستم کش ngnix به مراتب پایین‌تر است.

اگر سایت شما دیر لود می‌شود و TTFB (time to first byte) بالایی دارد، استفاده از سیستم کش nginx تاثیر زیادی روی افزایش سرعت سایت وردپرس شما خواهد داشت. TTFB به معنای زمان دریافت اولین بایت از سرور است و گاها تا چند ثانیه طول کشیده و سایت شما را کند می‌کند. با نصب و پیکربندی سیستم کش، این زمان تا کمتر از ۳۰۰ میلی ثانیه کاهش پیدا می‌کند. در صورتی که سرور شما به میزان کافی حافظه رم دارد، می‌توانید با انتقال فضای کش از هارد به رم،‌ سرعت سایت خود را بیش از پیش افزایش دهید. استفاده از nginx cache در کنار php-fpm ترکیبی بسیار پرسرعت برای سایت شما خواهد بود.

اولین مرحله در کانفیک کش nginx (که از FastCGI استفاده می‌کند)‌، اضافه کردن کدهای زیر به به قسمت http در فایل nginx.conf است. این فایل معمولا در آدرس زیر قرار دارد.

vim /etc/nginx/nginx.conf

fastcgi_cache_path /etc/nginx-cache levels=1:2 keys_zone=phpcache:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";

در این تنظیمات، phpcache اسم key zone و 100m بیانگر میزان فضای اختصاص یافته به حافظه کش (به مگابایت) است. 60m هم مدت زمانی است که در صورت عدم تقاضای داده، آن‌ها از کش پاک می‌شوند. همچنین /etc/nginx-cache هم نشان‌دهنده محل ذخیره سازی فایل‌های کش nginx است.

مابقی تنظیمات باید در فایل nginx مربوط به سایت انجام شود.‍

vim /etc/nginx/sites-enabled/default

location ~ [^/]\.php(/|$) {
fastcgi_cache phpcache;
fastcgi_cache_valid 200 30m;
fastcgi_cache_methods GET HEAD;
add_header X-Fastcgi-Cache $upstream_cache_status;
}

در این مرحله می‌توانید سرویس nginx را ریستارت کنید. فراموش نکنید که قبل از آن حتما تنظیمات nginx را چک کنید.

nginx -t
service nginx restart

حالا سیستم کش سایت شما فعال شده و باید افزایش سرعت سایت را به طور محسوس ببینید. در سایت مورد بررسی شرکت پیشگامان، میانگین TTFB (یا همان Server response time) از بیش از ۵ ثانیه به کمتر از ۵۰۰ میلی ثانیه کاهش پیدا کرد و امتیاز سرعت سایت در ابزار سنجش سرعت سایت گوگل (PageSpeed Insights) از ۴۰ به ۸۶ افزایش داشت.

سیستم پیاده سازی شده فایل‌های کش را روی هارد دیسک ذخیره می‌کند. در صورتی که از SSD یا NVMe استفاده می‌کنید کارایی بالاتری خواهید داشت. در هر صورت استفاده از حافظه رم کارایی به مراتب بالاتری خواهد داشت. برای انتقال حافظه کش nginx به رم، کافی است خط زیر را به fstab اضافه کرده، فایل را ذخیره کرده و آن را مونت کنید.

vim /etc/fstab

tmpfs /etc/nginx/cache tmpfs defaults,size=100M 0 0

mount -a

برای مشاهده میزان استفاده از فضای تخصیص یافته به سیستم کشینگ سایت، از این دستور استفاده کنید:

df -h

به خاطر داشته باشید که در صورت استفاده از حافظه رم برای ذخیره سازی کش وبسایت، اگر سرور ریست شود حافظه کش نیز پاک شده و مجددا صفحات سایت کش خواهند شد. در صورت نیاز به پاک کردن دستی کش nginx هم می‌توانید وارد دایرکتوری کش سایت شده و فایل‌ها را پاک کنید.

اگه کانال آپاراتِ شرکت پیشگامان رو دنبال کرده باشید، حتما می‌دونید ویدیوهای آموزشی پایتون و بلاک چین ما اونجا قرار می‌گیره. حالا تصمیم گرفتیم تا این ویدیوهای آموزشی رو اینجا هم براتون قرار بدیم. اولین ویدیو، مربوط به آموزش ابتدایی و آشنایی با بلاک چین هست، اکثر افراد بلاک چین رو از طریق بیت کوین میشناسن؛ به همین دلیل، اولین بخش این آموزش به معرفی و بررسی ویژگی‌های بیت کوین می‌پردازه. بقیه این ویدیو هم شامل موضوعات زیر میشه:

  • بیت کوین چیست؟
  • بلاک چین چیست؟
  • با بلاک چین چی کار میشه کرد؟
  • چرا باید بلاک چین رو یاد بگیرید؟
  • کاربرد بلاک چین در دنیای واقعی چیه؟
  • چطور می‌تونیم برنامه نویسی بلاک چین رو شروع کنیم؟

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

نصب و پیکربندی این ابزار روی سرورهای لینوکس بسیار آسان است. در ادامه، آموزش نصب و تنظیم آن روی لینوکس اوبونتو ۱۸.۰۴ را خواهید خواند. البته این آموزش برای توزیع های دیگر سرور لینوکس هم کم و بیش همینگونه است.

نصب

برای نصب این ابزار کافی است در ترمینال دستور زیر را وارد کنید:

sudo apt-get install denyhosts -y

پیکربندی

اولین کاری که باید پس از نصب انجام دهید، اضافه کردن آی پی های مجاز است؛ در غیر این صورت ممکن است دسترسی خودتان به سرور را هم بلاک کنید. ابتدا فایل مربوطه را باز کرده، سپس آی پی های مجاز را در انتهای آن اضافه کنید:

sudo nano /etc/hosts.allow
sshd: [IP 1]
sshd: [IP 2]
sshd: [IP 3]

بعد از اضافه کردن آی پی ها، فایل را ذخیره کرده و آن را ببندید. برای تغییر تنظیمات این ابزار فایل زیر را باز کنید:

sudo nano /etc/denyhosts.conf

در این مرحله می‌توانید تنظیمات امنیتی مختلف را تغییر دهید، به عنوان مثال آپشن زیر تعداد لاگین‌های ناموفقی که باعث بلاک شدن کاربر می‌شود را مشخص می‌کند:

DENY_THRESHOLD_INVALID = 5

همچنین می‌توانید با استفاده از آپشن زیر، ایمیلی که می‌خواهید هشدارها به آن ارسال شود را تعیین کنید:

ADMIN_EMAIL =

توجه داشته باشید که این ابزار به صورت پیشفرض از پورت ۲۵ لوکال برای ارسال ایمیل استفاده می‌کند. در صورت نیاز به تغییر، می‌توانید از تنظیمات زیر استفاده کنید:

SMTP_HOST =
SMTP_PORT =
SMTP_FROM =

بعد از انجام تنظیمات مورد نظر، یک بار سرویس denyhosts را ریست و فعال کنید:

sudo systemctl restart denyhosts
sudo systemctl enable denyhosts

بررسی لاگ

ابزار denyhosts به صورت پیشفرض رخدادها را لاگ می‌کند، برای مشاهده لاگ‌های امنتیی به صورت  بلادرنگ، از دستور زیر استفاده کنید:

tail -f /var/log/auth.log

حالا می‌توانید با خیال راحت SSH کرده و سرور لینوکس خود را مدیریت کنید.