نحوه مدیریت و استفاده از FirewallD در CentOS7

1.3k

FirewallD یک راهکار مدیریت دیوار آتش برای اکثر توزیع های لینوکس است که به عنوان یک رابط کاربری برای iptables عمل می کند.

در این آموزش، نحوه استفاده از دستورات مدیریتی firewall-cmd را به شما آموزش خواهیم داد.

آشنایی با مفاهیم اولیه FirewallD

قبل از بررسی دستورات، لازم است با برخی مفاهیم اولیه آشنا شویم:

منطقه – Zones

سرویس firewalld مجموعه ای از قوانین به نام zones را مدیریت میکند. این مناطق بصورت کلی تعیین می کنند که چه ترافیکی می بایست بر اساس سطح اعمتادی که شما به شبکه های متصل به سیستم خود دارید رد و بدل شوند. کارت های شبکه به مناطق مورد نظر شما متصل می شوند تا رفتار ترافیکی توسط دیوار آتش کنترل شود.

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

بدون در نظر گرفتن اینکه چقدر محیط شبکه شما پویا است، دانستن و آشنا شدن با این ایده هایی که برای طراحی firewalld در نظر گرفته شده است امری ضروری است. به ترتیب در شبکه های پیشفرض تعریف شده از “کمترین میزان اعتماد” تا “بیشترین میزان اعتماد” مناطق زیر تعریف شده اند:

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

منطقه block: مانند مورد فوق با این تفاوت که اتصال های ورودی با پیام icmp-host-prohibited یا icmp6-adm-prohibited رد (reject) می شوند.

منطقه public: به عنوان شبکه عمومی و نا مطمئن. شما به سیستم های کامپیوتری موجود اعتمادی ندارید و صرفا ممکن است اجازه اتصال های ورودی را بر اساس مورد به مورد بدهید.

منطقه external: شبکه های خارجی در مواقعی که شما از فایروال به عنوان gateway خود استفاده می کنید. در اصل بصورت NAT masquerading به سمت شبکه داخلی شما متصل شده است و به همین منظور شبکه داخلی شما خصوصی اما در دسترس خواهد بود.

منطقه internal: سمت دیگر external است، برای بخش داخلی gateway شما است. سیستم های موجود تقریبا قابل اعتماد هستند و برخی سرویس ها نیز در دسترس هستند.

منطقه dmz: جهت استفاده برای سیستم هایی که در DMZ (سیستم هایی در شبکه که به هسته اصلی شبکه شما دسترسی ندارند) وجود دارد. صرفا برخی اتصال های ورودی مجاز هستند.

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

منطقه home: شبکه خانگی، در اصل شبکه ای که شما به اجزای آن اطمینان دارید و سرویس های بیشتری در دسترس هستند.

منطقه trusted: به تمامی سیستم های موجود در شبکه اطمینان دارید. باز ترین نوع منطقه موجود که می بایست با بررسی دقیق انتخاب شود.

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

دوام قوانین

در firewalld، قوانین تعریف شده می توانند به دو صورت “فوری” یا “دائمی” تعریف شوند. چنانچه یک rule اضافه شود و یا تغییر یابد، بصورت فوری رفتار فایروال تغییر می کند اما پس از ریستارت شدن سیستم قوانین قدیمی مجددا فعال می شوند و تغییرات از بین خواهند رفت.

اغلب دستورات firewall-cmd می توانند گزینه permanent– را به همراه داشته باشند. این گزینه مشخص می کند که پس از ریستارت شدن سیستم قانون تعریف شده مجددا فراخوانی شده و حذف نشود. این بدین معناست که شما می توانید قوانین را بصورت همزمان تست کنید و در صورتی که مشکلی برای شما پیش آمد با یک ریستارت قانون تعریف شده را حذف کنید. همچنین استفاده از تگ permamnet– به شما کمک می کند تا تعداد زیادی قوانین را تعریف کنید که پس از ریستارت سیستم اعمال شوند.

نصب و فعالسازی فایروال بر روی سیستم در زمان بوت شدن

نرم افزار firewalld بصورت پیشفرص بر روی برخی از توریع های لینوکس اعم از CentOS 7 وجود دارد. با این حال با استفاده از دستور زیر می توانید آن را نصب کنید:

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

پس از ریستارت شدن سیستم، فایروال می بایست فعال شده، کارتهای شبکه در zone مربوطه قرار گرفته (و یا به تنظیمات پیشرفض برگردد) و سپس قوانین تعریف شده پردازش شوند.

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

این بدین معناست که فایروال فعال است و تنظیمات پیشرفض فعال است.

آشنایی با قوانین فعلی فایروال

قبل از شروع تغییرات ابتدا باید با شرایط و قوانین فعلی تعریف شده بر روی سرویس آشنا شوید.

مشاهده تنظیمات پیشرفض

برای مشاهده منطقه انتخاب شده فعلی دستور زیر را بزنید:

از آنجایی که ما برای firewalld هنوز دستوراتی نزده ایم و بصورت پیشفرض است و هیچ یک از کارتهای شبکه ما به منطقه دیگری متصل کنید، تنها منطقه فعال همان مورد فوق است که کارتهای شبکه ما را کنترل می کند. جهت تایید میتوانید از دستور زیر استفاده کنید:

همانطور که میبینیم سرور ما دو کارت شبکه دارد که هر دو بصورت پیشفرض بر روی منطقه public تنظیم شده است.

چطور متوجه شویم که چه قوانینی برای منطقه عمومی تعریف شده است؟ با استفاده از دستور زیر میتوانید تمامی سرویس های فعال بر روی public zone را مشاهده کنیم:

همانطور که با استفاده از دستور قبلی هم دیدیم، هر دو کارت شبکه eth0 و eth1 به این zone متصل هستند. هرچند با این دستور میتوانیم ببینیم که سرویس DHCP Client و سرویس SSH بر روی این zone تعریف شده است.

مشاهده مناطق (zone) های دیگر

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

برای مشاهده لیست zone های موجود دستور زیر را بزنید:

ما می توانیم تنظیمات انجام شده برای یک zone خاص را با اضافه کردن دستور =zone– به همراه list-all– مشاهده کنیم:

شما می توانید تمامی مناطق تعریف شده را با استفاده از list-all-zones– مشاهده کنید.

انتخاب یک منطقه – Zone برای کارت شبکه شما:

در صورتی که شما برای یک کارت شبکه یه منطقه تعریف نکرده باشید، بصورت پیشفرض در زمان بوت منطقه پیشفرض برای آن تعریف شد است.

تغییر Zone بر روی کارت های شبکه

شما با استفاده از پارامتر =zone– به همراه =change-interface– می توانید تنظیمات را انجام دهید. همچنین برای دسترسی مدیریتی باید از sudo نیز استفاده کنید.

با استفاده از دستور زیر ما کارت شبکه eth0 را بر روی منطقه home تعریف می کنیم.

نکته

توجه داشته باشید که با تغییر zone ممکن است یک سرویس فعال از کار بی افتد، برای مثال در صورت انتقال به شبکه home سرویس SSH در آن فعال است و شما قادر به ادامه کار هستند اما برخی منطقه ها بصورت پیشفرض SSH برای آنها فعال نیست و در صورت جابجایی به آن مناطق دسترسی شما به سرور قطع خواهد شد و قادر به اتصال مجدد به سرور نخواهید بود.

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

تنظیم منطقه پیشفرض:

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

شما می توانید منطقه پیشفرض را با پارامتر =set-default-zone– تنظیم کنید. این دستور بلافاصله تمامی کارتهای شبکه را که منطقه ای برای آن تعریف نشده است را به شرح مورد نظر شما تغییر می دهد:

انتخاب قوانین برای برنامه های شما

بهترین روش برای تعریف قوانین فایروال تعریف آنها به عنوان نرم افزار است. راه کار آن به شرح ذیل است:

اضافه کردن یک سرویس برای منطقه های شما:

راحت ترین روش اضافه کردن سرویس و یا پورت مورد نظر شما برای مناطقی است که از آن استفاده می کنید، مجددا با دستور get-services– سرویس های فعال را دریافت کنید:

نکته

شما می توانید اطلاعات بیشتری در خصوص هر سرویس با مشاهده فایلهای xml. آن به دست آورید که در مسیر /usr/lib/firewalld/services قرار دارد. برای مثال سرویس SSH شامل موارد ذیل است: