همه بر این باورند که لینوکس بطور پیش فرض امن است. در اصل، لینوکس دارای طراحی میباشد که در حالت پیش فرض امن هست ولی بمنظور افزایش امنیت سیستم باید آنرا مطابق با نیازهای خود تنظیم کنید. مدیریت لینوکس ممکن است سخت باشد اما انعطاف پذیری بیشتر و آپشن های تنظیمات بیشتری در اختیارتان میگذارد.
ایمن سازی یک سیستم در مقابل هکرها ، کار چالش برانگیزی است. این مقاله در مورد “نحوهی ایمن سازی لینوکس” است و در آن به ۲۵ نکته برای افزایش ایمنیِ سیستم لینوکس میپردازیم.
۱- امنیت فیزیکیِ سیستم
امکان بوت سیستم عامل از سی دی، دی وی دی، حافظه های جانبی و فلاپی را از BIOS غیر فعال کنید. سپس به منظورمحدود کردن دسترسیِ فیزیکی به سیستم، پسورد BIOS را فعال کنید و برای محافظت از GRUB برای آن پسوورد ست کنید.
۲- پارتیشنها
داشتن پارتیشنهای مختلف برای امنیت بیشتر اطلاعات در مواقعی که مشکلی پیش میآید، از اهمیت بالایی برخوردار است. با ایجاد پارتیشنهای مختلف، اطلاعات از هم جدا و دستهبندی میشوند. اگر اتفاقی ناگهانی برای یکی از پارتیشنها پیش بیاید، صرفاً اطلاعات آن پارتیشن آسیب میبینند و اطلاعات پارتیشنهای دیگر در امان هستند. بهتر است پارتیشنهای مختلفی داشته باشید و اطمینان حاصل کنید که برنامه های کاربران روی فایل سیستمهای جداگانه در زیر opt/ نصب شدهاند.
/ boot/ usr/ var/ home/ tmp/ opt/
۳-برای کاهش میزان آسیب پذیری، مقدار بستههای نرم افزاری نصب شده را کاهش دهید
آیا واقعاً به تمام سرویسهای نصب شده نیاز دارید؟ بهتر است برای جلوگیری از آسیب پذیری بیشتر، از نصب بستههایی که به درد شما نمیخورند، خودداری کنید. در این صورت، اگر یکی از سرویسهای شما مورد حملهای موفق واقع شد، احتمال اینکه برای دیگر سرویسها نیز خطری پیش بیاید کمتر است. سرویسهای ناخواسته و بی فایده را حذف کنید. میتوانید از فرمان ‘chkconfig‘ لیست سرویسهایی را که در runlevel 3 فعال هستند، بدست بیاورید.
'sbin/chkconfig --list |grep '3:on/
سپس برنامههای در حال اجرا را که نیازی به آنها ندارید، از طریق فرمان زیر حذف کنید:
chkconfig serviceName off
از ابزارهای مدیریت بسته ها ی RPM مانند yum و یا ابزار apt-get برای نمایش تمام بستههای نصب شده بر روی سیستم استفاده کنید و سپس موارد مورد نظر خود را از طریق فرمان زیر حذف کنید:
yum -y remove package-name sudo apt-get remove package-name
۴-پورتهای باز شبکه را چک کنید
با کمک دستور netstat، میتوانید تمامی پورتهای باز و برنامههای استفاده کننده از آن پورتها را ببینید. همانطور که قبلا گفتیم، میتوانید از طریق فرمان chkconfig تمامی سرویسهای شبکه ناخواسته را در سیستم غیر فعال کنید.
netstat -tulpn
۵- از شل امن استفاده کنید
پروتکلهای telnet و rlogin ارتباط بین سرور و کلاینت را بصورت رمز نشده برقرار میکنند.که اینکار به ایجاد حفره های امنیتی منجر میشود. SSH پروتکل امنی است که در زمان ارتباط به سرور از تکنولوژی رمزگذاری استفاده میکند.
هیچگاه، مستقیماً به عنوان کاربر روت لاگین نکنید مگر اینکه واقعا نیاز به اینکار باشد. از sudo برای اجرای فرمان استفاده کنید. به علاوه، بهتر است که شمارهی پورت پیش فرض SSH که پورت ۲۲ میباشد را به یک شماره ی پورت دیگر تغییر دهید. فایل کانفیگ اصلیِ SSH را باز کنید و برای محدود کردن دسترسی کاربران، تغییرات زیر را اعمال کنید.
vi /etc/ssh/sshd_config
لاگین روت را غیرفعال کنید.
PermitRootLogin no
فقط به کاربران خاصی اجازهی دسترسی بدهید.
AllowUsers username
از نسخهی ۲ پروتکل SSH استفاده کنید.
۶- سیستم را به روز نگه دارید
همیشه سیستم را با آخرین نسخههای منتشر شده، اصلاحات امنیتی، و آخرین کرنل آپدیت نگه دارید.
yum updates yum check-update
۷- Cronjobs را قفل کنید
cron قابلیتی دارد که میتوانید در آن مشخص کنید چه کسانی میتوانند و نمیتوانند کارها را اجرا کنند. این عملکرد با استفاده از فایلهای etc/cron.allow/ و etc/cron.deny/ کنترل میشود. برای قفل کردن کاربرانی که از cron استفاده میکند، کافیست نام آنها را در cron.deny و برای دادن دسترسی به کاربران نیز نام آنها را به Cron.allow اضافه کنید. اگر تمایل به قطع دسترسی تمام کاربران به کرون را دارید، عبارت All را به فایل cron.deny اضافه کنید.
echo ALL >>/etc/cron.deny
۸- شناسایی USB را غیرفعال کنید
بسیار اتفاق میافتد که برای حفاظت از سیستم و جلوگیری از سرقت اطلاعات، میخواهیم امکان استفاده از USB را از کاربر سلب کنیم. فایل ‘etc/modprobe.d/no-usb/’ ایجاد کنید و خط زیر را اضافه کنید تا از شناسایی فلش USB جلوگیری کنید.
install usb-storage /bin/true
۹- SELinux را فعال کنید
SELinux ( لینوکس با امنیت پیشرفته)، مکانیسم اجباریِ کنترل دسترسی است که در کرنل قرار دارد. غیرفعال کردن SELinux به معنی حذف مکانیسم امنیتی از سیستم است. بطور کل و بخصوص وقتی سیستم شما به اینترنت وصل و توسط عموم قابل دسترس است، قبل از حذف آن بهتر است خوب فکر کنید.
SELinux سه حالت امنیتی در اختیارتان میگذارد:
• Enforcing: در این حالت پیش فرض، سیاست امنیت SELinux فعال و بر روی سیستم اعمال میشود.
• Permissive: در این حالت، سیاست امنیتی بر روی سیستم به اجبار اعمال نمیشود و فقط بر روی لاگها نظارت میکند. این حالت برای پیدا کردن ایرادهای مربوط به SELinux مفید است.
• Disabled: در این حالت SELinux خاموش است.
میتوانید وضعیت فعلیِ SELinux خود را از طریف خط فرمانهای’system-config-selinux’،’system-config-selinux’و ‘sestatus’ چک کنید.
sestatus
اگر خاموش باشد، میتوانید آنرا از طریق فرمان زیر فعال کنید:
setenforce enforcing
۱۰- دسکتاپهای KDE/GNOME را کنار بگذارید
نیازی به استفاده از دسکتاپهای X Window مانند KDE یا GNOME بر روی سرور اختصاصی LAMP ندارید. میتوانید برای افزایش امنیت سرور و کارایی سیستم، آنها را غیرفعال کنید. به این منظور، فایل ‘/etc/inittab‘ را باز کنید و run level را در ۳ قرار دهید. اگر میخواهید آنرا بطور کل از سیستم حذف کنید، از فرمان زیر استفاده کنید:
"yum groupremove "X Window System
۱۱- IPv6 را غیر فعال کنید
اگر از پروتکل IPv6 استفاده نمیکنید، باید آنرا غیرفعال کنید زیرا اکثر برنامه ها و سیاستها به آن نیازی ندارند و در حال حاضر نیز در سرور به آن نیازی نیست. به فایل کانفیگ شبکه در مسیر زیربروید.
vi /etc/sysconfig/network
برای غیر فعال کردن، خط زیر را به آن اضافه کنید
NETWORKING_IPV6=no IPV6INIT=no
۱۲- استفاده از پسووردهای قدیمی را محدود کنید
اگر قصد دارید امکان استفاده از پسووردهای قدیمی را به کاربر ندهید، این کار به دردتان خواهد خورد. فایل پسووردهای قدیمی در 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 sufficient pam_unix.so likeauth nullok
خط زیر را به بخش ‘password‘ اضافه کنید تا کاربر نتواند ۵ پسوورد آخر خود را دوباره استفاده کند.
password sufficient pam_unix.so nullok use_authtok md5 shadow remember=5
فقط ۵ پسوورد آخر در حافظهی سرور باقی میمانند و اگر تلاش به استفاده از هر کدام از آنها بکنید، با پیام خطای زیر مواجه خواهید شد.
Password has been already used. Choose another
۱۳- نحوهی چک کردن تاریخ انقضای پسورد کاربران
در لینوکس، پسوورهای کاربران بطور رمزگذاری شده در فایل ‘etc/shadow/’ذخیره میشوند. برای چک کردن انقضای پسوورد کاربران، باید از فرمان ‘chage‘ استفاده کنید. با انجام این کار، به اطلاعات انقضای پسورد و همچنین آخرین تاریخ تغییر پسوورد توسط کاربر دست پیدا میکنید. با استفاده از این اطلاعات، سیستم تصمیم میگیرد که کاربر چه زمانی باید پسوورد خود را تغییر دهد.
برای چک کردن اطلاعاتی در مورد کاربر از قبیل تاریخ انقضا و زمان، از فرمان زیر استفاده کنید.
chage -l username
برای تعیین بازهی زمانیِ تغییر پسوورد برای هر کاربر، از فرمان زیر استفاده کنید.
chage -M 60 username
chage -M 60 -m 7 -W 7 userName
پارامترها:
• -M حداکثر تعداد روزها را تعیین کنید
• -m حداقل تعداد روزها را تعیین کنید
• -W تعداد روزهای اخطار را تعیین کنید
۱۴- بطور دستی حساب کاربری را قفل و باز کنید
ویژگیهای قفل کردن و باز کردن بسیار بدردبخور هستند زیرا بجای حذف یک حساب کاربری میتوانید آنرا برای یک هفته یا یک ماه قفل کنید. برای قفل کردن حساب کاربر بخصوصی میتوانید از فرمان زیر استفاده کنید.
passwd -l accountName
حساب قفل شده فقط برای کاربر روت همچنان در دسترس است. قفل کردن حساب کاربری، پسوورد رمزگذاری شده را با یک رشتهی (!) جایگزین میکند. اگر فردی سعی کند با استفاده از آن حساب به سیستم دسترسی پیدا کند، با پیام خطایی مشابه زیر روبرو خواهد شد.
su - accountName
This account is currently not available
برای باز کردن دوبارهی حساب کاربریِ قفل شده، از فرمان زیر استفاده کنید. با این کار، رشتهی (!) حذف خواهد شد.
passwd -u accountName
۱۵- اعمالِ پسووردهای قویتر
بسیاری از کاربران از پسووردهای ضعیف استفاده میکنند و این پسووردها بهراحتی توسط یک حملهی brute-force و یا حمله با استفاده از دیکشنری قابل هک شدن هستند. ماژول ‘pam_cracklib‘ در بستهی ماژول PAM Pluggable Authentication Modules) موجود است و کاربر را مجبور به انتخاب پسووردهای محکم میکند. فایل زیر را در ادیتور باز کنید.
vi /etc/pam.d/system-auth
و سپس خط را با استفاده از پارامترهای اعتبار (lcredit ، ucredit، dcredit و یا ocredit که به ترتیب حروف کوچک، بزرگ، عدد و غیره هستند) اضافه کنید.
lib/security/$ISA/pam_cracklib.so retry=3 minlen=8 lcredit=-1 ucredit=-2 dcredit=-2 ocredit=-1/
۱۶- فایروال (Iptables) را فعال کنید
پیشنهاد میشود برای جلوگیری از دسترسی غیرمجاز، فایروال لینوکس خود را فعال کنید. از Iptable برای فیلتر بستههای incoming، outgoing و forwarding استفاده کنید.
۱۷- Ctrl+Alt+Delete را در Inittab غیرفعال کنید
در اکثر توزیع های لینوکس، زدن دکمههای Ctrl+Alt+Delete کامپیوتر را وارد پروسهی بوت کردن میکند. به همین دلیل، بهتر است این گزینه در سرورها غیرفعال باشد تا از هرگونه اشتباه پیشگیری شود.
این گزینه در فایل ‘etc/inittab/‘ تعریف شده است. اگر به دقت به داخل این فایل نگاهی بیاندازید، خطی مشابه زیر خواهید دید. بطور پیش فرض، این خط از حالت توضیحات یا کامنت خارج نشده است و شما باید این کار را انجام دهید. این ترتیب بخصوص کلید، سیستم را خاموش میکند.
Trap CTRL-ALT-DELETE ca::ctrlaltdel:/sbin/shutdown -t3 -r now
۱۸- چک کردن حسابهای کاربری با پسوورد خالی
حساب کاربری با پسوورد خالی به این معنی است که هر فردی در اینترنت میتواند به آن دسترسی غیرمجاز داشته باشد. پس باید اطمینان حاصل کنید که تمامی حسابها پسووردهای قوی دارند و هیچ حساب کاربری بدون پسوورد وجود ندارد. این حسابها خطرات امنیتی محسوب میشوند چون براحتی قابل هک هستند. برای یافتن این حسابها، از فرمان زیر استفاده کنید.
'{cat /etc/shadow | awk -F: '($2==""){print $1
۱۹- پیام های SSH را قبل از لاگین نمایش دهید
همیشه بهتر است پیام های حاوی نکات و اخطارهای امنیتی قبل از لاگین در معرض دید کاربر قرار گیرد.
برای ست کردن بنرهای SSH میتوانید به لینک زیر مراجعه کنید.
نمایش پیام های هشدار SSH به کاربر
۲۰- بر فعالیت کاربران نظارت داشته باشید
اگر با تعداد زیادی کاربر سر و کار دارید، بهتر است اطلاعاتی از نوع و نحوهی فعالیت آنها را جمع آوری کنید تا در صورت نیاز، به عنوان مثال در زمان بروز مشکلات امنیتی، بتوانید آنها را بررسی و تحلیل کنید.
برای انجام این کار، دو ابزار خوب با نامهای ‘psacct‘ و ‘acct‘ وجود دارند. این ابزار در پس زمینه بطور دائم در حال فعالیت هستند و بر فعالیتهای هر کاربر و منابع مورد استفادهی هر سرویس مانند Apache، MySQL ، SSHو FTP نظارت میکنند.
۲۱- لاگها را بطور منظم بررسی کنید
لاگها را به یک سرور لاگ اختصاصی انتقال دهید تا افراد دیگر براحتی نتوانند آنها را اصلاح کنند. در زیر لیستی از لاگهای پیش رفض متداول لینوکس و کاربردهای آنها را ببینید:
• var/log/message/ :محل ذخیرهی تمام لاگهای سیستم و لاگهای فعالیتها
• var/log/auth.log/ :لاگهای احراز هویت
•var/log/kern.log/ :لاگهای کرنل
• var/log/cron.log/ :لاگهای cronjob
• var/log/maillog/ :لاگهای سرور ایمیل
• var/log/boot.log/ :لاگهای بوت سیستم
• var/log/mysqld.log/ :فایل لاگ سرور دیتابیس MySQL
• var/log/secure/ :لاگ احراز هویت
• var/log/utmp/ یا var/log/wtmp/ :فایل ذخیرهی لاگین
var/log/yum.log/ :فایلهای لاگ Yum
۲۲- بک آپ فایلهای مهم
در یک سیستم ، داشتن بک آپ از فایلهای مهم و نگهداری آنها در مکانی امن مانند یک سایت دور از دسترس، یکی از ضروریات است.
۲۳- پیوند NIC
در پیوند NIC (کارت شبکه ) دو حالت وجود دارد.
• mode=0 : Round Robin
• فعال و بک آپ :mode=1
از طریق NIC Bonding میتوانید از خسارت جلوگیری کنید. در NIC Bonding دو یا چند کارت شبکهی اترنت به یکدیگر پیوند میخورند و یک اینترفیس مجازی ایجاد میشود که میتوانیم در آن آدرس IP اختصاص داده و با دیگر سرورها ارتباط برقرار کنیم. در صورتی که یکی از کارتهای NIC از کار بیوفتد، شبکهی ما قابل دسترس خواهد بود.
۲۴- Boot/ را در حالت read-only نگه دارید
کرنل لینوکس و فایلهای مربوطه در دیرکتوری /boot که بطور پیش فرض قابل خواندن و نوشتن هست یعنی مجوز خواندن و نوشتن دارد ، قرار دارد. تغییر دادن آن به حالت read-only، خطر ایجاد تغییرات در فایلهای بوت مهم توسط افراد غیر مجاز را کاهش میدهد. برای انجام این کار، فایل “etc/fstab/” را باز کنید.
vi /etc/fstab
خط زیر را در انتها اضافه کنید، سپس تغییرات را ذخیره کنید و خارج شوید.
vi /etc/fstab
توجه کنید: در صورتی که تصمیم به ارتقاء دادن کرنل در آینده بگیرید، باید دوباره آنرا به حالت read-write برگردانید.
۲۵- درخواستهای 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
لطفا نظرات و سوالات خود را در انجمن کندو با ما در میان بگذارید .
ترجمه شده توسط: شراره یعقوبی
It’s going to be ending of mine day, except before end I am reading this
wonderful article to improve my experience.