سلام دوستان . در این سری از آموزش ها قصد داریم تا یک بررسی جامعی از فایروال ها در سمت سرور و کلاینت داشته باشیم لذا انواع فایروال ها را با رابط های مختلف ( گرافیکی و متنی ) و با پالیسی های مختلف بررسی می کنیم . ابتدا از سمت کلاینت و با رابط های گرافیکی شروع می کنیم و کم کم به سمت سرور و کار با فایروال های قوی تری همچون iptables خواهیم پرداخت . هم چنین ابتدا از روتر بودن کلاینت و سرور خود صرف نظر می کنیم اما در قسمت های بعدی به توضیح رول های مربوط به Routing نیز خواهیم پرداخت .
اگر بخواهیم در مورد امنیت صحبت کنیم طبیعتا ابتدا باید از سیستم شخصی خودمون شروع کنیم . پس باید با طرز کار یک فایروال در سیستم خودمون به خوبی آشنا باشیم . هم چنین زمانی رو فرض کنید که دوست نداریم برنامه ها و … به صورت خودکار به اینترنت متصل شده و به عنوان مثال عمل بروز رسانی را انجام دهند و یا می خوایم از پورت های سیستم خودمون مطمین باشیم تا یک وقت برنامه ای آلوده با بیرون در ارتباط نباشد . تمامی این موارد را می توان با یک فایروال و برنامه ی netstat انجام داد و چک کرد .
در ابتدا روشی مشترک برای مشاهده ی سرویس ها و پورت های فعال در تمامی توزیع ها گفته می شود سپس فایروال UFW در اوبونتو را به صورت گرافیکی بررسی می کنیم . هم چنین در قسمت های بعدی دیگر فایروال ها در دیگر توزیع ها را بررسی می کنیم .
ابتدا برای چک کردن این که چه سرویس هایی و یا چه برنامه ای روی چه پورتی روی حالت listen قرار دارد , به صورت زیر عمل می کنیم :
netstat -tunlp4
نکته : از سویچ t برای مشخص کردن Socket های tcp استفاده کردیم .
نکته : از سویچ u برای مشخص کردن Socket های udp استفاده کردیم .
نکته : از سویچ l برای مشخص کردن Socket هایی که روی حالت listen قرار دارند استفاده کردیم .
نکته : از سویچ p برای مشخص کردن pid سرویس و یا برنامه ای که روی یک پورت سرویس می دهد استفاده کردیم .
نکته : از عدد 4 به منظور معیین کردن آی پی ورژن 4 استفاده کردیم . ( سرویس هایی که بر روی ای پی ورژن 4 سرویس دهی می کنند )
نکته : از سویچ n برای نشان دادن خروجی به صورت numerical addresses استفاده کردیم . ( با استفاده از این سویچ , پورت ها و … همراه با وظیفه آن ها نمایش داده می شوند . مثلا به چای درج پورت 80 از کلمه ی http استفاده می شود و … )
توجه : فقط زمانی می توانیم به صورت کامل و صحیح از سویچ p استفاده کنیم که سطح دسترسی روت داشته باشیم . به عنوان مثال :
همان طور که ملاحظه می کنید ( به عنوان مثال ) سرویس ssh با pid 743 روی پورت 22 در حال سرویس دهی است و یا برنامه ی Viber با pid 3127 بر روی آی پی 127.0.0.1 و پورت 30666 در حالت listen است .
اما برای مشاهده ی ارتباط سیستم با آی پی ها و پورت های خارج از سیستم به صورت زیر عمل می کنیم :
netstat -tupnv4
در واقع از همان دستور قبلی استفاده می کنیم , با این تفاوت که دیگر از سویچ l یعنی حالت listen استفاده نمی کنیم .
نکته : می توان از سویچ c- جهت مانیتور کردن این دستور استفاده کرد . یعنی به صورت خودکار این برنامه بروز می شود و هر لحظه می توان چک کرد که سیستم روی چه پورتی و با چه آی پی در تماس است .
نکته : در خروجی دستور بالا باید به دنبال ارتباط های ESTABLISHED باشیم . یعنی ارتباط هایی که فعال هستند و اطلاعات رد و بدل می کنند . پس می توان یک grep به آخر دستور بالا اضافه کرد . یعنی :
netstat -tupnv4 | grep ESTABLISHED
نکته : در دو دستور قبل از سویچ p با سطج دسترسی روت استفاده کردیم . پس می توانیم pid هر سرویس و یا برنامه ای را مشاهده کنیم و اگر به آن مشکوک بودیم آن را kill کنیم . به عنوان مثال برای kill کردن برنامه ی وایبر به شکل زیر عمل می کنیم :
kill -9 3127
نکته : عدد 9 نوع سیگنالی است که جهت kill کردن پروسه فرستاده می شود . برای مشاهده انواع نوع سیگنال man پیچ دستور kill را مطالعه کنید .
توجه : دو دستور بالا و kill کردن یک پروسه در تمامی توزیع های گنو لینوکسی یکسان می باشد .
اما بعد از این که مشاهده کردیم چه سرویس هایی روی حالت listen هستند و سیستم با چه آی پی هایی در تماس است , لازم است که با استفاده از یک فایروال جلوی برقرار ارتباط هر کدام را بگیریم . شاید بتوان یکی از قوی ترین فایروال های را iptables نام برد که تقریبا در تمامی توزیع های گنو لینوکسی از آن استفاده می شود .
تقریبا با iptables تمامی نیاز های یک سیستم را می توان بر طرف کرد همین جامع بودن باعث انعطاف بالای این فایروال شده است و این انعطاف بالا کار را برای تازه واردان کمی سخت می کند . برای همین ابتدا کار با فایروال های گرافیکی در دو توزیع ubuntu و centos را بررسی می کنیم سپس به بررسی دیگر فایروال ها از جمله iptables خواهیم پرداخت .
رابط گرافیکی فایروال UFW در اوبونتو :
لازم به ذکر است که این فایروال به صورت پیش فرض بر روی اوبونتو نصب می باشد پس جهت تست می توان به صورت زیر عمل کرد :
sudo ufw status
به صورت پیش فرض فقط رابط CLI این فایروال نصب می باشد لذا باید رابط GUI این فایروال را نصب کرد . به صورت زیر :
sudo apt-get install gufw
برای استفاده از محیط گرافیکی فایروال UFW کافیست دستور زیر را در ترمینال وارد کنیم :
gufw
نکته : حرف g در ابتدای کلمه ی gufw به معنای gui می باشد .
نکته : برای کار با این فایروال باید سطح دسترسی روت داشت . پس لازم است که دستور بالا را با استفاده از یوزر روت اجرا کنیم و یا این که برنامه را در محیط معمولی اجرا کرده سپس بر روی گزینه ی unlock کلیک کنیم .
حال برای فعال کردن فایروال کافیست از قسمت status اقدام به فعال کردن فایروال کنیم . پس از فعال شدن فایروال خواهید دید که آیتم incoming به صورت پیش فرض روی حالت deny قرار گرفته و آیتم outgoing به صورت پیش فرض روی حالت allow قرار دارد .
( فعلا ) یک سیستم کلاینت را برای ارتباط با دیگر سیستم ها می توان در همین دو حالت خلاصه کرد . یعنی :
1. پکت هایی که از طرف دیگر سیستم ها وارد سیستم ما می شوند .
2. پکت هایی که از سیستم ما خارج شده و وارد دیگر سیستم ها می شوند .
حالت اول را incoming گویند چرا که همان طور که مشخص است , ابتدا پکت ها قصد وارد شدن به سیستم را دارند . یعنی دیگران قصد برقراری یک ارتباط با سیستم ما را دارند . مثلا روی پورت 22
حالت دوم را outgoing گویند چرا که همان طور که مشخص است , ابتدا پکت ها از سیستم ما خارج می شوند و به دیگر سیستم ها فرستاده می شوند . یعنی ما قصد برقراری ارتباط با دیگر سیستم ها را داریم . مثلا قصد باز کردن یک صفحه ی اینترنتی را داریم .
حالا که درک نسبی ای از دو حال incoming و outgoing بدست آوردیم , لازم است که فایروال را متناسب با نیاز های سیستم خودمون کانفیگ کنیم . به عنوان مثال پالیسی های فرضی من در سیستم به شرح زیر است :
1. سیستم من فقط بتواند روی پورت 80 و 443 با بیرون ارتباط برقرار کند ( یعنی بتوانیم صفحات اینترنتی را باز کنیم )
2. دیگران از بیرون فقط و فقط بتوانند روی پورت 22 با سیستم من در ارتباط باشند .
یک بار دیگر حالت اول را بخوانید . قرار است که سیستم با بیرون ارتباط برقرار کند پس نتیجه می گیریم که باید با حالت outgoing کار کنیم . پس در درجه ی اول ابتدا دو پورت 80 و 443 را برای حالت outgoing باز می کنیم . سپس تمامی پورت های دیگر را می بندیم .
برای این منظور در فایروال قسمت Outgoing را انتخاب کرده و بر روی Reject کلیک کنید . حال برای باز کردن دو پورت خواسته شده در بالا از قسمت Rules بر روی + کلیک کنیم تا پنجره ی firewall: add role باز شود .
حال به سربرگ simple می رویم . قرار بود که دو پورت 80 و 443 را برای حالت outgoing باز بزاریم . پس به ترتیب موارد زیر را انتخاب می کنیم :
allow out TCP 80 allow out TCP 443
نکته : اگر فقط این دو رول را ست کنید , خواهید توانست آی پی آدرس ها را روی پورت 80 و 443 باز کنید یعنی نمی توانید با دامنه ی سایتی کار کنید , چرا که ارتباط با dns server را قطع کرده اید ! یعنی نمی توانید دامنه ی گوگل را با مرورگر خودتون باز کنید . اما می توانید آی پی سرور گوگل را روی پورت 80 ویا 443 باز کنید .
برای حل این مشکل کافیست پورت 53 را هم باز کنید . فقط توجه داشته باشید که ارتباط با dns server از نوع udp می باشد . لذا به صورت زیر عمل می کنیم :
allow out UDP 53
نکته : v6 به معنای IPv6 می باشد که می توان 3 رول آخر را انتخاب کرد و سپس روی گزینه ی – کلیک کرد تا پاک شوند . حال برای تست نتایج یک ترمینال باز کنید و به عنوان مثال به صورت زیر عمل کنید :
nmap portquiz.net -p 80,443,8080
اگر مراحل بالا را درست طی کرده باشید باید بتوانید دو پورت 80 و 443 را باز و پورت 8080 را بسته ببینید .
توجه : پورت 8080 بر روی سایت بالا باز می باشد اما توجه کنید که ما فقط دو پورت 80 و 443 را برای outgoing انتخاب کرده ایم و ارتباط روی تمامی پورت های دیگر را بسته ایم .
اما پالیسی شماره ی دوم . یعنی : دیگران از بیرون فقط و فقط بتوانند روی پورت 22 با سیستم من در ارتباط باشند
همان طور که در بالا گفته شد , به صورت پیش فرض تمامی ارتباطات روی حالت incoming بسته می باشد یعنی نمی توان روی هیچ پورتی از خارج با سیستم در تماس بود . حال برای اعمال پالسی بالا ابتدا از پنجره ی اصلی فایروال از قسمت incoming گزینه ی Reject را انتخاب کنید سپس برای باز کردن یک پورت خاص کافیست از قسمت roles بر روی + کلیک کنیم تا پنجره ی Firewall: add Role باز شود . سپس به سربرگ simple می رویم . حال کافیست پالیسی مورد نظر را به صورت زیر وارد کنیم :
allow in TCP 22
حالا برای مشاهده نتیجه کافیست از سیستمی دیگر آی پی اوبونتوی خود را روی پورت 22 اسکن کنیم . به عنوان مثال :
در قسمت بعدی به توضیح رابط متنی این فایروال در اوبونتو خواهیم پرداخت
نویسنده : E2MA3N
منبع : او اس لرن |http://OSLearn.ir