یکشنبه, 04 مهر 1395 11:14

آموزش گام به گام امنیت سرور مجازی و اختصاصی لینوکس

آموزش گام به گام امنیت سرور لینوکس آموزش گام به گام امنیت سرور لینوکس

توی این آموزش قصد دارم بصورت گام به گام، نحوه امن سازی یک سرور لینوکسی (مجازی یا اختصاصی) رو بررسی کنم. البته این شعار کلیشه ای رو فراموش نمی کنم که «امنیتِ صد در صد توی فضای مجازی وجود نداره»، اما با این حال با انجام مراحل زیر، سرورهای خودم تا حالا با مشکل امنیتی خاصی مواجه نبودند.

نکاتی که باید مورد توجه قرار بگیره اینه که:

  • این آموزش صرفا برای سرورهای لینوکس (مجازی و اختصاصی) کاربرد داره.
  • توزیع لینوکسی که توی این آموزش استفاده کردم RPM-based هست، دقیقا باید بگم از لینوکس نسخه سِنت، اُ، اِس (CentOS) استفاده کردم. اما بدونید که تفاوتی در نسخه های Debian-based مثل اوبونتو (Ubuntu) در اصل آموزش وجود نداره و با تغییرات بسیار بسیار کمی در دستورات، میشه اونها رو روی توزیع های دبیانی ( مثل اوبونتو ) هم انجام داد.
  • این آموزش ادعایی بر کامل بودن و یا بی نقص بودن نداره و اتفاقا خوشحال میشم که نواقص، خطاها و یا موارد کامل تر رو از قسمت نظرات به من و سایرین که در حال خوندن این آموزش هستند منتقل کنید.

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

  1. تغییر رمز عبور کاربر root
  2. ساخت یک کاربر جایگزین بجای root
  3. اختصاص رمز عبور برای کاربر جدید
  4. اختصاص دسترسی root به کاربر جدید
  5. تغییر پورت ssh از عدد پیش فرض (22) به عددی که قابل تشخیص نباشد
  6. اجبار SSH به استفاده از پروتکل نوع 2
  7. مسدود نمودن دسترسی کاربر root به ssh
  8. نصب و پیکربندی فایروال رایگان و قدرتمند CSF

قبل از اقدام: اتصال به سرور لینوکس

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

قدم اول: تغییر رمز عبور کاربر root

برای تغییر رمز عبور یک کاربر از دستور passwd به همراه نام کاربر مورد نظر استفاده می کنیم:

# passwd root

با زدن دستور بالا سیستم از شما، رمز عبور فعلی این کاربر را درخواست میکند، رمز عبور فعلی را وارد نموده و اینتر را بزنید، حال سیستم از شما رمز عبور را درخواست میکند، رمزی متشکل از حروف کوچک و بزرگ و اعداد و کاراکترهای خاص را وارد کرده و اینتر بزنید، سیستم از شما میخواهد مجددا رمز عبور جدید را وارد نمایید، با اینکار شما از قدم دوم که تغییر رمز عبور کاربر root می باشد عبور کرده اید. به همین سادگی!

قدم دوم: ساخت یک کاربر جایگزین بجای root

برای ساخت یک کاربر جدید از دستور adduser به همراه نام کاربر جدید استفاده می کنیم:

# adduser karbarejadid

با وارد نمودن دستور بالا کاربری با نام karbarejadid به سرور لینوکس ما اضافه خواهد شد.

قدم سوم: اختصاص رمز عبور برای کاربر جدید

اکنون باید برای کاربر جدیدی که ساخته ایم ( karbarejadid ) یک رمز عبور دشوار اختصاص دهیم، دستور زیر را وارد نموده و اینتر میزنیم:

# passwd karbarejadid

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

قدم چهارم: اختصاص دسترسی root به کاربر جدید

برای دادنِ دسترسی ریشه (root) به کاربر جدید، باید دستور sudo را تنظیم کنیم که اجازه دستورات مدیر کلِ سرورِ لینوکسی را به کاربر جدید بدهد و این تنظیمات در این فایل

/etc/sudoers

قرار دارند، اما نکته بسیار مهم این است که این فایل نباید توسط ویرایشگرهای عمومی مثل nano یا vim ویرایش گردد، چون کوچکترین خطایی امکان دارد شما را با سیستمی که تنظیمات دسترسی آن غیرقابل بازگشت است مواجه کند، برای جلوگیری از چنین خطایی، بجای استفاده از ویرایشگرهای عمومی برای ویرایش دستور sudo کافیست از دستور visudo برای ویرایش این فایل استفاده کنیم، در حقیقت دستور visudo از ویرایشگر vi برای ویرایش استفاده میکند اما هنگام ذخیره فایل دستورات وارد شده را برای جلوگیری از خطاهای انسانی در متن اعتبارسنجی می کند.

بنابراین برای اختصاص دسترسی root به کاربر جدید دستور زیر را وارد میکنیم تا فایل تنظیمات دستور sudo باز شود:

# visudo

حال که فایل باز شد، درون فایل میگردیم تا به خط زیر برسیم:

root   ALL = (ALL)   ALL

بعد از یافتن خط بالا، خط زیر را به زیرِ خطِ بالا، اضافه می کنیم (با زدن کلید i ، فایل به حالت ویرایش می رود و با زدن کلید ESC از حالت ویرایش خارج میگردد، یعنی به انتهای دستور بالا رفته و کلید i را میزنیم، حال برای رفتن به خط بعد اینتر میزنیم و دستور زیر را مینویسیم و سپس با زدن کلید ESC از حالت ویرایش خارج میشویم):

نام‌کاربرجدید    ALL = (ALL)   ALL

یعنی تا اینجای کار باید این قسمت از فایل اینگونه باشد:

root            ALL = (ALL)    ALL
karbarejadid    ALL = (ALL)    ALL

اکنون برای ذخیره دستورات اعمال شده روی فایل، کافیست که با نوشتن دونقطه (:) و سپس نوشتن wq و زدن اینتر، فایل را ذخیره نموده و از آن خارج شویم:

:wq

قدم پنجم: تغییر پورت SSH از عدد پیش فرض (22) به عددی که قابل تشخیص نباشد

برای اصلاح و تغییر تنظیمات SSH باید فایل sshd_config را باز نماییم، من برای ویرایش این فایل از ویرایشگر vi استفاده میکنم:

# sudo vim /etc/ssh/sshd_config

خُب! حال که فایل باز شد به دنبال خط زیر میگردم:

#Port 22

در این خط، علامت هشتگ (#) را از جلوی عبارت حذف میکنم، و سپس عدد 22 که پورت پیش‌فرض SSH می‌باشد را به عدد دیگری بین 1025 تا 65536 تغییر میدهم (بهترین عدد برای تغییر پورت پیش‌فرض SSH چیست؟)

Port 1234

قدم ششم: اجبار SSH به استفاده از پروتکل نوع 2

حال باید خط زیر را هم از حالت کامنت خارج کنیم (با برداشتن علامت #):

#Protocol 2

تبدیل کنیم به :

Protocol 2

قدم هفتم: مسدود نمودن دسترسی کاربر root به ssh

در ادامه باید خط زیر را هم از حالت کامنت خارج کنیم (با بر حذف نمودن علامت # از ابتدای خط):

#PermitRootLogin yes

و همچنین مقدار yes را به no تبدیل کنیم، یعنی خط را به این شکل تبدیل کنیم:

PermitRootLogin no

و همچنین عبارت useDNS را از حالت yes به حالت no تغییر می دهیم:

useDNS no

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

برای اینکار دستور AllowUsers را یافته و root را از جلوی آن حذف کرده و بجای آن، نام کاربر جدید را وارد می نماییم:

AllowUsers karbarejadid

حال فایل را ذخیره کرده و از آن خارج می شویم. (چگونه یک فایل را با استفاده از ویرایشگر vim ویرایش کرده، ذخیره کرده و از آن خارج شویم).

حال برای اعمال تغییرات، باید SSH را مجددا راه اندازی نماییم (reload کنیم):

# /etc/init.d/sshd reload
یا
# systemctl restart sshd

حال میتوانیم با خارج شدن از سیستم و ورود مجدد، SSH را با کاربر root و کاربر جدید تست نماییم.

دیدگاه‌ها  

soheil
# soheil
با سلام میخواستم سوالی بپرسم
من چندین وقته که توی قرنطینه آموزش های لینوکس رو دنبال میکنم و حتی پکیج سوپر لینوکس نابغه ها رو خریداری کردم.
میخواستم ببینم در کنار لینوکس چه زبان هایی مهم هستند برای هک و امنیت(بع غیر از پایتون و پرل)
پاسخ دادن 1399-01-25 01:34
مصطفی رامندی
# مصطفی رامندی
سلام
اول عذرخواهی بابت اینکه پیامتون رو دیر دیدم. نمیدونم چرا وسط پیام‌ها این پیام رو ندیده بودم.
دوم باید بگم برای حرفه‌ای شدن در زمینه امنیت، هک و نفوذ باید ببینید در چه زمینه و میدانی قراره فعالیت کنید.
اگر زمینه فعالیتتون فضای مجازی، سایتها و سرورهاست نیازه که زبانهای PHP, ASP, زبانهای اسکریپتی که خودتون نام بردین، معماری شبکه و نحوه کار علمی و فنی، نحوه کار سیستم عامل ها و آشنایی با نحوه عملکردشون و هرچیزی که به چشمتون میخوره رو یاد بگیرین.
این زمینه رشته‌ای نیست که بشه گفت از کجا شروع کنید و تا کجا ادامه بدین.
باید در هر چیزی سرک کشیده باشین.
اما حداقل در یک زبان برنامه نویسی (هر زبانی که علاقه شخصی دارین) بسیار حرفه‌ای باشین.
و البته یاد بگیرین سرور‌های ویندوزی و لینوکسی رو راه اندازی نگهداری و امن کنین.
و البته خیلی چیزهای دیگه که در اینجا مجال گفتنش نیست متاسفانه. امیدوارم در آینده‌ای نزدیک یک مطلب در این حوزه بنویسم.
پاسخ دادن 1399-08-28 01:17

دیدگاه شما