شرکت مدیران شبکه برنا بر این باور است که امن سازی سرورهای لینوکس برای حفظ امنیت دادهها، اطلاعات حساس و منابع سازمانی در برابر تهدیدات امنیتی امری ضروری است. در این مقاله، مجموعهای از ۴۰ نکته کلیدی برای تقویت امنیت سرورهای لینوکس در محیطهای مختلف را به شما ارائه خواهیم داد تا از آسیبپذیریهای احتمالی جلوگیری کرده و امنیت سیستمهای خود را در برابر تهدیدات روزافزون حفظ کنید.
نکات و چکلیست برای امن سازی لینوکس (بر فرض اینکه که شما از توزیع لینوکس مبتنی بر CentOS/RHEL یا Ubuntu/Debian استفاده میکنید.) :
آنچه در این مقاله مشاهده خواهید کرد:
- 1. رمزگذاری ارتباطات داده برای سرور لینوکس
- 2. استفاده نکردن از سرویسهای FTP، Telnet و Rlogin / Rsh برای امن سازی لینوکس
- 3. نرمافزارها را به حداقل برسانید تا آسیبپذیریها در لینوکس کاهش یابد
- 4. یک سرویس شبکه برای هر سیستم یا نمونه VM
- 5. هسته لینوکس و نرمافزارها را بهروز نگه دارید
- 6. از افزونههای امنیتی لینوکس استفاده کنید
- 7. از افزونههای امنیتی برای امن سازی لینوکس استفاده کنید
- 8. حسابهای کاربری لینوکس و سیاست رمز عبور قوی
- 9. تنظیم Aging رمز عبور برای کاربران لینوکس به منظور افزایش امنیت
- 10. محدود کردن استفاده از رمزهای عبور قبلی در لینوکس
- 11. قفل کردن حسابهای کاربری پس از شکست در ورود
- 12. چگونه میتوانم مطمئن شویم که تمامی حسابهای کاربری رمز عبور دارند؟
- 13. اطمینان حاصل کنید که هیچ حساب غیر روتی دارای UID برابر با ۰ نیست
- 14. غیرفعال کردن دسترسی به حساب روت
- 15. امنیت فیزیکی سرور
- 16. غیرفعال کردن سرویسهای غیرضروری لینوکس
- 17. پیدا کردن پورتهای شبکه در حال گوش دادن
- 18. حذف سیستمهای X window (X11)
- 19. پیکربندی فایروال مبتنی بر Iptables و TCPWrappers در لینوکس
- 20. سختسازی هسته لینوکس با استفاده از فایل /etc/sysctl.con
- 21. جداسازی پارتیشنهای دیسک برای سیستم لینوکس
- 22. محدودیتهای دیسک (Disk Quotas)
- 23. غیرفعال کردن IPv6 تنها در صورتی که از آن استفاده نمیکنید در لینوکس
- 24. غیرفعال کردن باینریهای غیرضروری SUID و SGID
- 25. فایلهای World-Writable برای همه کاربران در سرور لینوکس
- 26. فایلهای بدون مالک
- 27. از یک سرویس احراز هویت متمرکز استفاده کنید
- 28. کربروس
- 29. لاگگیری و ممیزی
- 30. مشاهده پیامهای مشکوک لاگ با Logwatch / Logcheck
- 31. حسابداری سیستم با auditd
- 32. امنیت سرور OpenSSH
- 33. نصب و استفاده از سیستم تشخیص نفوذ
- 34. غیرفعال کردن دستگاههای USB/فایروایر/تاندربولت
- 35. غیرفعال کردن سرویسهای غیرضروری
- 36. استفاده از fail2ban/denyhost بهعنوان سیستم تشخیص نفوذ (نصب سیستم تشخیص نفوذ)
- 37. امنیت سرور Apache/PHP/Nginx
- 38. حفاظت از فایلها، دایرکتوریها و ایمیلها
- 39. پشتیبانگیری
- 40. سایر توصیهها و نتیجهگیری
1. رمزگذاری ارتباطات داده برای سرور لینوکس
تمام دادههای منتقلشده از طریق شبکه در معرض نظارت قرار دارند. هر زمان که ممکن است، دادههای منتقلشده را با استفاده از رمز عبور یا کلیدها / گواهینامهها رمزگذاری کنید.
- برای انتقال فایل از scp، ssh، rsync یا sftp استفاده کنید. همچنین میتوانید سیستم فایل سرور از راه دور یا دایرکتوری خانگی خود را با استفاده از ابزارهای خاص sshfs و fuse مونت کنید.
- GnuPG این امکان را به شما میدهد که دادهها و ارتباطات خود را رمزگذاری و امضا کنید و دارای یک سیستم مدیریت کلید چندمنظوره و ماژولهای دسترسی برای انواع دایرکتوریهای کلید عمومی است.
- OpenVPN یک VPN سبک و مقرون بهصرفه است.
- گزینه دیگر این است که از tinc استفاده کنید که از تونلسازی و رمزگذاری برای ایجاد یک شبکه خصوصی امن بین میزبانها در اینترنت یا شبکههای محلی ناامن استفاده میکند.
- پیکربندی و نصب SSL در Lighttpd (لایه سرور امن) و HTTPS.
- پیکربندی و نصب SSL در Apache (لایه سرور امن) و HTTPS (mod_ssl).
- پیکربندی Nginx با گواهی SSL رایگان Let’s Encrypt در سیستمعاملهای Debian یا Ubuntu Linux
2. استفاده نکردن از سرویسهای FTP، Telnet و Rlogin / Rsh برای امن سازی لینوکس
در اکثر پیکربندیهای شبکه، نامهای کاربری، رمزهای عبور، دستورات FTP / telnet / rsh و فایلهای منتقلشده میتوانند توسط هر کسی که در همان شبکه است و از یک ابزار شبیهساز بسته (packet sniffer) استفاده میکند، رکورد شوند. راهحل رایج برای این مشکل استفاده از OpenSSH، SFTP یا FTPS (FTP بر روی SSL) است که رمزگذاری SSL یا TLS را به FTP اضافه میکند. برای حذف NIS، rsh و سایر سرویسهای قدیمی، دستور yum زیر را وارد کنید:
# yum erase xinetd ypserv tftp-server telnet-server rsh-server
اگر از سرور مبتنی بر لینوکس Debian/Ubuntu استفاده میکنید، برای حذف سرویسهای ناامن از دستور apt-get یا apt استفاده کنید:
$ sudo apt-get --purge remove xinetd nis yp-tools tftpd atftpd tftpd-hpa telnetd rsh-server rsh-redone-server
3. نرمافزارها را به حداقل برسانید تا آسیبپذیریها در لینوکس کاهش یابد
آیا واقعاً به همه انواع سرویسهای وب نصبشده نیاز دارید؟ از نصب نرمافزارهای غیرضروری خودداری کنید تا از آسیبپذیریهای نرمافزاری جلوگیری شود. از مدیر بسته RPM مانند yum یا apt-get و یا dpkg برای بررسی مجموعه تمام بستههای نرمافزاری نصبشده در سیستم استفاده کنید. تمامی بستههای ناخواسته را حذف کنید.
# yum list installed
# yum list packageName
# yum remove packageName
یا
# dpkg --list
# dpkg --info packageName
# apt-get remove packageName
4. یک سرویس شبکه برای هر سیستم یا نمونه VM
سرویسهای شبکه مختلف را روی سرورهای جداگانه یا نمونههای VM اجرا کنید. این کار تعداد سرویسهای دیگری که میتوانند به خطر بیفتند را محدود میکند. به عنوان مثال، اگر یک مهاجم بتواند به طور موفقیتآمیز از یک آسیبپذیری در نرمافزاری مانند Apache سوءاستفاده کند، او یا او دسترسی به کل سرور شامل سایر سرویسها مانند MySQL/MariaDB/PGSql، سرور ایمیل و غیره پیدا خواهد کرد. برای اطلاعات بیشتر در مورد نصب نرمافزار مجازیسازی، نحوه نصب و راهاندازی نرمافزار مجازیسازی XEN بر روی لینوکس CentOS 5 را مشاهده کنید:
- نصب و راهاندازی نرمافزار مجازیسازی XEN بر روی لینوکس CentOS 5
- راهاندازی OpenVZ تحت RHEL / CentOS لینوکس
5. هسته لینوکس و نرمافزارها را بهروز نگه دارید
اعمال وصلههای امنیتی بخش مهمی از نگهداری سرور لینوکس است. لینوکس تمام ابزارهای لازم برای بهروزرسانی سیستم شما را فراهم میکند و همچنین بهروزرسانیهای آسان بین نسخهها را امکانپذیر میسازد. تمام بهروزرسانیهای امنیتی باید بررسی و هرچه سریعتر اعمال شوند. مجدداً، از مدیر بسته RPM مانند yum و/oder apt-get و/oder dpkg برای اعمال تمام بهروزرسانیهای امنیتی استفاده کنید.
# yum update
یا
# apt-get update && apt-get upgrade
شما میتوانید سیستمهای Red Hat / CentOS / Fedora لینوکس را طوری پیکربندی کنید که اطلاعیههای بهروزرسانی بسته yum را از طریق ایمیل ارسال کنند. گزینه دیگر این است که تمام بهروزرسانیهای امنیتی را از طریق یک cron job اعمال کنید. در لینوکس Debian / Ubuntu میتوانید از apticron برای ارسال اطلاعیههای امنیتی استفاده کنید. همچنین، امکان پیکربندی بهروزرسانیهای بدون نظارت برای سرور Debian/Ubuntu لینوکس شما با استفاده از دستور apt-get/apt وجود دارد.
$ sudo apt-get install unattended-upgrades apt-listchanges bsd-mailx
6. از افزونههای امنیتی لینوکس استفاده کنید
لینوکس با پچهای امنیتی مختلفی ارائه میشود که میتوانند برای محافظت در برابر برنامههای پیکربندی شده نادرست یا آسیبدیده استفاده شوند. در صورت امکان، از SELinux و سایر افزونههای امنیتی لینوکس برای اعمال محدودیتها بر روی شبکه و سایر برنامهها استفاده کنید. به عنوان مثال، SELinux مجموعهای از سیاستهای امنیتی مختلف را برای هسته لینوکس فراهم میکند.
7. از افزونههای امنیتی برای امن سازی لینوکس استفاده کنید
من به شدت استفاده از SELinux را توصیه میکنم، زیرا کنترل دسترسی اجباری (MAC) انعطافپذیری را فراهم میکند. در سیستم کنترل دسترسی اختیاری (DAC) استاندارد لینوکس، یک برنامه یا فرایند که تحت عنوان یک کاربر (UID یا SUID) اجرا میشود، دسترسی کاربر به اشیاء مانند فایلها، سوکتها و سایر فرایندها را دارد. اجرای هسته MAC سیستم را در برابر برنامههای مخرب یا معیوب که میتوانند به سیستم آسیب برسانند یا آن را نابود کنند، محافظت میکند. برای اطلاعات بیشتر، به مستندات رسمی Redhat مراجعه کنید که پیکربندی SELinux را توضیح میدهد.
8. حسابهای کاربری لینوکس و سیاست رمز عبور قوی
از دستورات useradd و usermod برای ایجاد و نگهداری حسابهای کاربری استفاده کنید. اطمینان حاصل کنید که سیاست رمز عبور قوی و مناسبی دارید. به عنوان مثال، یک رمز عبور خوب حداقل باید 8 کاراکتر طول داشته باشد و شامل ترکیبی از حروف، اعداد، کاراکترهای خاص، حروف بزرگ و کوچک و غیره باشد. مهمترین نکته این است که رمزی را انتخاب کنید که بتوانید آن را به یاد بیاورید. از ابزارهایی مانند “John the Ripper” برای شناسایی رمزهای عبور ضعیف کاربران در سرور خود استفاده کنید. pam_cracklib.so را پیکربندی کنید تا سیاست رمز عبور را اعمال کند
9. تنظیم Aging رمز عبور برای کاربران لینوکس به منظور افزایش امنیت
دستور chage تعداد روزهای بین تغییرات رمز عبور و تاریخ آخرین تغییر رمز عبور را تغییر میدهد. این اطلاعات توسط سیستم برای تعیین زمان تغییر رمز عبور توسط کاربر استفاده میشود. فایل /etc/login.defs پیکربندی خاص سایت برای مجموعه رمز عبور shadow شامل پیکربندی aging رمز عبور را تعریف میکند. برای غیرفعال کردن aging رمز عبور، دستور زیر را وارد کنید:
# chage -M 99999 userName
برای دریافت اطلاعات انقضای رمز عبور، دستور زیر را وارد کنید:
# chage -l userName
در نهایت، شما میتوانید فایل /etc/shadow را در فیلدهای زیر ویرایش کنید:
{userName}:{password}:{lastpasswdchanged}:{Minimum_days}:{Maximum_days}:{Warn}:{Inactive}:{Expire}:
که در آن:
- Minimum_days: حداقل تعداد روزهای لازم بین تغییرات رمز عبور، یعنی تعداد روزهایی که باید بگذرد قبل از اینکه کاربر مجاز به تغییر رمز عبور خود باشد.
- Maximum_days: حداکثر تعداد روزهایی که رمز عبور معتبر است (پس از آن، کاربر مجبور به تغییر رمز عبور خود میشود).
- Warn: تعداد روزهایی که قبل از انقضای رمز عبور، به کاربر هشدار داده میشود که باید رمز عبور خود را تغییر دهد.
- Expire: تعداد روزها از 1 ژانویه 1970 که حساب کاربری غیرفعال میشود، یعنی تاریخ دقیقی که ورود به سیستم دیگر ممکن نخواهد بود.
من دستور chage را به جای ویرایش دستی فایل /etc/shadow توصیه میکنم.
# chage -M 60 -m 7 -W 7 userName
10. محدود کردن استفاده از رمزهای عبور قبلی در لینوکس
شما میتوانید از استفاده یا بازیابی رمزهای عبور قدیمی توسط تمامی کاربران در لینوکس جلوگیری کنید. پارامتر remember در ماژول pam_unix میتواند برای پیکربندی تعداد رمزهای عبور قبلی که نمیتوانند دوباره استفاده شوند، استفاده شود.
11. قفل کردن حسابهای کاربری پس از شکست در ورود
در لینوکس، شما میتوانید از دستور faillog برای نمایش سوابق faillog یا تنظیم محدودیتهای تعداد شکستهای ورود استفاده کنید. دستور faillog محتویات لاگ شکستها را از پایگاه داده / فایل لاگ /var/log/faillog فرمت میکند. این دستور همچنین میتواند برای مدیریت شمارندههای شکست و تنظیم محدودیتها استفاده شود. برای مشاهده تلاشهای ناموفق برای ورود، دستور زیر را وارد کنید:
Faillog
برای بازکردن قفل یک حساب کاربری پس از شکست در ورود، دستور زیر را اجرا کنید:
faillog -r -u userName
توجه داشته باشید که میتوانید از دستور passwd برای قفل و بازکردن قفل حسابها استفاده کنید:
# lock Linux account
passwd -l userName
# unlock Linux account
passwd -u userName
12. چگونه میتوانم مطمئن شویم که تمامی حسابهای کاربری رمز عبور دارند؟
برای اطمینان از این مورد دستور زیر را وارد کنید:
# awk -F: '($2 == "") {print}' /etc/shadow
قفل کردن تمامی حسابهای کاربری که رمز عبور ندارند :
# passwd -l accountName
13. اطمینان حاصل کنید که هیچ حساب غیر روتی دارای UID برابر با ۰ نیست
تنها حساب روت دارای UID برابر با ۰ است و دسترسی کامل به سیستم دارد. برای نمایش تمام حسابهایی که UID آنها برابر با ۰ است، دستور زیر را وارد کنید:
# awk -F: '($3 == "0") {print}' /etc/passwd
شما باید تنها یک خط مانند زیر مشاهده کنید:
root:x:0:0:root:/root:/bin/bash
اگر خطوط دیگری مشاهده کردید، آنها را حذف کنید یا مطمئن شوید که حسابهای دیگر توسط شما مجاز به استفاده از UID 0 هستند.
14. غیرفعال کردن دسترسی به حساب روت
هرگز به عنوان کاربر روت وارد نشوید. شما باید از دستور sudo برای اجرای دستورات سطح روت به صورت موردی استفاده کنید. دستور sudo به طور قابل توجهی امنیت سیستم را افزایش میدهد بدون اینکه پسورد روت را با دیگر کاربران و مدیران سیستم به اشتراک بگذارد. همچنین، sudo ویژگیهای سادهای برای حسابرسی و پیگیری فعالیتها فراهم میکند.
15. امنیت فیزیکی سرور
شما باید دسترسی فیزیکی به کنسول سرورهای لینوکس را محافظت کنید. BIOS را پیکربندی کرده و بوت از دستگاههای خارجی مانند DVD / CD / USB را غیرفعال کنید. پسورد BIOS و بارگذار بوت grub را تنظیم کنید تا از این تنظیمات محافظت شود. تمام سرورهای تولیدی باید در مراکز داده اینترنتی (IDC) قفل شوند و تمام افراد باید قبل از دسترسی به سرور شما از مراحل امنیتی خاصی عبور کنند.
16. غیرفعال کردن سرویسهای غیرضروری لینوکس
تمام سرویسها و دیمونهای غیرضروری (سرویسهایی که در پسزمینه اجرا میشوند) را غیرفعال کنید. شما باید تمام سرویسهای غیرضروری را از شروع به کار سیستم حذف کنید. دستور زیر را وارد کنید تا لیست تمام سرویسهایی که در زمان بوت در سطح اجرای شماره ۳ شروع میشوند، مشاهده کنید:
# chkconfig --list | grep '3:on'
برای غیرفعال سازی این سرویس کد زیر را وارد کنید:
# service serviceName stop
# chkconfig serviceName off
یادداشتی درباره توزیعهای لینوکس مبتنی بر systemd و سرویسها توزیعهای مدرن لینوکس که از systemd استفاده میکنند، از دستور systemctl برای همین منظور بهره میبرند.
برای چاپ فهرستی از سرویسها که نشان میدهد هرکدام در کدام سطح اجرای (runlevel) پیکربندی شدهاند یا غیرفعال هستند، دستور زیر را وارد کنید:
# systemctl list-unit-files --type=service
# systemctl list-dependencies graphical.target
غیرفعال سازی سرویس هنگام بوت شدن :
# systemctl disable service
# systemctl disable httpd.service
شروع / توقف / ریستارت سرویس :
# systemctl disable service
# systemctl disable httpd.service
مشاهده وضعیت سرویس :
# systemctl status service
# systemctl status httpd.service
مشاهده پیامهای لاگ
# journalctl
# journalctl -u network.service
# journalctl -u ssh.service
# journalctl -f
# journalctl -k
17. پیدا کردن پورتهای شبکه در حال گوش دادن
از دستور زیر برای لیست کردن تمام پورتهای باز و برنامههای مربوط به آنها استفاده کنید:
netstat -tulpn
یا از دستور ss به شکل زیر استفاده کنید:
$ ss -tulpn
یا
nmap -sT -O localhost
nmap -sT -O server.example.com
- از iptables برای بستن پورتهای باز یا متوقف کردن تمام سرویسهای شبکه غیرضروری با استفاده از دستورات سرویسهای فوق و دستورات chkconfig استفاده کنید.
- دستور مشابه update-rc.d در لینوکس Redhat Enterprise / CentOS.
- در لینوکس Ubuntu / Debian: ابزار پیکربندی سرویسها برای شروع / توقف سرویسهای سیستم.
- برای دریافت اطلاعات دقیق در مورد اتصالات یک آدرس IP خاص، از دستور netstat استفاده کنید.
18. حذف سیستمهای X window (X11)
سیستمهای X window در سرور الزامی نیستند. دلیلی برای اجرای X11 روی سرور اختصاصی لینوکسی خود که برای سرویسهای ایمیل و وب سرورهای Apache/Nginx استفاده میشود، وجود ندارد. شما میتوانید X Windows را غیرفعال کرده و حذف کنید تا امنیت و عملکرد سرور بهبود یابد. فایل /etc/inittab را ویرایش کرده و سطح اجرای سیستم را به ۳ تنظیم کنید. در نهایت، برای حذف سیستم X window دستور زیر را وارد کنید:
# yum groupremove "X Window System"
در سرورهای CentOS 7/RHEL 7 از دستورات زیر استفاده کنید:
# yum group remove "GNOME Desktop"
# yum group remove "KDE Plasma Workspaces"
# yum group remove "Server with GUI"
# yum group remove "MATE Desktop"
19. پیکربندی فایروال مبتنی بر Iptables و TCPWrappers در لینوکس
Iptables یک برنامه فضای کاربری است که به شما این امکان را میدهد تا فایروال (Netfilter) ارائهشده توسط هسته لینوکس را پیکربندی کنید. از فایروال برای فیلتر کردن ترافیک و اجازه دادن تنها به ترافیک ضروری استفاده کنید. همچنین از TCPWrappers که یک سیستم کنترل دسترسی شبکه مبتنی بر میزبان است برای فیلتر کردن دسترسی به اینترنت استفاده کنید. با کمک Iptables میتوانید از بسیاری از حملات انکار سرویس (DoS) جلوگیری کنید.
- چگونه فایروال UFW را در سرور Ubuntu 16.04 LTS راهاندازی کنیم
- چگونه یک فایروال با استفاده از FirewallD در RHEL 8 راهاندازی کنیم
- لینوکس: ۲۰ مثال از Iptables برای مدیران سیستم جدید
- آموزش پیکربندی فایروال Iptables در CentOS / Redhat
- شکلدهی ترافیک Lighttpd: محدود کردن اتصالات برای هر آی پی (محدودیت نرخ)
- چگونه: بلوک کردن حملات رایج با Iptables در لینوکس
- psad: شناسایی و مسدود کردن حملات اسکن پورت در زمان واقعی در لینوکس
- از shorewall در سرورهای مبتنی بر CentOS/RHEL یا Ubuntu/Debian برای امن کردن سیستم خود استفاده کنید.
20. سختسازی هسته لینوکس با استفاده از فایل /etc/sysctl.con
فایل /etc/sysctl.conf برای پیکربندی پارامترهای هسته در زمان اجرا استفاده میشود. لینوکس تنظیمات موجود در فایل /etc/sysctl.conf را در زمان بوت خوانده و اعمال میکند. نمونهای از فایل /etc/sysctl.conf:
# Turn on execshield
kernel.exec-shield=1
kernel.randomize_va_space=1
# Enable IP spoofing protection
net.ipv4.conf.all.rp_filter=1
# Disable IP source routing
net.ipv4.conf.all.accept_source_route=0
# Ignoring broadcasts request
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.icmp_ignore_bogus_error_messages=1
# Make sure spoofed packets get logged
net.ipv4.conf.all.log_martians = 1
21. جداسازی پارتیشنهای دیسک برای سیستم لینوکس
جداسازی فایلهای سیستمعامل از فایلهای کاربر میتواند باعث بهبود و امنیت بیشتر سیستم شود. اطمینان حاصل کنید که سیستمفایلهای زیر بر روی پارتیشنهای جداگانه مونت شدهاند:
/usr
/home
/var و /var/tmp
/tmp
پارتیشنهای جداگانهای برای ریشه سرورهای Apache و FTP ایجاد کنید. فایل /etc/fstab را ویرایش کرده و اطمینان حاصل کنید که گزینههای پیکربندی زیر را اضافه کردهاید:
- noexec اجازه اجرای هیچ باینریای را روی این پارتیشن نمیدهد (اجازه اجرای اسکریپتها را میدهد اما از اجرای باینریها جلوگیری میکند).
- nodev اجازه استفاده از دستگاههای خاص یا کاراکتری روی این پارتیشن را نمیدهد (از استفاده از فایلهای دستگاهی مانند zero، sda و غیره جلوگیری میکند).
- nosuid اجازه دسترسی SUID/SGID را روی این پارتیشن نمیدهد (از تنظیم بیت setuid جلوگیری میکند).
نمونهای از ورودی /etc/fstab برای محدود کردن دسترسی کاربران به/dev/sda5 دایرکتوری ریشه سرور FTP:
/dev/sda5 /ftpdata ext3 defaults,nosuid,nodev,noexec 1 2
22. محدودیتهای دیسک (Disk Quotas)
اطمینان حاصل کنید که محدودیتهای دیسک برای تمام کاربران فعال شده است. برای پیادهسازی محدودیتهای دیسک، مراحل زیر را دنبال کنید:
- محدودیتها را برای هر سیستمفایل با ویرایش فایل /etc/fstab فعال کنید.
- سیستمفایلها را دوباره مونت کنید.
- فایلهای پایگاه داده محدودیتها را ایجاد کرده و جدول استفاده از دیسک را تولید کنید.
- سیاستهای محدودیت دیسک را اختصاص دهید.
برای جزئیات بیشتر، به آموزش پیادهسازی محدودیتهای دیسک مراجعه کنید.
23. غیرفعال کردن IPv6 تنها در صورتی که از آن استفاده نمیکنید در لینوکس
پروتکل اینترنت نسخه ۶ (IPv6) یک لایه جدید از پروتکل TCP/IP است که جایگزین پروتکل اینترنت نسخه ۴ (IPv4) میشود و مزایای زیادی را ارائه میدهد. اگر از IPv6 استفاده نمیکنید، آن را غیرفعال کنید:
- غیرفعال کردن شبکه IPv6 در RedHat / CentOS
- غیرفعال کردن شبکه IPv6 در Debian / Ubuntu و دیگر توزیعهای لینوکس
- راهنمای IPv6 در لینوکس – فصل ۱۹. امنیت
- پیکربندی فایروال IPv6 در لینوکس و اسکریپتهای مربوطه در اینجا موجود است.
24. غیرفعال کردن باینریهای غیرضروری SUID و SGID
تمام فایلهایی که بیتهای SUID/SGID فعال دارند، میتوانند در صورتی که فایل اجرایی SUID/SGID دارای مشکل یا باگ امنیتی باشد، سوءاستفاده شوند. هر کاربر محلی یا از راه دور میتواند از چنین فایلی استفاده کند. بهتر است تمامی این فایلها را شناسایی کنید. از دستور find به شکل زیر استفاده کنید:
#See all set user id files:
find / -perm +4000
# See all group id files
find / -perm +2000
# Or combine both in a single command
find / \( -perm -4000 -o -perm -2000 \) -print
find / -path -prune -o -type f -perm +6000 -ls
شما باید هر فایل گزارششده را بررسی کنید. برای جزئیات بیشتر، به صفحه راهنمای فایل گزارششده مراجعه کنید.
25. فایلهای World-Writable برای همه کاربران در سرور لینوکس
هر کسی میتواند فایلهای World-Writable برای همه کاربران را تغییر دهد که این میتواند منجر به مشکلات امنیتی شود. از دستور زیر برای پیدا کردن تمام فایلهایی که دارای دسترسی نوشتن برای همه کاربران و بیتهای sticky تنظیم شدهاند، استفاده کنید:
find /dir -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print
شما باید هر فایل گزارششده را بررسی کنید و یا مجوزهای صحیح کاربر و گروه را تنظیم کنید یا آن را حذف کنید.
26. فایلهای بدون مالک
فایلهایی که متعلق به هیچ کاربر یا گروهی نیستند میتوانند مشکل امنیتی ایجاد کنند. برای پیدا کردن این فایلها که متعلق به یک کاربر و گروه معتبر نیستند، از دستور زیر استفاده کنید:
find /dir -xdev \( -nouser -o -nogroup \) -print
باید هر فایل گزارش شده را بررسی کرده و یا آن را به یک کاربر و گروه مناسب اختصاص دهید یا آن را حذف کنید.
27. از یک سرویس احراز هویت متمرکز استفاده کنید
بدون سیستم احراز هویت متمرکز، دادههای احراز هویت کاربران ناسازگار میشود که میتواند منجر به اطلاعات ورود منقضی شده و حسابهای فراموششدهای شود که باید در ابتدا حذف میشدند. یک سرویس احراز هویت متمرکز به شما این امکان را میدهد که کنترل مرکزی بر حسابهای لینوکس / یونیکس و دادههای احراز هویت داشته باشید. شما میتوانید دادههای احراز هویت را بین سرورها همگامسازی نگه دارید. از سرویس NIS برای احراز هویت متمرکز استفاده نکنید. به جای آن از OpenLDAP برای مشتریان و سرورها استفاده کنید.
28. کربروس
کربروس احراز هویت را به عنوان یک سرویس احراز هویت طرف ثالث معتبر با استفاده از یک رمز مشترک رمزنگاری شده انجام میدهد، با این فرض که بستههای عبوری در شبکه ناامن میتوانند خوانده، تغییر داده یا وارد شوند. کربروس بر اساس رمزنگاری کلید متقارن ساخته شده و به یک مرکز توزیع کلید نیاز دارد. شما میتوانید از کربروس برای ایمنتر و کنترلپذیرتر کردن ورود از راه دور، کپی از راه دور، کپی ایمن فایلهای بین سیستمها و سایر وظایف پرخطر استفاده کنید. بنابراین، زمانی که کاربران برای احراز هویت به سرویسهای شبکه از کربروس استفاده میکنند، کاربران غیرمجاز که سعی دارند با نظارت بر ترافیک شبکه، رمزهای عبور را جمعآوری کنند، عملاً ناکام میمانند. برای اطلاعات بیشتر در مورد نحوه راهاندازی و استفاده از کربروس، به مستندات مربوطه مراجعه کنید.
29. لاگگیری و ممیزی
شما باید لاگگیری و ممیزی را پیکربندی کنید تا تمام تلاشهای هک و کرک را جمعآوری کنید. بهطور پیشفرض، syslog دادهها را در دایرکتوری /var/log/ ذخیره میکند. این همچنین برای شناسایی پیکربندی نادرست نرمافزار که ممکن است سیستم شما را در معرض حملات مختلف قرار دهد، مفید است. مقالات مربوط به لاگگیری زیر را مطالعه کنید:
- مکانهای فایلهای لاگ لینوکس.
- نحوه ارسال لاگها به یک سرور لاگ از راه دور.
- چگونه فایلهای لاگ را بچرخانیم؟.
- صفحات man مربوط به syslogd، syslog.conf و logrotate.
30. مشاهده پیامهای مشکوک لاگ با Logwatch / Logcheck
با استفاده از دستور logwatch (یا logcheck) لاگهای خود را بررسی کنید. این ابزارها فرآیند خواندن لاگها را برای شما آسانتر میکنند. شما گزارشات دقیقی از موارد غیرعادی در syslog از طریق ایمیل دریافت میکنید. نمونهای از گزارش syslog به شرح زیر است:
################### Logwatch 7.3 (03/24/06) ####################
Processing Initiated: Fri Oct 30 04:02:03 2009
Date Range Processed: yesterday
( 2009-Oct-29 )
Period is day.
Detail Level of Output: 0
Type of Output: unformatted
Logfiles for Host: www-52.nixcraft.net.in
##################################################################
--------------------- Named Begin ------------------------
**Unmatched Entries**
general: info: zone XXXXXX.com/IN: Transfer started.: 3 Time(s)
general: info: zone XXXXXX.com/IN: refresh: retry limit for master ttttttttttttttttttt#53 exceeded (source ::#0): 3 Time(s)
general: info: zone XXXXXX.com/IN: Transfer started.: 4 Time(s)
general: info: zone XXXXXX.com/IN: refresh: retry limit for master ttttttttttttttttttt#53 exceeded (source ::#0): 4 Time(s)
---------------------- Named End -------------------------
--------------------- iptables firewall Begin ------------------------
Logged 87 packets on interface eth0
From 58.y.xxx.ww - 1 packet to tcp(8080)
From 59.www.zzz.yyy - 1 packet to tcp(22)
From 60.32.nnn.yyy - 2 packets to tcp(45633)
From 222.xxx.ttt.zz - 5 packets to tcp(8000,8080,8800)
---------------------- iptables firewall End -------------------------
--------------------- SSHD Begin ------------------------
Users logging in through sshd:
root:
123.xxx.ttt.zzz: 6 times
---------------------- SSHD End -------------------------
################### Logwatch 7.3 (03/24/06) ####################
Processing Initiated: Fri Oct 30 04:02:03 2009
Date Range Processed: yesterday
( 2009-Oct-29 )
Period is day.
Detail Level of Output: 0
Type of Output: unformatted
Logfiles for Host: www-52.nixcraft.net.in
##################################################################
--------------------- Named Begin ------------------------
**Unmatched Entries**
general: info: zone XXXXXX.com/IN: Transfer started.: 3 Time(s)
general: info: zone XXXXXX.com/IN: refresh: retry limit for master ttttttttttttttttttt#53 exceeded (source ::#0): 3 Time(s)
general: info: zone XXXXXX.com/IN: Transfer started.: 4 Time(s)
general: info: zone XXXXXX.com/IN: refresh: retry limit for master ttttttttttttttttttt#53 exceeded (source ::#0): 4 Time(s)
---------------------- Named End -------------------------
--------------------- iptables firewall Begin ------------------------
Logged 87 packets on interface eth0
From 58.y.xxx.ww - 1 packet to tcp(8080)
From 59.www.zzz.yyy - 1 packet to tcp(22)
From 60.32.nnn.yyy - 2 packets to tcp(45633)
From 222.xxx.ttt.zz - 5 packets to tcp(8000,8080,8800)
---------------------- iptables firewall End -------------------------
--------------------- SSHD Begin ------------------------
Users logging in through sshd:
root:
123.xxx.ttt.zzz: 6 times
---------------------- SSHD End -------------------------
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 450G 185G 241G 44% /
/dev/sda1 99M 35M 60M 37% /boot
---------------------- Disk Space End -------------------------
###################### Logwatch End #########################
31. حسابداری سیستم با auditd
ابزار auditd برای ممیزی سیستم ارائه شده است. این ابزار مسئول نوشتن رکوردهای ممیزی به دیسک است. در هنگام راهاندازی، قوانین موجود در فایل /etc/audit.rules توسط این دیمون خوانده میشود. شما میتوانید فایل /etc/audit.rules را باز کرده و تغییراتی مانند تنظیم مکان لاگ فایلهای ممیزی و گزینههای دیگر را اعمال کنید. با استفاده از auditd میتوانید به سوالات زیر پاسخ دهید:
- رویدادهای راهاندازی و خاموش شدن سیستم (راهاندازی مجدد / توقف).
- تاریخ و زمان رویداد.
- کاربر مسئول رویداد (مثلاً تلاش برای دسترسی به فایل /path/to/topsecret.dat).
- نوع رویداد (ویرایش، دسترسی، حذف، نوشتن، بهروزرسانی فایل و دستورات).
- موفقیت یا شکست رویداد.
- رکورد رویدادهایی که تاریخ و زمان را تغییر میدهند.
- شناسایی فردی که تغییراتی در تنظیمات شبکه سیستم ایجاد کرده است.
- رکورد رویدادهایی که اطلاعات کاربر/گروه را تغییر میدهند.
- مشاهده اینکه چه کسی تغییراتی در یک فایل ایجاد کرده است و غیره.
برای آشنایی بیشتر، میتوانید آموزش سریع ما را که توضیح میدهد چگونه سرویس auditd را فعال و استفاده کنید، مشاهده کنید.
32. امنیت سرور OpenSSH
- پروتکل SSH برای ورود از راه دور و انتقال فایلهای از راه دور توصیه میشود. با این حال، SSH در برابر بسیاری از حملات آسیبپذیر است. برای ایمنسازی سرور OpenSSH به موارد زیر توجه کنید:
- شیوههای امنیتی برای سرور OpenSSH.
- برای تقویت امنیت دسکتاپ لینوکس و ورود SSH خود، از احراز هویت دو مرحلهای با استفاده از Google Authenticator استفاده کنید
33. نصب و استفاده از سیستم تشخیص نفوذ
سیستم تشخیص نفوذ شبکه (NIDS) یک سیستم است که سعی میکند فعالیتهای مخرب مانند حملات انکار سرویس (DoS)، اسکن پورتها یا حتی تلاشها برای نفوذ به کامپیوترها را با نظارت بر ترافیک شبکه شناسایی کند.
این یک روش خوب است که هر نرمافزار بررسی یکپارچگی (Integrity Checking) را قبل از اینکه سیستم به صورت آنلاین در یک محیط تولیدی قرار گیرد، نصب کنید. اگر ممکن است، نرمافزار AIDE را قبل از اتصال سیستم به هر شبکهای نصب کنید. AIDE یک سیستم تشخیص نفوذ مبتنی بر میزبان (HIDS) است که میتواند داخلیات سیستمهای کامپیوتری را نظارت و تجزیه و تحلیل کند. همچنین توصیه میشود که نرمافزار تشخیص روتکیت rkhunter را نیز نصب و استفاده کنید.
34. غیرفعال کردن دستگاههای USB/فایروایر/تاندربولت
برای غیرفعال کردن دستگاههای USB در سیستم لینوکس، دستور زیر را وارد کنید:
# echo 'install usb-storage /bin/true' >> /etc/modprobe.d/disable-usb-storage.conf
شما میتوانید از همان روش برای غیرفعال کردن ماژولهای فایروایر و تاندربولت استفاده کنید:
# echo "blacklist firewire-core" >> /etc/modprobe.d/firewire.conf
# echo "blacklist thunderbolt" >> /etc/modprobe.d/thunderbolt.conf
پس از انجام این کار، کاربران نمیتوانند بهسرعت دادههای حساس را به دستگاههای USB منتقل کرده یا بدافزار/ویروس یا درب پشتی روی سیستم مبتنی بر لینوکس شما نصب کنند.
35. غیرفعال کردن سرویسهای غیرضروری
شما میتوانید از دستور service یا دستور systemctl برای غیرفعال کردن سرویسهای غیرضروری استفاده کنید:
$ sudo systemctl stop service
$ sudo systemctl disable service
برای مثال، اگر قرار نیست برای مدتی از سرویس Nginx استفاده کنید، آن را غیرفعال کنید:
$ sudo systemctl stop nginx
$ sudo systemctl disable nginx
36. استفاده از fail2ban/denyhost بهعنوان سیستم تشخیص نفوذ (نصب سیستم تشخیص نفوذ)
Fail2ban یا denyhost فایلهای لاگ را برای تعداد زیادی تلاش ناموفق ورود اسکن کرده و آدرس IP که نشانههای مخرب از خود نشان میدهد را مسدود میکنند. برای مشاهده نحوه نصب و استفاده از denyhost برای لینوکس، میتوانید جستجو کنید. نصب fail2ban بهراحتی امکانپذیر است:
$ sudo apt-get install fail2ban
یا
$ sudo yum install fail2ban
فایل پیکربندی را مطابق با نیازهای خود ویرایش کنید:
$ sudo vi /etc/fail2ban/jail.conf
ریستارت سرویس:
$ sudo systemctl restart fail2ban.service
37. امنیت سرور Apache/PHP/Nginx
فایل httpd.conf را ویرایش کرده و موارد زیر را اضافه کنید:
ServerTokens Prod
ServerSignature Off
TraceEnable Off
Options all -Indexes
Header always unset X-Powered-By
برای راهاندازی مجدد سرور httpd/apache2 در لینوکس، دستور زیر را اجرا کنید:
$ sudo systemctl restart apache2.service
یا
$ sudo systemctl restart httpd.service
شما باید mod_security را روی سرور RHEL/CentOS نصب و فعال کنید. همچنین توصیه میشود که فایل php.ini را ویرایش کرده و آن را امن کنید.
38. حفاظت از فایلها، دایرکتوریها و ایمیلها
لینوکس حفاظتهای بسیار خوبی در برابر دسترسی غیرمجاز به دادهها ارائه میدهد. مجوزهای فایل و MAC (کنترل دسترسی مبتنی بر برچسب) از دسترسی غیرمجاز به دادهها جلوگیری میکنند. با این حال، مجوزهایی که توسط لینوکس تنظیم شدهاند، زمانی بیاهمیت میشوند که یک مهاجم دسترسی فیزیکی به کامپیوتر داشته باشد و بتواند به راحتی هارد دیسک کامپیوتر را به سیستم دیگری منتقل کرده و دادههای حساس را کپی و تجزیه و تحلیل کند. شما میتوانید به راحتی فایلها و پارتیشنها را در لینوکس با استفاده از ابزارهای زیر محافظت کنید:
- برای رمزگذاری و رمزگشایی فایلها با یک کلمه عبور، از دستور gpg استفاده کنید.
- لینوکس یا UNIX برای محافظت از فایلها با کلمه عبور از openssl و سایر ابزارها استفاده میکند.
- رمزگذاری کامل دیسک برای امنیت دادهها ضروری است و توسط اکثر توزیعهای لینوکس پشتیبانی میشود. برای یادگیری نحوه رمزگذاری هارددیسک با LUKS در لینوکس، به منابع مربوطه مراجعه کنید. اطمینان حاصل کنید که swap نیز رمزگذاری شده باشد. برای ویرایش بوتلودر نیاز به کلمه عبور خواهید داشت.
- اطمینان حاصل کنید که ایمیلهای روت به حسابی که به طور منظم بررسی میکنید ارسال میشود.
- رمزگذاری دیسک و پارتیشن در لینوکس برای دستگاههای موبایل.
- پیکربندی سرور Dovecot IMAPS / POP3S در لینوکس با استفاده از SSL.
- نصب و پیکربندی گواهی SSL سرور ایمیل Postfix SMTP در لینوکس.
- نصب و پیکربندی گواهی سرور Courier IMAP SSL.
- پیکربندی رمزگذاری SSL برای ارسال و دریافت ایمیل با Sendmail.
39. پشتیبانگیری
هیچچیز به اندازه اهمیت پشتیبانگیری از سیستم لینوکس شما مورد تأکید قرار نمیگیرد. یک پشتیبانگیری مناسب و خارج از سایت به شما این امکان را میدهد که از یک سرور شکسته (مانند نفوذ به سرور) بازیابی کنید. برنامههای پشتیبانگیری سنتی UNIX مانند dump و restore نیز توصیه میشوند. شما باید پشتیبانگیریهای رمزگذاری شده را به فضای ذخیرهسازی خارجی مانند سرور NAS یا سرور FreeNAS تنظیم کنید یا از خدمات محاسبات ابری مانند AWS استفاده نمایید:
- نصب و پیکربندی Snapshot سیستم فایل از راه دور با استفاده از ابزار پشتیبانگیری افزایشی rsnapshot در Debian / Ubuntu لینوکس
- نحوه پیکربندی پشتیبانگیری از راه دور / سرور Snapshot در لینوکس Red Hat / CentOS
- نحوه پشتیبانگیری از یک وب سرور
- نحوه استفاده از دستور rsync برای پشتیبانگیری از یک دایرکتوری در لینوکس
40. سایر توصیهها و نتیجهگیری
این صفحه نکات امنیتی سختسازی سرور لینوکس را توضیح داد. لطفاً برای اطلاعات بیشتر به صفحات زیر مراجعه کنید:
- نحوه جستجو برای Rootkitها در سرورهای مبتنی بر لینوکس.
- نحوه فعالسازی محافظت در برابر Overflows با ExecShield در سرورهای مبتنی بر لینوکس.
- راهنمای امنیت EUD: اوبونتو ۱۶.۰۴ LTS
- راهنمای امنیتی برای RHEL 7
- پیکربندیهای پایه و پیشرفته SELINUX
- اشتراک در لیست ایمیل امنیتی Redhat یا Debian لینوکس یا فید RSS.
2 دیدگاه
با تشکر از مقاله کاربردی لینوکس هاردنینگ، عالی بود
بسیار مقاله ی جالب و کاربردی بود در زمینه امن سازی لینوکس…
ممنون از توضیحات مفیدتون