همانطور که میدانید فایروال در لینوکس توضیع Centos7 دستخوش تغییرات زیادی شده و از Firewallld استفاده میکند (البته همچنان IPtables نیز قابل دسترس میباشد). Firewalld یک راه حل جامع و کاملی را برای مدیریت دسترسی های شبکه ارائه کرده است که در Centos 7 در دسترس میباشد. قصد داریم در این اموزش شما را با مفاهیم کلی و پایه این دیواره اتش یا همان فایروال اشنا نماییم.
مفاهیم پایه ای Firewalld
قبل از اینکه با با دستورات این فایروال اشنا شوید نیاز است تا با مفاهیم ابتدایی و عملکرد این فایروال اشنا شوید.
محدوده (zone)
سرویس Firewalld گروه هایی از (rules) قوانین را مدیریت میکند که به این گروه ها zone گفته میشود. بطور ساده گروه ها از rules هایی تشکیل شده است که با توجه با نوع شبکه و میزان اعتماد پذیری ، کارت شبکه نیز به گروهی اختصاص می یابد تا ترافیک ها توسط فایروال مدیریت شود.
برای محیط هایی شبکه ای که سیستم ها و Client ها در ان زیاد جابه جا میشود (مانند لپتاپ و دیگر گجت های پرتابل) این نوع انعطافپذیری بسیار کاربردی و مفید خواهد بود و این امکان را میدهد تا rules را با توجه به محیط مورد نیاز تغییر دهیم. شما ممکن است در محیطی که Wifi ارائه میشود بسیاری از ترافیک ها را منع کنید در صورتی که در محیط home network انقدر در کنترل ترافیک و اتصالات سختگیر نباشید. البته برای سرور ها این قابلیت زیاد مهم نخواهد بود چون نوع دسترسی محیطی به سرور به ندرت تغییر میکند و مانند محیط های شبکه ای اداری و یا بطور مثال شبکه فرودگاه و یا شبکه دانشگاه متغیر نخواهد بود.
با توجه به میزان تغییر محیط شبکه های ممکن است برای شما دانستن zone های از پیش تعریف شده Firewalld کاربردی و کارامد باشد.
- Drop : بطور ساده کمترین میزان اعتماد به محیط شبکه است و تمامی کانکشن های ورودی بدون پیغام قطع شده و فقط کانکشن های خروجی امکان اتصال خواهد داشت.
- Block : این zone نیز همانند zone بالا عمل میکند با این تفاوت که کانکشن های رد شده کاربر با پیغام icmp-host-prohibited یا
icmp6-adm-prohibited
مواجه میشود. - Public : بطور ساده شبکه عمومی و غیر قابل اطمینان را تحت پوشش قرار میدهد. در این مدل شما به هیچ کدام از کاربران و کامپیوتر ها اعتماد ندارید و فقط بعضی از کامپیوتر های مورد نظر قادر به استفاده از شبکه میباشند که از متد موردبه مورد برای اتصال استفاده میشود.
- External : این zone برای زمانیست که از firewalld به عنوان درگاه (gateway) استفاده میکنید. این مدل بصورت NAT تعریف میشود هرچند شبکه داخلی شما بصورت خصوصی باقی میماند اما همچنان قابل دسترس خواهد بود.
- Internal : در سمت دیگر External قرار دارد و سمت داخلی Gateway را مدیریت میکند که در بخش داخلی کامپیوتر ها نسبتا قابل اعتماد بوده و سرویس های اضافی دیگری نیز وجود دارد.
- DMZ : برای کامپیوتر های محدوده DMZ استفاده میشود.(مناطق غیر نظامی) این کامپیوتر ها ایزوله شده میباشد و فقط کانکشن های مشخص شده ورودی اجازه اتصال خواهد داشت.
- Work : برای سیستم های کاری استفاده میشود و اکثر کامپیوتر ها مجوز های لازم برای اتصال را خواهند داشت.
- Home : محیط خانگی مدنظر خواهد بود. بطور کلی اکثر کامپیوتر ها مورد اعتماد خواهد بود و بعضی از سرویس ها نیز میتواند مورد استفاده قرار بگیرد.
- Trusted : تمامی ماشین ها و کامپیوتر ها مورد اعتماد خواهد بود و این zone باید به دقت و در محیط های کاملا شناخته شده مورد استفاده قرار بگیرد.
برای استفاده از فایروال میتوانیم zone های مورد نظر را انتخاب و تنظیمات دلخواه را در ان اعمال کنیم یا zone های خودمان را ساخته و ان را به سخت افزار های شبکه اختصاص دهیم.
دوام rule ها
در firewalld محدودیت ها میتواند به دو صورت دائمی و یا فوری طراحی شود.(permanent or immediate) زمانی که شما یک rule را ویرایش و یا اضافه کنید در حالت پیشفرض عملکرد firewall تغییر یافته و در boot بعدی تنظیمات به حالت قبل باز میگردد.
برای دائمی شدن تنظیمات میتوانید از در بیشتر rule ها از flag دائمی ساز permanent– استفاده نمایید. پس از استفاده از این flag پس از reboot نیز ایت تغییرات تغییر نخواهد کرد.
روشن کردن FirewallD
قبل از تغییر یا افزودن rule به firewalld باید ان را در حالت Daemon راه اندازی نمایید. بخش systemd مربوط به فایروال firewalld.service نامیده میشود. برای start کردن سرویس Firewalld دستور زیر را در محیط CLI تایپ نمایید:
1
|
$sudo systemctl start firewalld.service
|
برای مشخص کردن وضعیت فایروال از دستور زیر استفاده نمایید:
1
|
$firewall–cmd —state
|
خروجی بصورت زیر خواهد بود:
1
|
running
|
این خروجی نشان میدهد FirewallD با تنظیمات پیشفرض اجرا شده و در حال سرویس دهی میباشد.
در این قسمت ما Service مربوط را FirewallD را نباید Enable نماییم. Enable کردن Service باعث میشود تا FirewallD در زمان boot اجرا شود که به دلیل تنظیمات پیشفرض ان ممکن است در شبکه اختلال ایجاد نمایید. پس بهتر است این حالت پس از ایجاد تغییرات در Zone و تغییر در تنظیمات و تست تغییرات فعال شود.
اشنایی به Rules های پیشفرض FirewallD
قبل از انجام تغییرات بهتر است با تنظیمات پیشفرض در این مدل فایروال که توسط Daemon ارائه میشود اشنا شویم.
Rule های پیشفرض
برای مشاهده محیط پیشفرض انتخاب شده توسط Firewalld دستور زیر را اجرا نمایید:
1
|
$firewall–cmd —get–default–zone
|
خروجی :
1
|
public
|
تا زمانی که Zone فعال توسط ما تغییر داده نشود Zone پیشفرض روی رابط های شبکه فعال میباشد:
1
|
$firewall–cmd —get–active–zones
|
خروجی:
1
2
|
public
interfaces: eth0 eth1
|
از این خروجی نتیجه میگیریم که zone حالت public روی رابط های eth0 و eth1 فعال و ان را کنترول می کند. این دو رابط توسط rule های zone عمومی یا همان public مدیریت میشود.
برای نمایش rule های مورد استفاده در حالت public میتوانید از دستور زیر استفاده نمایید تا نوع محدودیت ها را مشاهده نمایید:
1
|
$firewall–cmd —list–all
|
خروجی:
1
2
3
4
5
6
7
8
9
|
public (default, active)
interfaces: eth0 eth1
sources:
services: dhcpv6–client ssh
ports:
masquerade: no
forward–ports:
icmp–blocks:
rich rules:
|
از خروجی بالا می شود فهمید رابط های شبکه eth0 و eth2 از حالت public استفاده میکند (هرچند این موضوع قبلا نیز به روشی که بالا گفته شده مشخص شده است) همچنین DHCP (برای اختصاص IP) و SSH (برای اتصال و ریموت) نیز بصورت نرمال اجازه به فعالیت و سرویس دهی دارند.
برسی zone های دیگر
پس از برسی های ابتدایی zone و rule های پیشفرض تقریبا با مفاهیم کلی اشنایی پیدا کردید میتوانیم دیگر zone ها را مورد برسی قرار دهیم.
برای مشاهده zone های در دسترس دستور زیر را وارد نمایید:
1
|
$firewall–cmd —get–zones
|
خروجی:
1
|
block dmz drop external home internal public trusted work
|
برای مشاهده تنظیمات مربوط به هر zone میتوانید از پارامتر =zone– استفاده نمایید:
1
|
$firewall–cmd —zone=home —list–all
|
خروجی:
1
2
3
4
5
6
7
8
|
interfaces:
sources:
services: dhcpv6–client ipp–client mdns samba–client ssh
ports:
masquerade: no
forward–ports:
icmp–blocks:
rich rules:
|
همچنین میتوانید با استفاده از دستور زیز تنظیمات تمامی zone ها را مشاهده نمایید:
1
|
$firewall–cmd —list–all–zones | less
|
انتخاب یک zone برای رابط شبکه
زمانی که برای یک رابط zone خاصی مشخص نکرده باشید در زمان boot بصورت اتوماتیک zone پیشفرض به ان اختصاص خواهد یافت.
برای مثال شما میتوانید zone یک رابط شبکه را با استفاده از پارامتر =zone– و =change-interface– تغییر دهید:
1
|
$sudo firewall–cmd —zone=home —change–interface=eth0
|
خروجی:
1
|
success
|
تذکر:توجه داشته باشید زمانی که zone یک رابطه شبکه را تغییر میدهید ممکن است ان رابط در حال سرویس دهی باشد و این عمل باعث اختلال و یا Drop شدن اتصالات فعال گردد. پس قبل از هر تغییر در zone ابتدا rule های ان را در نظر بگیرید.
بعد از تغییر در zone رابط ها میتوانیم با استفاده از دستور زیر از صحت ان مطمئن شویم:
1
|
$firewall–cmd —get–active–zones
|
خروجی:
1
2
3
4
|
home
interfaces: eth0
public
interfaces: eth1
|
زمانی که firewalld ریستارت شود مجددا zone ها به حالت پیشفرض برمیگردد:
1
2
|
$sudo systemctl restart firewalld.service
$firewall–cmd —get–active–zones
|
خروجی:
1
2
|
public
interfaces: eth0 eth1
|