25 نکته برای بالا بردن امنیت سرورهای لینوکس

25 نکته برای بالا بردن امنیت سرورهای لینوکس

25 نکته برای بالا بردن امنیت سرورهای لینوکس

Linux-Security-and-Hardening

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

ایمن سازی سیستم از هکرها یک وظیفه ای چالش برانگیز برای مدیران IT است. این اولین مقاله مرتبط با “چگونگی ایمن سازی لینوکس باکس” و یا “سخت سازی لینوکس باکس” است. در این نوشته 25 نکته کاربردی را برای ایمن سازی سیستم لینوکسی شما ارائه می دهیم و امیدواریم که برای شما در ایمن سازی سیستم های لینوکسی مفید باشد.

  1. امنیت فیزیکی سیستم: گام نخست غیر فعال سازی بوت  CD/DVD از Bios  سیستم ، تجهیزات بیرونی، فلاپی درایو تنظیم نمایید. سپس، پسورد BIOS را تنظیم کرده و همچنین پسورد GRUB را برای محدود کردن دسترسی فیزیکی به سیستم خود فعال نمایید.
  2. پارتیشن بندی دیسک: مهم است که پارتیشن های متعددی برای بدست آوردن امنیت بالاتر داده در موارد اتفاقات پیش بینی نشده داشته باشید. با ایجاد پارتیشن های متعدد، داده می تواند جداسازی و گروه بندی شود. وقتی که تصادف غیر منتظره اتفاق می افتد، فقط داده ها در یک پارتیشن خاص آسیب می بینند، در حالی که دیتا در دیگر پارتیشن ها بدون آسیب می مانند. شما باید مطمئن شوید که پارتیشن های زیر را دارید و سایر اپلیکیشن ها باید در یک فایل سیستم مجاز تحت/opt نصب گردند.
/
/boot
/usr
/var
/home
/tmp
/opt
  1. پکیج ها را حداقل کنید تا آسیب پذیری به حداقل برسد

آیا واقعا می خواهید تمام سرویس ها را نصب کنید؟ پیشنهاد می گردد که از نصب پکیج های بدون استفاده پرهیز کنید تا از آسیب پذیری در پکیج ها جلوگیری کنید. این ممکن است ریسک آسیب در یک سرویس را که می تواند منجر به آسیب به سایر سرویس ها شود را به حداقل برساند. سرویس های بدون استفاده را یافته و آنها را حذف و یا غیر فعال کنید تا آسیب پذیری به کمترین حد ممکن برسد. از فرمان “chkconfig” برای پیدا کردن سرویس های که بر روی runlevel 3 اجرا شده اند استفاده کنید.

# /sbin/chkconfig –list |grep ’3:on’

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

# chkconfig serviceName off

از RPM package manager مانند “yum” یا “apt-get” برای لیست کردن همه پکیج های نصب شده بر سیستم استفاده کرده و آنها را با فرمان های زیر حذف کنید.

# yum -y remove package-name

# sudo apt-get remove package-name

  1. پورت های شبکه در حال Linstening را کنترل کنید.

با کمک فرمان شبکه “netstat” می توانید کلیه پورت های باز و برنامه های مربوطه را مشاهده نمایید. همانگونه که در بالا گفته شد، از فرمان”chkconfig” برای غیرفعال کردن کلیه سرویس های ناخواسته بر روی سیستم استفاده کنید.

# netstat -tulpn

  1. از Secure Shell)SSH) استفاده کنید.

پروتکل های telnet و rlogin از متن ساده و رمزگذاری نشده استفاده می کنند که ناقض امنیت هستند. SSH یک پروتکل امن است که از تکنولوژی رمز گذاری در طول ارتباط با سرور استفاده می کند.

بجز موارد ضروری هرگز با کاربر root به طور مستقیم وارد سیستم نشوید. از فرمان “sudo” برای اجرای سایر فرمان ها استفاده کنید. “sudo” در فایل /etc/sudoers قرار گرفته است که می تواند توسط visudo که در ویرایشگر VI باز می شود، ویرایش می شود.

همچنین پیشنهاد می شود که پورت SSH 22 پیش فرض را با بعضی پورت های سطح بالاتر تعویض کنید. تنظیمات اصلی SSH را باز کرده و پارامتر های زیر را برای دسترسی کاربران عادی محدود کنید.

# vi /etc/ssh/sshd_config

غیر فعالسازی لاگین با root

PermitRootLogin no

اجازه تنها به کاربران خاص

AllowUsers username

از نسخه 2 پروتکل SSH استفاده کنید

Protocol 2

 

  1. مرتبا سیستم را بروز رسانی کنید.

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

# yum updates

# yum check-update

  1. Cronjob ها را قفل کنید.

Cron ویژگی مخصوص به خود را دارد، که اجازه می دهد مشخص کنید چه کسانی باید و چه کسانی نباید jobها را اجرا کنند. این امر با استفاده از فایل های /etc/cron.allow و /etc/cron.deny کنترل می شود. برای بستن دسترسی یک کاربر به cron ، به سادگی نام کاربر را در cron.deny اضافه کنید و برای اجازه دادن به یک کاربر برای اجرای cron آن را در cron.allow اضافه کنید. اگر تمایل به غیر فعال کردن همه کاربران در استفاده از cron دارید خط “ALL” را در فایل cron.deny اضافه کنید.

# echo ALL >>/etc/cron.deny

  1. استفاده از فلش مموری ها توسط پورت USB را غیر فعال کنید.

بسیاری از دفعات این اتفاق پیش می آید که ما می خواهیم کاربران را از استفاده از فلش مموری برای حفاظت از داده ها در برابر سرقت محدود کنیم. یک فایل با عنوان “/etc/modprobe.d/no-usb” ایجاد کرده و با اضافه کردن خط زیر ذخیره سازها بر روی پورت USB از دسترس خارج می شوند.

install usb-storage /bin/true

  1. از SELinux استفاده کنید.

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

SELinux سه حالت اصلی عملکرد را ارائه می دهد که عبارتند از:

  • Enforcing: این یک حالت پیش فرض است که خط مشی امنیتی SELinux در ماشین را فعال و اجرا می کند.
  •  Permissive: در این حالت،SELinux خط مشی امنیت ماشین را اجرا نخواهد کرد، فقط امور مربوط لاگ برداری و اعلان ها انجام می شود. این حالت برای ایرادیابی موارد مرتبط با SELinux بسیار مفید است.
  • Disabled: SELinux غیر فعال شده است.

شما می توانید وضعیت فعلی SELinux را از خط فرمان با استفاده از “system-config-selinux” و “getenforce” و یا “sestatus”مشخص کنید.

# sestatus

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

# setenforce enforcing

همچنین می توان با استفاده از فایل آدرس “/etc/selinux/config” می توانید این فایل را مدیریت کنید.

  1. دسکتاپ KDE/GNOME را حذف کنید.

نیازی به اجرای دسکتاپ های X Window مانند KDE ویا GNOME بر روی سرور اختصاصی LAMP شما وجود ندارد. شما می توانید آنها را برای افزایش امنیت سرور و بهبود عملکرد آن حذف و یا غیر فعال کنید.

# yum groupremove “X Window System”

  1.  IPv6 را غیر فعال کنید.

اگر از پروتکل IPv6 استفاده نمی کنید، باید آن را غیر فعال کنید، زیرا بیشتر اپلیکیشن ها و Policy ها به پروتکل IPv6 نیاز ندارند و در حال حاضر وجود این پروتکل در سرور ضروری نیست. به فایل network configuration رفته و خطوط زیر را برای غیر فعال کردن IPv6 به آن اضافه کنید.

# vi /etc/sysconfig/network

NETWORKING_IPV6=no

IPV6INIT=no

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

عدم اجازه به کاربران برای استفاده از کلمات عبور قدیمی که قبلا از آن استفاده کرده اند، بسیار کاربردی است. فایل کلمات عبور قدیمی در /etc/security/opasswd ذخیره شده است. با استفاده از ماژول PAM این فایل قابل دسترسی است.

فایل “etc/pam.d/system-auth” را تحت RHEL یا CentOS یا Fedora باز کنید.

# vi /etc/pam.d/system-auth

فایل “etc/pam.d/common-password” را تحت Ubuntu یا Debian یا Linux Mint باز کنید.

# vi /etc/pam.d/common-password

خط زیر را به بخش “auth” اضافه کنید.

auth    sufficientpam_unix.so likeauth nullok

خط زیر را به بخش “password” اضافه کنید تا کاربر را از استفاده مجدد از 5 کلمه عبور قبلی خودش محدود کنید.

password   sufficientpam_unix.so nullok use_authtok md5 shadow remember=5

تنها 5 کلمه عبور آخر توسط سرور به خاطر آورده می شوند. اگر تلاش کنید که از 5 کلمه عبور آخر خود استفاده کنید پیام خطایی مانند زیر دریافت می کنید.

Password has been already used. Choose another.

  1.   چگونه انقضا کلمه عبور کاربر کنترل کنیم

در لینوکس، کلمه عبور کاربران در “/etc/shadow” و در فرمت رمزگذاری شده ذخیره می شود. برای کنترل انقضا کلمه عبور کاربران، شما باید از فرمان “chage” استفاده کنید. این فرمان اطلاعات انقضا کلمه عبور و زمان آخرین تغییر کلمه عبور را نشان می دهد. این جزئیات توسط سیستم، برای تصمیم در خصوص زمان تغییر یک کلمه عبور توسط کاربر استفاده می شود.

برای دیدن اطلاعات مدت زمان مربوط به کاربر مانند تاریخ انقضا و زمان از فرمان زیر استفاده کنید.

#chage -l username

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

#chage -M 60 username

#chage -M 60 -m 7 -W 7 userName

پارامتر ها

-M تنظیم حداکثر تعداد روز ها

-m تنظیم حداقل تعداد روزها

-W تنظیم تعداد روزها برای پیام خطا

  1.    بستن و باز کردن حساب کاربری بصورت دستی

ویژگی های باز و بسته کردن بسیار مفید هستند و به جای حذف یک حساب کاربری از سیستم، شما می توانید آن را برای یک مدت مشخص ببندید. برای بستن یک کاربر خاص، شما می توانید از فرمان زیر استفاده کنید.

# passwd -l accountName

توجه: کاربر بسته شده فقط برای کاربر root در دسترس است. این بسته بودن با جایگزینی کلمه عبور رمز گذاری شده با یک رشته (!) اجرا می شود.اگر کسی تلاش کند با استفاده از این حساب کاربری به سیستم دسترسی داشته باشد پیام خطایی مانند زیر دریافت می کند.

# su – accountName

This account is currently not available.

برای باز کردن و یا فعال کردن دسترسی به حساب کاربری بسته شده، از فرمان زیر استفاده کنید. این فرمان رشته (!) با کلمه عبور رمزگذاری شده را حذف می کند.

# passwd -u accountName

  1.   اعمال کلمات عبور قوی تر

تعدادی از کاربران از کلمات عبور آسان و ضعیف استفاده می کنند و کلمه عبور آنها به آسانی با یک directory و با brute force attack هک می شود. ماژول “pam_cracklib” که در PAM (Pluggable Authentication Modules) قرار دارد، کاربران را ملزم به انتخاب کلمات عبور قوی می کند. فایل زیر را با یک برنامه ویرایشگر باز کنید.

# vi /etc/pam.d/system-auth

یک خط برای ملزم کردن استفاده از پارامترهای اعتباری مانند (lcredit,ucredit,dcredit and ocredit) اضافه کنید.

/lib/security/$ISA/pam_cracklib.so retry=3 minlen=8 lcredit=-1 ucredit=-2 dcredit=-2 ocredit=-1

  1.    iptable را فعال کنید (Firewall) .

به شدت پیشنهاد می گردد که Linux firewall را برای ایمن شدن در برابر دسترسی غیرقانونی به سرور فعال کنید. از ruleهایی که در iptables است، برای فیلتر کردن پکت های فوروارد شده ورودی و خروجی استفاده کنید. ما می توانیم آدرس منبع و مقصد را برای اجازه دادن و یا متوقف کردن در یک شماره پورت خاص udp/tcp استفاده کنیم.

 

  1.   در Inittab حالت Ctrl+Alt+Delete را غیر فعال کنید.

در بیشتر توزیع های لینوکس، فشردن Ctrl+Alt+Delete سیستم شما را به فرآیند ریبوت می برد. بنابراین این ایده خوبی نیست که این ویژگی در سرورها فعال باشد.زیرا فشردن تصادفی این دکمه ها می تواند سرور شما را ریبوت کند.

این عمل در “/etc/inittab” انجام می شود. اگر شما دقیق به این فایل نگاه کنید، می بینید که خطی شبیه به آنچه در ادامه است در آن وجود دارد. در حالت پیش فرض خط فعال است اما برای غیر فعال شدن این دکمه باید از آن را به حالت کامنت درآورد.

# Trap CTRL-ALT-DELETE

#ca::ctrlaltdel:/sbin/shutdown -t3 -r now

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

هر حساب کاربری یک کلمه عبور خالی دارد که به این مفهوم است که این حساب برای دسترسی غیر مجاز به هرکسی در وب باز شده است و این بخشی از امنیت در یک سرور لینوکس است. بنابراین ، شما باید مطمئن شوید که همه حساب های کاربری کلمه عبور قوی داشته و هیچکس دسترسی غیر مجاز ندارد. حساب های کاربری بدون کلمه عبور ریسک های امنیتی هستند و می توانند به آسانی هک شوند. برای کنترل اینکه آیا حساب کاربری بدون کلمه عبور وجود دارد، فرمان زیر را به کار برید.

# cat /etc/shadow | awk -F: ‘($2==””){print $1}’

  1.    قبل وارد حساب شدن بنر SSH را به کاربر نمایش دهید.

این ایده خوبی است که همیشه یک اعلان قانونی و یا امنیتی با برخی نکات امنیتی قبل از اعتبارسنجی SSH داشته باشید. برای فعال کردن چنین بنری مفاله زیر را مطالعه کنید.

 

  1.    پایش فعالیت های کاربر

اگر با تعداد زیادی کاربران سروکار دارید، مهم است که اطلاعات فعالیت و process هایی که مورد استفاده هر کاربر بوده است را جمع آوری کرده و در زمان مناسب و یا درشرایطی که موارد امنیتی و بررسی عملکرد اتفاق می افتد، آن ها را تحلیل نمایید. اما چگونه ما می توانیم اطلاعات فعالیت کاربران را پایش و جمع آوری کنیم.

دو ابزار ارزشمند با نام های “psacct” و “acct” وجود دارند که برای پایش فعالیت کاربران و process ها در یک سیستم استفاده می شوند. این ابزار ها در پس زمینه سیستم اجرا شده و به طور پیوسته فعالیت هر کاربر در یک سیستم و منابع مصرف شده توسط سرویس های مختلف مانند Apache، MySQL، SSH، FTP و غیره دنبال می کنند. برای اطلاعات بیشتر درخصوص نصب، ساختاربندی و استفاده از این سرویس ها آدرس زیر را مشاهده کنید.

 

  1. لاگ ها را مرتبا بازبینی کنید.

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

  •         /var/log/message  جایی که کل لاگ های سیستم و فعالیت های فعلی در آن ثبت می شود
  •         /var/log/auth.log لاگ های اعتبار سنجی.
  •         /var/log/kern.log لاگ های کرنل
  •         /var/log/cron.log لاگ های Cron
  •         /var/log/maillog لاگ های میل سرور
  •         /var/log/boot.log لاگ های بوت سیستم
  •         /var/log/mysqld.log لاگ های سرور دیتابیس MySQL
  •         /var/log/secure لاگ اعتبار سنجی
  •         /var/log/utmp or /var/log/wtmp فایل رکورد های ورود به سیستم
  •         /var/log/yum.log:  فایل های لاگ YUM
  1.   پشتیبان گیری از فایل های مهم

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

  1.  باندینگ NIC

دو حالت در NIC bonding وجود دارد که باید در رابط باندینگ به آن اشاره شود

  •         Mode=0 Round Robin
  •         Mode=1 Active and Backup

NIC Bonding به ما کمک می کند که از عدم ارتباط در یک نقطه اجتناب کنیم. دو کارت شبکه اترنت را با هم باند کرده و یک رابط مجازی می سازم که از طریق آن می توان یک IP آدرس اختصاص داده و با دیگر سرور ها در تماس بود. شبکه ما در حالتی که یک NIC Card به هر دلیلی از کار باز ایستد، همچنان در دسترس است.

  1.   boot/ را در حالت read-only نگه دارید.

کرنل لینوکس و فایل های مرتبط با آن در دایرکتوری /boot قرار گرفته اند که در حالت پیش فرض به صورت read-write است. تغییر آن به read-only ریسک تغییرات غیر مجاز در فایل های حیاتی بوت را کاهش می دهد. برای انجام این کار، فایل /etc/fstab را باز کنید.

# vi /etc/fstab

خط زیر را به انتهای آن اضافه کرده، فایل ذخیره نموده و از فایل خارج شوید.

LABEL=/boot /boot ext2 defaults,ro 1 2

لطفا توجه نمایید که باید برای تغییرات بعد در کرنل باید این دایرکتوری را به حالت read-write بازگردانید.

  1.  ICMP و درخواست Broadcast را نادیده بگیرید.

خطوط زیر را در فایل “/etc/sysctl.conf” برای نادیده گرفتن درخواست ping و broadcast اضافه کنید.

Ignore ICMP request:

net.ipv4.icmp_echo_ignore_all = 1

Ignore Broadcast request:

net.ipv4.icmp_echo_ignore_broadcasts = 1

تغییرات و تنظیمات جدید را با اجرای فرمان زیر بارگزاری کنید.

#sysctl -p

اگر شما نکته دیگری را می شناسید که از این لیست جا مانده است لطفا آن را در بخش پاسخ ها بیان کنید. ما همیشه علاقمند دریافت نظرات شما هستیم.

 

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *