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

چیزهایی را نصب کنید که به آن نیاز دارید

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

برای در اختیار داشتن یک سرور امن اولین قانون این است که سرور خود را تا حد امکان خلاصه و ساده نگه دارید. تنها پکیج‎هایی را که واقعا به آن نیاز دارید، نصب کنید. اگر از قبل پکیج‎های ناخواسته‎ای روی سرور شما نصب شده است آنها را پاکسازی کنید. هر چه بسته‎های نرم افزاری شما کمتر باشد احتمال مواجه شدن با باگ‎ها و حفره‎های نرم افزاری نیز کمتر می‎شود. قبل از نصب هر گونه نرم افزار و بسته‎های وابسته (مثل ownCloud )، شما باید اسناد مرتبط با آن پکیج را مطالعه کرده و تنها مواردی که به آن نیاز دارید را نصب کنید.

چیزهایی را اجرا کنید که به آن نیاز دارید

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

netstat -npl

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

systemctl list-unit-files --type=service | grep enabled

بر اساس نوع سیستم، شما ممکن است یک خروجی شبیه به آن چه در تصویر بالا مشاهده می‎کنید را دریافت کنید. اگر با هر نوع سرویس ناخواسته مواجه شدید می‎توانید آن را با فرمان قدرتمند systemctl غیر فعال کنید:

systemctl disable service_name

محدود کردن دسترسی به سرور

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

هیچ گاه با حساب کاربری Root به سرور وارد نشوید

استفاده از حساب کاربری مدیریت ارشد یا همان روت برای ورود به سرور از طریق ssh به هیچ وجه کار درستی نیست. بنابراین بهترین کار این است که امکان دسترسی کاربر روت به سرور را از طریق ssh غیر فعال کنید. اما قبل از انجام این کار باید یک حساب کاربری ایجاد کنید که بتوانید با این حساب از طریق ssh به سرور وارد شده و وظایف مدیریتی را انجام دهید. به یاد داشته باشید که همیشه بعد از لاگین کردن به سرور می‎توانید در صورت نیاز به کاربر روت منتقل شوید.

برای اضافه کردن یک کاربر جدید در توزیع‎های مختلف لینوکس شیوه‎های متفاوتی وجود دارد. به عنوان مثال، توزیع Red Hat/CentOS از فرمان useradd و توزیع Ubuntu/Debian از فرمان adduser استفاده می‎کنند.

برای ایجاد یک کاربر جدید در Red Hat/CentOS از فرمان زیر استفاده کنید (swapnil نام کاربر فرضی ما است):

useradd swapnil

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

passwd swapnil

بعد از وارد کردن این فرمان از شما درخواست می‎شود که یک کلمه عبور جدید برای این کاربر وارد کنید. حالا باید به این کاربر امکان برخورداری از توانایی‎های sudo را اعطا کنید. برای این منظور فرمان زیر را اجرا کنید:

EDITOR=nano visudo

سپس طبق تصویر زیر به دنبال این خط بگردید

# %wheel ALL=(ALL) ALL

خط را از حالت کامنت خارج کنید. نماد # در ابتدای هر خط نشان دهنده کامنت بودن (توضیحات) آن خط است و با برداشتن این نماد خط نیز از حالت کامنت خارج و به فرمان تبدیل می‎شود. بعد از انجام این کار خط شما به این شکل در خواهد آمد:

%wheel ALL=(ALL) ALL

حالا فایل را ذخیره و از آن خارج شوید. اگر این کاربر به گروه wheel تعلق ندارند شما می‎توانید به راحتی با استفاده از فرمان زیر آن را به این گروه اضافه کنید:

# usermod -aG wheel swapnil

در سیستم‎های اوبونتو از این فرمان استفاده کنید:

adduser swapnil

به سوالاتی که سیستم از شما می‎پرسد پاسخ دهید که شامل ایجاد یک کلمه عبور جدید برای این کاربر است. بعد از ساخته شدن این کاربر با استفاده از فرمان زیر قدرت‎های  sudo را به او اعطا کنید:

gpasswd -a swapnil sudo

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

غیرفعال کردن امکان ورود با کاربر root

بعد از طی کردن مراحل قبل حالا نوبت آن است که امکان دسترسی کاربر root را غیرفعال کنیم. با این کار دیگر هیچ کس نمی‎تواند از طریق ssh یا روش‎های دیگر به عنوان کاربر روت وارد سیستم شود. برای انجام این کار فایل پیکربندی sshd را باز کنید:

nano /etc/ssh/sshd_conf

سپس خط زیر را پیدا کرده و آن را از حالت کامنت خارج کنید:

#PermitRootLogin no

حالا فایل را ذخيره کرده و از آن خارج شوید، بعد سرویس را با استفاده از فرمان زیر ری‎استارت کنید:

service ssh restart

یا:

systemctl restart sshd

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

تغییر دادن پورت

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

فایل sshd_config  را باز کنید (این بار از طریق فرمان sudo، چرا که دیگر شما نمی‎توانید با استفاده از حساب کاربری روت به سرور وارد شوید):

sudo nano /etc/ssh/sshd_conf

سپس این خط را پیدا کنید:

#Port 22

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

Port 1977

سپس فایل را ذخیره کرده و از آن خارج شوید و یک بار سرویس sshd را ری‎استارت کنید. یک بار دیگر قبل از خارج شدن از سرور با باز کردن یک پنجره ترمینال دیگر و لاگین کردن با استفاده از الگوی زیر تنظیمات خود را بررسی کنید:

ssh -p{port_number}@server_IP

مثال:

ssh -p1977

 This e-mail address is being protected from spambots. You need JavaScript enabled to view it

اگر توانستید با موفقیت به سرور وارد شوید کارها به درستی انجام شده است.

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

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

برای شروع ابتدا کلید ssh را با استفاده از فرمان زير در سیستم محلی خود ایجاد کنید:

ssh-keygen - t rsa

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

cat ~/.ssh/id_rsa.pub | ssh -p 1977 swapnil@remote-server ";mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

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

انجام این مرحله بیشتر از این که جنبه افزایش امنیت داشته باشد برای سهولت در انجام کار مورد استفاده قرار می‎گیرد. اما در مجموع با غیرفعال کردن کامل احراز هویت به وسیله کلمه عبور شما می‎توانید مقداری امنیت سرور خود را نیز بالا ببريد. فایل sshd_config  را باز کرده و این خط کامنت شده را پیدا کنید:

#PasswordAuthentication yes

سپس آن را از حالت کامنت خارج کنید و مقدار آن را از yes به no تغییر دهید، حالا فایل را ذخيره و از آن خارج شوید. بعد سرویس sshd را ری‎استارت کنید. یک بار دیگر، همچنان ارتباط خود با سرور را در پنجره فعلی باقی نگه دارید. یک ترمینال جدید باز کرده و به سرور لاگین کنید (دقت کنید که این کار بدون پرسیدن کلمه عبور انجام شود).

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

نتیجه‎گیری

مطالب ارائه شده در بالا یکسری از ملاحظات عمومی‎ برای کاربران جدید بودند که بتوانند با رعایت کردن آنها سرور شخصی خود را امن‎تر راه‌اندازی کنند. اما باید توجه داشته باشید که خرابکاران و متجاوزان همیشه یک مرحله از ما جلوتر هستند. آنها برای نفوذ به سرور شما تمام حفره‎های موجود را بررسی می‎کنند. بنابراین بهترین کار این است که همیشه یک نسخه پشتیبان از محتوای سرور خود در اختیار داشته باشید تا در صورت از دست رفتن آن به هر دلیلی (از جمله حملات سایبری) بتوانيد آن را سریعا جایگزین کنید. کارشناسان توصیه می‎کنند همیشه قبل و بعد از اعمال تغییرات روی سرور خود نیز از محتوای آن پشتیبان تهیه کنید. با این کار اگر به هر دلیلی سرور شما به درستی کار خود را انجام نداده و دچار مشکل شد می‎توانید با استفاده از نسخه پشتیبان به مرحله قبلی بازگردید.

==============================

شاید به این مقالات هم علاقمند باشید:

ماهنامه شبکه را از کجا تهیه کنیم؟
ماهنامه شبکه را می‌توانید از کتابخانه‌های عمومی سراسر کشور و نیز از دکه‌های روزنامه‌فروشی تهیه نمائید.

ثبت اشتراک نسخه کاغذی ماهنامه شبکه     
ثبت اشتراک نسخه آنلاین

 

کتاب الکترونیک +Network راهنمای شبکه‌ها

  • برای دانلود تنها کتاب کامل ترجمه فارسی +Network  اینجا  کلیک کنید.

کتاب الکترونیک دوره مقدماتی آموزش پایتون

  • اگر قصد یادگیری برنامه‌نویسی را دارید ولی هیچ پیش‌زمینه‌ای ندارید اینجا کلیک کنید.

ایسوس

نظر شما چیست؟