امنیت سرور لینوکس: امن سازی لاگین روت در سیستم عامل لینوکس اکانت روت (root) به کل سیستم دسترسی دارد. بنابرین باید دسترسی به روت تا حد امکان محدود و دشوار باشد تا هکرها نتوانند به راحتی دسترسی روت پیدا کنند. بستن اتصال ssh برای root اولین مرحله در امن سازی اکانت root در لینوکس، […]
نوشتهها
مدارک لینوکس به طور فزایندهای برای افرادی که به طور تخصصی در زمینه لینوکس کار میکنند اهمیت بیشتری پیدا کرده است. مدارک معتبر لینوکس این ویژگی را دارد که افراد متخصص را از سایر افراد جدا کند و همینطور از لحاظ مالی نیز برای آنها بهتر باشد. در حال حاضر این گواهینامهها نه تنها نشانهای از مهارت هستند بلکه به پیشرفت شما نیز کمک خواهند کرد. جو فالترا، مدیر خدمات زیرساخت در شرکت مادیس معتقد است که شما با در اختیار داشتن یک مدرک لینوکسی دیگر هیچ مسیری را اشتباه نخواهید رفت. در ادامه نیز میگوید: من در استخدام کردن افراد بیشتر به مدارک آن ها اهمیت میدهم تا تجربهشان؛ چرا که این افراد تلاشی تحسین برانگیز برای یادگیری و قبولی در امتحان داشته اند.
در همین راستا، تقاضا برای گرفتن مدرک لینوکسی با افزایش استفاده از خدمات ابری، به طور قابل توجهی افزایش یافته است. به گفته کلایدسپرساد، نایب رئیس بنیاد لینوکس و مدیر کل آموزش و صدور گواهینامه، ابر عمومی تقریبا به صورت جهانی بر روی انواع لینوکس اجرا میشود و این بدین معنی است که آشنایی با لینوکس به طور فزایندهای روند توسعه را سریعتر میکند.
چطور مدرک بگیریم؟
CompTIA، بنیاد لینوکس و موسسه حرفهای لینوکس، سه سازمان اصلی هستند که گواهی نامههای لینوکس اعطا میکنند که این گواهی نامهها در هر محیط و توزیعی از لینوکس مفید است. در مواردی، شرکتهای خصوصی نیز با توجه به نیازشان، گواهی نامههای خاص خود را ارائه میکنند.
CompTIA مدارک لینوکس پلاس خود را با توجه به پیشرفت افراد در طول دوره اعطا میکند. دارندگان گواهی باید نحوه اجرای پیکربندی سخت افزار، سیستم، امنیت، عیب یابی و اسکریپتینگ ساده و اتوماسیون را بدانند. امتحان آن نیز تا حدی سوالات تشریحی و بعد از آن نیز یک امتحان مبتنی بر عملکرد ست که در آن، دانش آموزان باید اشکالات چند سیستم لینوکسی را حل کنند. مدرک لینوکس پلاس ۳۳۸ دلار هزینه دارد و تا سه سال بعد از آن نیز اعتبار دارد. CompTIA رنج طیف گستردهای از گزینههای آماده سازی را ارائه میدهد که شامل فلش کارتهای آنلاین، آموزش مجازی، آزمایشگاههای مجازی و غیره میشوند.
مدارک بنیاد لینوکس نیز در سه بخش آی تی، ادمین سیستم و مهندس سیستم اعطا میشوند که به ترتیب خدمات پایه، میانی و پیشرفته سازمان را نشان میدهد. از سوی دیگر، گواهی نامه LFCA مدیریت کاربرد اساسی آی تی، برنامه نویسی و مهارتهای دیگر مربوط به محیط آی تی را پوشش میدهد. یک گام بالاتر از آن اما مدرک LFCS است که دارنده آن قادر است پیاده سازی، طراحی و مدیریت سیستمهای لینوکس را در یک سطح پیشرفتهتر انجام دهد. مدرک LFCE نیز که مانند مدرک قبلی یک گواهی نامه پیشرفته است، دارنده را قادر میسازد تا استقرار و مدیریت سیستمهای لینوکسی را در سطح معماری سازمانی فرا گیرد.
دو مدرک پیشرفتهتر یعنی LFCS و LFCE، هر کدام ۳۰۰ دلار هزینه دارند ولی LFCA ۲۰۰ دلار هزینه دارد.
هر ۳ مدرک به مدت سه سال اعتبار دارند و بنیاد لینوکس نیز آپشنهای امادگی زیادی را از آموزش الکترونیک تا کورس بوتکمپ و غیره برگزار میکند.
موسسه حرفه ای لینوکس نیز به مانند دو سازمان قبلی مدرک لینوکس ارائه میکند که هر کدام نشان دهنده سطح بالاتری از حرفهای بودن در رابطه با سیستم عامل لینوکس هستند. در طی این دوره، مدرک LPIC-1 به شما آموزشهایی مرتبط با نگهداری و عیب یابی سیستم میدهد و در ادامه مدرک LPIC-2 به دانشجویان این قابلیت را میدهد که بتوانند شبکه های کوچک تا متوسط را نظارت کنند. بعد از آن نیز سه گواهینامه جداگانه وجود دارند که تمرکز هر کدام بر روی محیط سازمانی لینوکس، امنیت سازمانی و مجازی سازی است. مدرک پایه این سازمان که به Linux Essentials معروف است، ۱۲۰ دلار هزینه داشته و بعد از آن LIPC-1 و LPIC-2، ۴۰۰ دلار هزینه دارند و هر کدام از سه مدرک LIPC-3 نیز ۲۰۰ دلار هزینه بر هستند. مدرک اول یعنی Linux Essentials مادام العمر بوده و بقیه مدارک تا پنج سال معتبر هستند.
آیا مدرک بالاتر به معنی درآمد بالاتر است؟
البته که گواهی نامههای لینوکس میتوانند منجر به افزایش حقوق و یا شغل های جدید شوند اما تضمینی نیز در این رابطه وجود ندارد. هرچند ارتباط خیلی مستقیمی بین افزایش درآمد و مدارک لینوکس نیست ولی همیشه بایستی به این نکته توجه کنیم که دنیا بیشتر و بیشتر به ادمینهای لینوکس احتیاج پیدا خواهد کرد در نتیجه افزایش درآمد نیز در انتظارتان خواهد بود. البته اگر مهارتهای دوره ها را به طور صحیح دریافت کرده باشید!
یکی از نقاط قوت لینوکس رویکردی است که نسبت به شبکه دارد که این موضوع عمدتا به خاطر میراثی است که از یونیکس به ارث برده است. به همین دلیل لینوکس سیستم عامل انتخابی ما به عنوان سرور است.
اصلی ترین راه حل برای دسترسی به یک سرور لینوکسی از طریق SSH یا همان Secure Shell است. هر دو راه حل مفید و امن هستند ولی مشکل اینجا است که هر دو قبل از دوره ای که فناوری وایفای و سلولار متداول بشوند طراحی شده اند. در نتیجه اگر به وایفای دیگری وصل شوید یا سیستمتان sleep شود، اتصالتان به سرور قطع خواهد شد.
Mosh و Tmux چیست؟
خوشبختانه چند ابزار وجود دارند که کار کردن با SSH را آسانتر و قابل اعتمادتر از قبل میکنند. شما میتوانید در هر سیستمی از این ابزارها استفاده کنید، از یک ترمینال فیزیکی در دیتاسنتر گرفته تا سرور خانگی، سرور ابری و حتی یک سیستم رو میزی که از یونیکس استفاده میکند.
Mosh ابزاری است با این قابلیت که SSH را از تغییرات شبکه آگاه کند و Tmux به ترمینال شما اجازه میدهد که یک شل را بین لاگینهای مختلف نگه دارید یا حتی آن را به اشتراک بگذارید.
برای معرفی از Mosh شروع کنیم. Mosh یه پروژه متن باز است که باعث میشود SSH بر روی رومینگ و اتصالات متناوب کار کند. با استفاده از Mosh شما میتوانید کامپیوتر خود را از یک شبکه سیمی به یک شبکه بی سیم تغییر دهید و اتصالتون بر قرار خواهد ماند؛ حتی این امکان وجود داره که لپتاپتون رو در حالی که به شبکه متصل هست در حالت sleep قرار بدید و وقتی که دوباره به شبکه متصل میشود، خواهید توانست از ترمینال استفاده کنید. اگر اتصال به شبکه را از دست بدهید Mosh به شما اطلاع خواهد داد. همچنین اگر سرور به آرامی پاسخ میدهد، mosh تا زمانی که اتصال بهبود پیدا کند، دستوراتی که تایپ میکنید را برایتان به نوعی ذخیره میکند.
نصب Mosh تقریبا خیلی ساده است بوده و مدیریت پکیج توزیع های مختلف لینوکس، Mosh را در خود جای داده اند. هم چنین Mosh بر روی گوگل کروم نیز موجود است.
نصب Mosh روی لینوکس
برای مثال، برای نصب روی اوبونتو طبق دستورهای زیر عمل میکنیم:
Sudo apt install mosh
البته سرور نیز بایستی Mosh server را نصب داشته باشد. مزیتی که در اینجا داریم این است که برای نصب میتوان از حالت یوزر نیز استفاده کرد و لزومی برای روت بودن وجود ندارد.
استفاده از Mosh
وقتی که میخواهید به سرور وصل شوید کافی است دستور زیر را تایپ کنید:
mosh username@server
واضح است که در دستور بالا به جای یوزرنیم، یوزر خودتان و به جای سرور اسم ماشینی که میخواهید به آن متصل شوید را وارد میکنید. اگر همه چیز درست کار کند شما به مانند گذشته یک session ریموتی به وسیله ترمینال دارید که با SSH کار میکند. همه چیز مثل گذشته کار میکند با این تفاوت که اتصال شما قابل اطمینان تر است.
نصب و استفاده از Tmux
بسیار خب، حالا ما یک کانکشن بهتر داریم که به واسطه تغییر شبکه از کار نمی افتد. فرض کنید که یکی از دستورات ما (مثل نصب نرم افزار یا کامپایل کردن) بیشتر از زمان عادی طول میکشد. اگر در حین اجرا اتصال قطع شود ترمینال نیز بسته خواهد شد و نصب نرم افزار با مشکل مواجه میشود.
علاوه بر این ما تنها میتوانیم در یک زمان مشخص فقط یک کار مشخص در ترمینال انجام دهیم و مثلا اگر بخواهید یک editor ران کنید، کل ترمینال شما مشغول خواهد شد.
Tmux راه حلی برای این مشکلات است. تیماکس به عنوان یک مالتیپلکسر ترمینال عمل کرده و به شما اجازه میدهد تا در یک پنجره چندین ترمینال اجرا کنید. دقیقا مثل یک تب جدید برای ترمینال ولی بسیار منعطف تر.
به وسیله تیماکس شما میتوانید از یک session لاگ اوت شوید و بعد که بازمیگردید دوباره از همان جا شروع به کار کنید. میتوانید چندین پنجره ترمینال داشته باشید. میتوانید یک برنامه را در یک پنجره ادیت کنید و در یک پنجره دیگر آن را تست کنید.
نصب Tmux بسیار آسان است. برای مثال برای نصب روی اوبونتو کافی است طبق زیر عمل کنیم:
Sudo apt install tmux
وقتی که تیماکس نصب شد تنها با دستور زیر آن را اجرا میکنیم:
tmux
سپس وارد یک پنجره ترمینال خواهید شد و یک نوار وضعیت خواهید دید که نشان میدهد شما در کدام پنجره هستید. تیماکس صفحه را به چندین پنجره تقسیم کرده و ترمینال هر کدام را به تفکیک نشان میدهد. شما همینطور میتوانید پنجرهها را جا به جا کنید و سایز آنها را عوض کنید. هر چند که ممکن است یادگیری تی ماکس تا حدی زمان گیر و مشکل باشد اما کاربرانی که زمان خود را صرف یادگیری آن کرده اند معتقد اند ویژگیهایی که تی ماکس ارائه میدهد به نسبت زمانی که لازم است برای یادگیری صرف کنیم ارزش دارد.
برای مثال یکی از ویژگیهای جالبی که تی ماکس ارائه میدهد امکان ترک session و بازگشت دوباره به آن است. برای این کار کافی است کلید ctrl+D را بزنید و برای بازگشت دوباره کافی است از دستور tmux attach استفاده کنید و میبینید که دوباره به همان session بازگشته اید.
ویژگی بالا این امکان را میدهد که تا زمانی که سرور ما روشن است session نیز همراه آن باشد و از بین نرود.
ترکیب Mosh و Tmux
قدرت اصلی در یک session ریموتی وقتی به دست ما میرسد که این دو نرم افزار را با هم ترکیب کنیم.
با استفاده از Mosh از هر نقطهای به سرور وصل خواهیم بود و دیگر نگران این که اتصال تا چه حد پایدار است نیستیم و با استفاده از Tmux، اگر در حال اجرای دستوری هستیم میتوانیم Session خود را ببندیم و بعدا بدون آن که چیزی از بین رفته باشد به آن بازگردیم.
ترکیب این دو با یکدیگر، به ما بیشترین توان قابل اطمینان بودن و منعطف بودن در یک کانکشن ریموتی را خواهد داد.
بیایید فرض کنیم که یک سرور لینوکس در حال اجرا داریم و میخواهیم ترافیک گذرنده از آن را ردیابی کنیم و یا این که میخواهیم بدانیم که سرور جدید ما در حال انجام چه کاری است؟
برای انجام این کار میتوانید از ابزارهای مختلفی استفاده کنید که بعضی از آن ها شناخته شده نیز هستند. هرچند که بعضی از این دستورها پیچیده خواهند بود و یا امکان دارد آن طور که شما انتظار دارید کار نکنند.
حال باید ببینیم بهترین راهی که یک ادمین انتخاب میکند چه خواهد بود؟
یکی از ابزارهایی که در این حوزه بسیار محبوب بوده Tshark نام دارد که جایگزینی به صورت command line برای Wireshark است؛ چرا که وقتی داریم با یک سرور اصطلاحا headless کار میکنیم، یک رابط کاربری گرافیکی به دردمان نخواهد خورد.
با Tshark میتوانید ترافیک پورت مورد نظر خود را ببینید و هم چنین پورت سرور لینوکسی خود را مانیتور کنید.
به چه چیزی احتیاج داریم؟
- یک لینوکس سرور
- یک یوزر با دسترسی sudo
چگونه Tshark را نصب کنیم؟
نصب تی شارک ساده است، یک پنجره ترمینال در سرور خود باز کنید و دستور زیر را تایپ کنید:
sudo apt-get install tshark -y
این تمام چیزی است که برای نصب احتیاج دارید.
چگونه رابط شبکه خود را پیدا کنیم؟
با استفاده از Tshark رابط شبکه شما در واقع به یک شماره متصل است. اگر فقط یک Interface دارید، موردی برای نگرانی نیست. با این حال اگر چند interface دارید بایستی بدانید که Tshark به کدام رابط listen میکند. برای این کار از دستور زیر استفاده کنید:
sudo tshark -D
این دستور همه ی Interface های شما را مانند تصویر زیر لیست میکند.
چگونه با استفاده از تیشارک listen کنیم؟
حالا که رابط را مشخص کرده ایم، میتوانیم به صورت real-time ترافیک را مشاهده کنیم. برای مثال برای listen کردن بر روی ens5، که سرور اصلی ما است، دستور زیر را تایپ میکنیم:
sudo tshark -i 6
در این جا یک لیست از خروجی پورت های مختلف را داریم :
اگر بخواهیم فقط به یک پورت خاص گوش دهیم نیز Tshark به ما کمک میکند. برای مثال بیایید فرض کنیم که میخواهید فقط ترافیک پورت 22 را بررسی کنیم. در این صورت دستور زیر را تایپ میکنیم:
sudo tshark -i 6 -f "tcp port 22"
دستور فوق فقط اطلاعات مربوط به پورت 22 را نشان میدهد.
هرچند که Tshark کاربردهایی بیشتر از این دارد، اما تنها مواردی که برای بررسی ترافیک پورت خود احتیاج دارید موارد بالا است. امیدواریم که این مطلب برای شما مفید بوده باشد.
نکات امنیتی استفاده از سرورهای لینوکس
ایمنسازی سرورهای لینوکس جنبه های مثبت مختلفی در جهت محافظت دادهها، مالکیت معنوی و سایر موارد دارد. مدیر سیستم مسئول بررسی و تامین مقدمات امنیتی سیستم است.
در قسمت اول این مطلب ما 10 نکته امنیتی مهم برای نصب سیستم لینوکس را ارائه میدهیم.
بایستی توجه داشته باشید که دستوراتی که در ادامه به آن ها اشاره میکنیم با ورژنهای Ubuntu/Debian و CentOS/RHEL لینوکس سازگاری دارند.
1- رمزگذاری ارتباط دادهها برای سرور لینوکس:
تمامی دادههایی که در طول شبکه انتقال پیدا میکنند قابل نظارت کردن هستند و همینطور میتوانید این دادهها را به وسیله پسورد و یا certificate مخصوص، رمزگذاری کنید. به چند نمونه از این روشها اشاره میکنیم.
• برای انتقال فایل میتوانید از دستورهای ssh، scp، rsync و یا sftp استفاده کنید. همچنین با استفاده دستور sshf میتوانید فایلهای سرور ریموت و یا دایرکتوری خود را mount کنید.
• GnuPG به شما اجازه میدهد تا دادهها و ارتباطات خود را با استفاده از یک سیستم مدیریت کلیدی متنوع و همچنین دسترسی به ماژولهای مختلف دایرکتوری کلیدهای عمومی رمزگذاری کنید.
• نصب و استفاده از Apache SSL
• نصب و استفاده از Lighttpd SSL
2- استفاده از سرویسهای FTP، Telnet را بر روی لینوکس متوقف کنید:
تحت اکثر تنظیمات شبکه، نام کاربری، رمز عبور، دستورات rsh، telnet، FTP و همینطور فایلهای منتقل شده توسط هر شخصی در همان شبکه قابل ضبط هستند. راه حل متداول برای رفع این مشکل استفاده از OpenSSH، SFTP و یا FTPS است که رمزگذاری SSL یا TLS را به FTP اضافه میکنند.
برای این منظور به شکل زیر از دستور yum استفاده کنید:
yum erase xinetd ypserv tftp-server telnet-server rsh-server#
اگر از سرور لینوکسی بر پایه ی اوبونتو/دبیان استفاده میکنید، از دستور زیر برای حذف سرویس های نا امن استفاده کنید:
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- کرنل لینوکس خود را آپدیت نگه دارید:
استفاده از پچهای امنیتی یکی از مهمترین بخشهای حفظ و نگهداری سرورهای لینوکس است. لینوکس تمام ابزارهای لازم برای به روزرسانی سیستم شما را فراهم میکند و همچنین امکان استفاده آسان بین نسخه ها را نیز فراهم میکند.
همه به روزرسانیهای امنیتی باید در اسرع وقت بررسی و اعمال شوند، برای این منظور بایستی از دستورات yum و یا apt-get استفاده کنید.
yum update#
یا
apt-get update && apt-get upgrade#
5- حسابهای کاربری لینوکس و استفاده از رمز عبور قوی برای آنها:
از دستورات useradd/usermod برای ایجاد و نگهداری حسابهای کاربری استفاده کنید؛ همچنین اطمینان حاصل کنید که از یک رمز عبور قوی استفاده میکنید. به عنوان مثال یک رمز عبور خوب شامل 8 کاراکتر و ترکیبی از اعداد و کاراکترها و حروف بزرگ و کوچک است.
برای یافتن رمز عبورهای ضعیف میتوانید از ابزاری مانند “John the ripper” استفاده کنید.
6- تنظیم رمز عبور مدتدار برای کاربران لینوکس در جهت امنیت بهترسیستم:
دستور change command تاریخ بین تغییر پسورد، از اولین پسورد تنظیم شده تا اخرین پسورد را اندازه گیری کرده و تغییر میدهد. سیستم از این اطلاعات برای تعیین کردن زمان تغییر پسورد توسط کاربر استفاده میکند.
7- محدودسازی استفاده از رمزهای عبور قبلی در لینوکس:
میتوانید از استفاده مجدد پسورد توسط کاربران جلوگیری کنید. با استفاده از پارامتر pam_unix میتوانید استفاده مجدد از پسوردهای قدیمی را محدود کنید.
8- میتوانید از دستور faillog برای نمایش سوابق عدم ورود موفق به سیستم و یا محدود کردن ورود ناموفق به سیستم، استفاده کنید:
دستور faillog محتوای failure log را از آدرس var/log/faillog database/log file فرمت میکند. همچنین میتوانید برای ذخیره تعداد ورودهای ناموفق به سیستم از آن استفاده کنید. برای دیدن تلاش های ناموفق ورود به سیستم مانند زیر عمل کنید:
Faillog
برای باز کردن قفل حساب پس از عدم موفقیت در ورود به سیستم، دستور زیر را اجرا کنید:
faillog -r -u userName
توجه داشته باشید که میتوانید از دستور passwd برای قفل کردن و باز کردن حسابها استفاده کرد:
# lock Linux account passwd -l userName # unlock Linux account passwd -u userName
9- چگونه اطمینان حاصل کنیم که هیچ اکانتی پسورد خالی ندارد:
دستور زیر را اجرا کنید:
# awk -F: '($2 == "") {print}' /etc/shadow
برای قفل کردن همهی حساب ها با رمز عبور خالی:
# passwd -l accountName
10- چگونه اطمینان حاصل کنیم که هیچ اکانتی غیر از Root مقدار UID برابر 0 ندارد:
فقط اکانت root دارای UID برابر 0 و مجوز کامل برای دسترسی به سیستم است. دستور زیر را اجرا کنید تا همه اکانتها با UID=0 نمایش داده شوند:
# awk -F: '($3 == "0") {print}' /etc/passwd
در ادامه باید تنها یک خط مانند زیر ببینید:
root:x:0:0:root:/root:/bin/bash
اگر خطوط دیگری را مشاهده میکنید آن ها را حذف کنید.
11- غیرفعال کردن سرویسهای غیر ضروری:
همه خدمات غیرضروری و سرویسهایی که در پس زمینه اجرا میشوند را متوقف کنید، تمام سرویس هایی که در start-up اجرا میشوند را متوقف کنید. دستور زیر را اجرا کنید تا تمام سرویسهایی که در بوت اجرا میشوند را ببینید.
chkconfig --list | grep '3:on'#
برای متوقف کردن سرویسها دستور زیر را اجرا کنید:
service serviceName stop# chkconfig serviceName off#
برای خاموش کردن یک سرویس در هنگام بوت از دستور زیر استفاده کنید:
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#
12- پورتهای باز شبکه را پیدا کنید. (Listening Ports):
از دستور زیر برای نمایش تمام پورتها و برنامههای متصل استفاده کنید:
netstat -tulpn
یا از دستور SS به همین منظور:
$ ss -tulpn
و یا:
nmap -sT -O localhost nmap -sT -O server.example.com
13- از SUID و SGID های غیرضروری جلوگیری کنید:
زمانی که فایل های SUID و SGID مشکلی دارند ممکن است با مشکلات امنیتی و باگ های سیستمی رو به رو شوید، بروز این مشکلات برای تمام کاربرانی که با سیستم کار میکنند امکان پذیر است در نتیجه پیشنهاد میکنیم برای پیدا کردن این مشکلات از دستور زیر استفاده کنید:
#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
14- پیدا کردن فایل های World-Writable:
فایل های world-writable میتوانند تبدیل به یک مشکل امنیتی شوند، از دستور زیر برای پیدا کردن این فایل ها استفاده کنید:
find /dir -xdev -type d \ (-perm -0002 -a! -perm -1000 \) -print
بعد از این میتوانید مقادیری که میخواهید را نگه داشته و بقیه را حذف کنید.
15- فایل هایی که مربوط به هیچ کاربری نمیشوند را پیدا کنید:
فایل هایی که توسط کاربر یا گروهی اداره نمیشوند ممکن است به مشکلات امنیتی بیانجامد، این فایل ها را با استفاده از دستور زیر پیدا کنید:
find /dir -xdev \ (-nouser -o -nogroup \) -print
بعد از اینکه این فایل ها را پیدا کردید، بایستی آن را به یک کاربر یا گروه خاص اختصاص داده یا آن را حذف کنید.
16- دستگاه های USB، Firewire، thunderbolt را غیرفعال کنید:
برای غیرفعال کردن دیوایس های USB از دستور زیر استفاده کنید:
echo 'install usb-storage /bin/true' >> /etc/modprobe.d/disable-usb-storage.conf#
همچنین برای غیرفعال کردن ماژول های firewire و thunderbolt، از دستور زیر استفاده کنید:
echo "blacklist firewire-core" >> /etc/modprobe.d/firewire.conf# echo "blacklist thunderbolt" >> /etc/modprobe.d/thunderbolt.conf#
پس از انجام دادن این کار کاربران نمیتوانند داده های حساس را به سرعت در دستگاه های USB کپی کرده و یا بدافزار یا ویروس را بر روی سیستم لینوکس نصب کنند.
17- سرویس هایی که از آن ها استفاده نمیکنید را غیر فعال کنید:
میتوانید سرویس هایی که از آن استفاده ای نمیشود را با استفاده از دستور زیر غیر فعال کنید:
sudo systemctl stop service $ sudo systemctl disable service $
به عنوان مثال، اگر نمیخواهید مدتی از سرویس NginX استفاده کنید، آن را غیرفعال کنید:
sudo systemctl stop nginx $ sudo systemctl disable nginx $
18- امن سازی سرور Apache، PHP، Nginx:
فایل httpd.conf را ادیت کرده و مقادیر زیر را اضافه کنید:
ServerTokens Prod ServerSignature Off TraceEnable Off Options all -Indexes Header always unset X-Powered-By
برای ری استارت کردن سرویس های hhtpd/apache2 بر روی لینوکس، دستور زیر را اجرا کنید:
sudo systemctl restart apache2.service $
و یا :
sudo systemctl restart httpd.service $
چنانچه موارد فوق را برای VPS لینوکسی خود انجام دادهاید، میتوانید از ابزار OpenSCAP برای بررسی امنیت سرور مجازی خود استفاده کنید.
همانطور که شما هم حدس میزنید، ابزارهای نظارت بر سرور گران هستند و یا امکان شخصی سازی ندارند،
ما در این مقاله یکی از مدعیان اصلی مانیتورینگ سرور را به شما معرفی میکنیم که Zabbix نام دارد.
هرچند این مقاله قرار نیست یک آموزش همه جانبه باشد، بلکه خلاصهای از یادگیریهای ما در مورد راهنماهای نصب و یک سری از قوانین کلی و مفصل خواهد بود.
برخی از اصول اولیه که قبل از نصب بایستی بدانید :
۳ ابزار اصلی برای zabibx وجود دارند :
۱- سرور zabbix
۲- zabbix agent
۳- رابط وب zabbix
سرور زبیکس درواقع همان ابزاری است که اطلاعات مربوطه ای که شما میخواهید را از سرور اصلی جمع آوری و نظارت میکند.
سروری که میخواهید مانیتور کنید agent نام دارد، شما همچنین میتوانید بدون رابط وب zabbxi عمل مانیتورینگ را انجام دهید ولی ما توصیه میکنیم از رابط وب نیز استفاده کنید چرا که تجربه بهتری به شما میدهد.
اگر میخواهید قبل از نصب محیط کاربری zabbix را ببینید نیز این امکان فراهم است
با مراجعه به https://zabbix.org/zabbix/index.php این آدرس میتوانید بدون داشتن اکانت محیط مانیتورینگ را دیده و قسمتهای مربوط به گزارشها را نیز مشاهده کنید.
نصب:
در مورد نصب به ترتیب zabbix server ، zabbix agent و اضافه کردن هاست به سرور را در مقالهای جدا بررسی خواهیم کرد،
باید بدانید که به طور پیشفرض رابط وب zabbix از آپاچی استفاده میکند، اگر میخواهید به جای آن از Nginx استفاده کنید باید تنظیماتی را به Nginx خود اضافه کنید که در ادامه خواهیم دید.
معرفی مختصر:
سرور زابیکس :
سرور اصلی است که همه چیز را رصد میکند، برای نصب این لینک را دنبال کنید.
معمولاً رابط وب نیز فقط بر روی این سرور نصب میشود، همینطور بهتر است که این سرور را از سرورهایی که قرار است مانیتور شوند جدا نگه دارید.
در این صورت حتی اگر سرور اصلی دچار خرابی شود میتوانیم زمان downtime و دلیل خرابی را متوجه شویم.
زبیکس ایجنت :
نرم افزاری است که اطلاعات را از سروری که مانیتورینگ بر روی آن انجام میشود را برای سرور زبیکس میفرستد،
اگر میخواهید سرور زبیکس را نیز مانیتور کنید بایستی زبیکس ایجنت را بر بر روی سرور زبیکس نیز نصب کنید.
زبیکس هاست :
هاست سروری است که شما میخواهید مانیتور کنید، بنابراین اگر میخواهید ۳ سرور مختلف را مانیتور کنید
زبیکس ایجنت را بر روی تمام آنها نصب میکنید.
قالب لینوکسی :
این قالب به طور پیشفرض با نصب زبیکس همراه است و بیشتر پارامترهای عمومی را ارائه میدهد مانند :
درصد استفاده از cpu و ram ، این قالب از قبل پیکربندی شده است و شما نیاز به تنظیمات خاص دیگری بر روی آن ندارید.
اشکال یابی:
با اینکه رابط وب به نظر کافی میرسد اما برای اشکال یابی بهتر است از کنسول استفاده کنید.
بر روی سروری که از آن مانیتورینگ انجام میشود دستور زیر را اجرا کنید:
telnet ip-of-your-agent 10050
و سپس :
zabbix_get -s ip-of-your-agent -k agent.hostname
بر روی سرورهایی که قرار است مانیتور شوند :
در پیکربندی اصلی سرور مانیتورینگ شما درخواست داده میکند، بنابراین اگر سرور شما میتواند به agent کانکت شود همه چیز درست عمل میکند.
اما اگر از حالت active agent استفاده میکنید باید اطمینان حاصل کنید که agent شما میتواند به سرور مانیتور متصل شود ومیتواند دادهها را push کند.
دستور زیر را اجرا کنید : telnet ip-of-your-server 10050
با اجرای دستور بعدی zabbix-sender را نصب کنید :
sudo apt-get install zabbix-sender
سپس دستور زیر :
zabbix_sender -vv -z [serverIp] -p 10051 -s [clientName] -k traptest -o "Test value"
در پیکربندی agent configuration توجه داشته باشید که تمام دادههایی که به سرور منتقل میشوند باید از نوع Trapper باشند. بنابراین در مثال بالا باید یک آیتم از نوع trapper بر روی سرور با کلید trapest ایجاد کنید و همچنین اطمینان حاصل کنید که دادههایی که ارسال میکنید از نوع مشخص شده در هنگام ایجاد آیتم بر روی سرور است.
گزارشات:
dashboard قابلیت شخصی سازی دارد بنابراین میتوانید آن را به گونهای تغییر دهدید که همه ی خطاها آنجا لیست شوند، ویژگی دیگری که ما دوست داشتیم نمایشگر ها بود، ما تمام نمودارهای اصلی سرورهایمان را به آن اضافه کردیم و به این وسیله میتوانیم نقاط بحرانی را شناسایی و ردیابی کنیم.
اعلان ها:
به نظر ما، اعلان ها در زبیکس بسیار عالی عمل میکنند چرا که به راحتی قابل تنظیم هستند، ما از sendgrid در زبیکس استفاده میکنیم، چون که اعلان های پیشفرض زبیکس برای ما خوب کار نمیکردند.
تجربه شما از استفاده از zabbix چگونه بوده است؟
آیا از ابزارهای مانیتورینگ برای سرور خود استفاده میکنید؟
تجربه خود را با ما به اشتراک بگذارید.
یکی از معیارهای مهم سایتها، سرعت بارگذاری آنها است. سرعت وبسایت نه تنها باعث رضایت بازدیدکنندگان از سایت میشود، بلکه به صورت مستقیم روی سئو سایت و رتبه سایت در موتورهای جستجو تاثیر میگذارد. یکی از روشهایی که تاثیر به سزایی در افزایش سرعت سایت دارد، پیادهسازی سیستم کش (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 و حفاظت از آن در برابر هک و حملات سایبری از اهمیت بالایی برخوردار است. اگر اخبار و مقالات امنیتی پیشگامان را دنبال کرده باشید، میدانید که در مطلب گذشته درباره ایمنسازی سرور لینوکس در مقابل حملات SSH نوشته بودیم. حالا در این مطلب نحوه فعالسازی تایید دو مرحلهای (Two Factor Authentication) را برای اتصالات SSH توضیح میدهیم که تاثیر بسیاری در امنیت سرور مجازی لینوکس خواهد داشت.
دستورات این آموزش بر مبنای توزیع فدورا هستند، اما با اندکی تغییر برای لینوکسهای اوبونتو یا دبیان هم کاربرد دارند. قبل از شروع آموزش، پیشنهاد میکنیم از دسترسی فیزیکی یا کنسول به سرور لینوکس خود اطمینان حاصل کنید تا در صورت وقوع مشکل امکان بازیابی و رفع مشکل سرور خود را داشته باشید.
نصب احراز هویت دو مرحلهای
ابتدا یک ترمینال باز کنید و برای نصب ابزار احراز هویت گوگل، دستور زیر را وارد کنید:
sudo dnf install google-authenticator nano -y
بعد از نصب، با دستور زیر میتوانید ابزار را اجرا کنید:
google-authenticator
سپس به دو سوال بعدی جواب مثبت دهید. در مرحله بعدی به شما یک QR کد نمایش داده میشود که باید با اپلیکیشن authenticator گوشی همراه خود اسکن کنید. همچنین تعدادی کد امنیتی هم به شما نمایش داده میشود که باید در محلی امن ذخیره کنید. در ادامه سه سوال دیگر هم از شما پرسیده میشود که باید جواب بله بدهید.
تنظیم SSH
به صورت پیشفرض دیمن SSH در فدورا فعال نیست. با دستورات زیر SSH را فعال کنید:
sudo systemctl start sshd sudo systemctl enable sshd
بعد از اجرای SSH، کلیدهای خود را با دستور زیر به سرور لینوکس اضافه کنید.
ssh-copy-id USER@FEDORA_IP
بعد از اضافه کردن کلید SSH خود، حالا باید امکان تایید دو مرحلهای را در تنظیمات SSH سرور فعال کنید. برای این منظور دستور زیر را در ترمینال سرور لینوکس وارد کنید:
sudo nano /etc/pam.d/sshd
سپس با استفاده از علامت شارپ خط اول را کامنت کرده و خط دوم را در انتهای فایل اضافه کنید:
#auth substack password-auth auth sufficient pam_google_authenticator.so
فایل را ذخیره کنید و آن را ببندید. حالا باید تنظیمات دیمن SSH را درست کنید. سپس تنظیمات خطهای بعدی را به ترتیب به بله و خیر تغییر دهید:
sudo nano /etc/ssh/sshd_config ChallengeResponseAuthentication yes PasswordAuthentication no
سپس خط زیر را به آخر فایل اضافه کرده و فایل را ذخیره کنید:
AuthenticationMethods publickey,password publickey,keyboard-interactive
در نهایت برای اعمال تغییرات سرویس SSH را ریست (راهاندازی مجدد!) کنید:
sudo systemctl restart sshd
حالا خواهید دید که بعد از SSH به سرور لینوکس، از شما کد تایید خواسته میشود که باید با استفاده از برنامه تایید دو مرحلهای که در گوشی خود دارید، آن را وارد کنید.
گرچه 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 کرده و سرور لینوکس خود را مدیریت کنید.