سنت او اسسیستم عامل لینوکسمقالات وب
معرفی FirewallD در سنت او اس

همانطور که می دانید FirewallD یک کنترلر فرانت اند برای Iptable است که برای اجرای قوانین ترافیک شبکه به کار می رود. این گزینه دستورات خط فرمان و رابط کاربری را برای افراد ایجاد می کند و در مخزن بیشتر توزیع های لینوکسی موجود است. کار با FirewallD دو تفاوت اصلی در مقایسه با کنترل مستقیم Iptables دارد:
- FirewallD از نواحی و سرویس ها به جای Chain و قوانین استفاده می کند.
- این گزینه مجموعه دستورها و قوانین را به طور پویا مدیریت می کند و بدون شکستن Session ها و کانکشن های فعلی اجازه به روزرسانی را می دهد.
در این مقاله قصد داریم معرفی کوتاهی در مورد FirewallD داشته باشیم و مراحل پیکربندی اصلی آن را نشان دهیم. پس همراه وب ایده باشید.
نصب و مدیریت FirewallD:
FirewallD به طور پیش فرض در سنت او اس 7 قرار داد اما غیر فعال است. کنترل کردن آن همانند سایر موارد موجود در سیستم عامل است. برای آغاز کردن سرویس و فعال کردن FirewallD در بوت می توانید از دستور زیر استفاده کنید:
sudo systemctl start firewalld sudo systemctl enable firewalld
برای متوقف کردن یا غیر فعال نمودن آن هم می توانید از دستورات زیر کمک بگیرید:
sudo systemctl stop firewalld sudo systemctl disable firewalld
برای اینکه بتوانید وضعیت فایروال را بررسی کنید از کد زیر استفاده کنید. خروجی این دستور باید running یا not running باشد.
sudo firewall-cmd --state
برای دیدن وضعیت FirewallD daemon می توانید از کد زیر بهره ببرید:
sudo systemctl status firewalld
نمونه خروجی دستور بالا به صورت زیر است:
firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled) Active: active (running) since Wed 2015-09-02 18:03:22 UTC; 1min 12s ago Main PID: 11954 (firewalld) CGroup: /system.slice/firewalld.service └─11954 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
برای بارگذاری مجدد پیکربندی های FirewallD از دستور زیر استفاده کنید:
sudo firewall-cmd --reload
پیکربندی FirewallD:
FirewallD با فایل های XML پیکربندی شده است. به جز برای پیکربندی های بسیار خاص، در سایر موارد مجبور نخواهید بود با این فایل درگیر شوید و می توانید به جای آن از firewall-cmd استفاده کنید. فایل پیکربندی در دو دایرکتوری قرار گرفته است:
- دایرکتوری usr/lib/FirewallD که پیکربندی های پیش فرض همچون نواحی پیش فرض و سرویس های رایج را در خود نگه می دارد. از به روزرسانی این مسیر خودداری کنید زیرا این فایل ها با هر به روزرسانی overwrite می شوند.
- مسیر /etc/firewalld فایل های پیکربندی سیستم را در خود نگه می دارند. این فایل ها پیکربندی های پیش فرض را overwrite خواهند کرد.
تنظیمات پیکربندی:
Firewalld از دو مجموعه پیکربندی استفاده می کند: ران تایم و دائمی.
تغییرات پیکربندی های ران تایم در ریبوت یا در ریستارت Firewalld باقی نمی مانند. این در حالیست که تغییرات دائمی بر روی سیستم در حال اجرا اعمال نمی شوند. به طور پیش فرض دستورات firewall-cmd بر روی پیکربندی های ران تایم اعمال می شوند اما استفاده از بخش –permanent پیکربندی دائمی ایجاد می کند. برای اضافه کردن و فعال نمودن قوانین دائمی می توانید از یکی از دو روش زیر استفاده کنید:
قوانین را به مجموعه ران تایم و دائمی اضافه کنید:
sudo firewall-cmd --zone=public --add-service=http --permanent sudo firewall-cmd --zone=public --add-service=http
قوانین را به مجموعه دائمی اضافه کنید و FirewallD مجددا بارگذاری نمایید:
sudo firewall-cmd --zone=public --add-service=http --permanent sudo firewall-cmd --reload
نکته: دستور بارگذاری مجدد همه پیکربندی های ران تایم را رها می کند و پیکربندی دائم را اعمال می نماید. از آنجایی که FirewallD مجموعه قوانین را به طور پویا مدیریت می کند اتصال و Session را قطع نخواهد کرد.
نواحی FirewallD:
Zone یا نواحی مجموعه قوانین از پیش ساخته شده ای برای سطوح امنیتی متعدد هستند که شما می خواهید برای یک سناریو یا موقعیت مدنظر به کار ببرید. نواحی مختلف انواع ترافیک ورودی و سرویس های شبکه متفاوتی را ازاد می گذارند و در عین حال هر چیز دیگری را رد می کنند. بعد از فعال کردن FirewallD برای اولین بار، Public ناحیه پیش فرض شما خواهد بود. نواحی را می توان بر روی رابط های شبکه مختلف نیز اعمال کرد. به عنوان مثال با رابط های جداگانه برای هر دو شبکه داخلی و اینترنت می توانید DHCP را برای ناحیه داخلی مجاز کنید اما HTTP و SSH را برای نواحی خارجی مجاز نمایید.
برای دیدن نواحی پیش فرض می توانید از کد زیر کمک بگیرید:
sudo firewall-cmd --get-default-zone
برای تغییر نواحی پیش فرض از کد زیر استفاده کنید:
sudo firewall-cmd --set-default-zone=internal
برای دیدن نواحی که توسط رابط های شبکه به کار می رود از دستور زیر استفاده کنید:
sudo firewall-cmd --get-active-zones
نمونه خروجی:
public interfaces: eth0
برای دریافت همه پیکربندی های موجود برای نواحی خاص از دستور زیر استفاده کنید:
sudo firewall-cmd --zone=public --list-all
نمونه کد خروجی:
public (default, active) interfaces: ens160 sources: services: dhcpv6-client http ssh ports: 12345/tcp masquerade: no forward-ports: icmp-blocks: rich rules:
برای دریافت همه پیکربندی ها برای نواحی از دستور زیر استفاده کنید:
sudo firewall-cmd --list-all-zones
نمونه خروجی:
block interfaces: sources: services: ports: masquerade: no forward-ports: icmp-blocks: rich rules: ... work interfaces: sources: services: dhcpv6-client ipp-client ssh ports: masquerade: no forward-ports: icmp-blocks: rich rules:
کار با سرویس ها:
FirewallD می تواند ترافیک را بر اساس قوانین از پیش تعریف شده برای سرویس های خاص شبکه مجاز نماید. می توانید قوانین سفارشی خود را برای سرویس ها ایجاد کنید و آن ها را به هر ناحیه ای اضافه نمایید. فایل پیکربندی برای سرویس های پشتیبانی شده پیش فرض در مسیر/usr/lib/firewalld/services و فایل سرویس های ایجاد شده توسط کاربر در مسیر /etc/firewalld/services خواهد بود. برای دیدن سرویس های پیش فرض می توانید از دستور زیر استفاده کنید:
sudo firewall-cmd --get-services
به عنوان مثال برای فعال یا غیر فعال کردن سرویس HTTP می توان از دستور زیر استفاده کرد:
sudo firewall-cmd --zone=public --add-service=http --permanent sudo firewall-cmd --zone=public --remove-service=http --permanent
مجاز کردن یا رد نمودن پروتکل/ پورت خاص:
به عنوان مثال می توان به کمک کد زیر ترافیک TCP بر روی پورت 12345 را غیر فعال کرد یا مجاز نمود:
sudo firewall-cmd --zone=public --add-port=12345/tcp --permanent sudo firewall-cmd --zone=public --remove-port=12345/tcp --permanent
پورت فورواردینگ:
نمونه قانون زیر ترافیک را از پورت 80 به پورت 12345 بر روی همان سرور فوروارد می کند:
sudo firewall-cmd --zone="public" --add-forward-port=port=80:proto=tcp:toport=12345
برای فوروارد کردن یک پورت به سرور مختلف می توانید از مراحل زیر کمک بگیرید:
masquerade را در ناحیه مدنظر به کمک دستور زیر فعال کنید:
sudo firewall-cmd --zone=public --add-masquerade
قانون فوروارد را اضافه کنید. این نمونه ترافیک را از پورت 80 لوکال به پورت 8080 بر روی ریموت سرور با آدرس123.456.78.9 فوروارد می کند:
sudo firewall-cmd --zone="public" --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=123.456.78.9
برای حذف این قوانین به جای –add می توانید –remove را اضافه کنید. مثلا:
sudo firewall-cmd --zone=public --remove-masquerade
چگونه نواحی سفارشی خود را ایجاد کنیم؟
با اینکه نواحی از پیش تعریف شده برای بیشتر کاربران کافیست اما شما می توانید نواحی مدنظر خود را تعریف و ایجاد کنید. به عنوان مثال ممکن است بخواهید برای وب سرور خود یک ناحیه ایجاد کنید. ممکن است بخواهید ناحیه دیگری برای سرویس DNS خود ایجاد کنید. این ناحیه را privateDNS می نامیم. زمانی که می خواهی ناحیه خود را اضافه کنید باید آن را به پیکربندی دائمی فایروال اضافه نمایید. شما می توانید آن را بعدا بارگذاری کنید. به عنوان مثال می توانیم دو ناحیه برای مواردی که در بالا ذکر کردیم ایجاد نماییم. به کدهای زیر دقت کنید:
sudo firewall-cmd --permanent --new-zone=publicweb sudo firewall-cmd --permanent --new-zone=privateDNS
شما می توانید به کمک دستور زیر تایید کنید که این ها در فایل پیکربندی دائمی تان حضور دارند:
sudo firewall-cmd --permanent --get-zones
خروجی:
block dmz drop external home internal privateDNS public publicweb trusted work
همانطور که قبلا نیز ذکر کردیم این موارد در instance های فعلی فایروال فعلا در دسترس نخواهند بود:
firewall-cmd --get-zones
خروجی:
block dmz drop external home internal public trusted work
فایروال را مجددا بارگذاری کنید تا این نواحی را وارد پیکربندی فعال نمایید:
sudo firewall-cmd --reload firewall-cmd --get-zones
خروجی:
block dmz drop external home internal privateDNS public publicweb trusted work
حالا می توانید سرویس ها و پورت های مناسب را به نواحی خود اختصاص دهید. بهتر است instance های فعال را تنظیم کنید و سپس این تغییرات را بعد از تست به پیکربندی دائمی انتقال دهید. به عنوان مثال برای ناحیه publicweb می توانید سرویس های زیر را اضافه کنید:
sudo firewall-cmd --zone=publicweb --add-service=ssh sudo firewall-cmd --zone=publicweb --add-service=http sudo firewall-cmd --zone=publicweb --add-service=https sudo firewall-cmd --zone=publicweb --list-all
خروجی:
publicweb target: default icmp-block-inversion: no interfaces: sources: services: ssh http https ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
در غیر اینصورت می توانید سرویس DNS را به ناحیه privateDNS اضافه کنید:
sudo firewall-cmd --zone=privateDNS --add-service=dns sudo firewall-cmd --zone=privateDNS --list-all
خروجی:
privateDNS interfaces: sources: services: dns ports: masquerade: no forward-ports: icmp-blocks: rich rules:
سپس می توانیم رابط های خود را تغییر دهیم و این نواحی را تست نماییم:
sudo firewall-cmd --zone=publicweb --change-interface=eth0 sudo firewall-cmd --zone=privateDNS --change-interface=eth1
در این مرحله می توانید پیکربندی های خود را تست کنید. اگر این مقادیر برایتان مفید و کارساز بود، می توانید همین قوانین را به پیکربندی دائمی اضافه کنید. با اعمال مجدد قوانین با –permanent می توانید اینکار را انجام دهید:
sudo firewall-cmd --zone=publicweb --permanent --add-service=ssh sudo firewall-cmd --zone=publicweb --permanent --add-service=http sudo firewall-cmd --zone=publicweb --permanent --add-service=https sudo firewall-cmd --zone=privateDNS --permanent --add-service=dns
بعد از اعمال دائم این قوانین باید شبکه را ریستارت کنید و سرویس های فایروال را مجددا بارگذاری نمایید:
sudo systemctl restart network sudo systemctl reload firewalld
تایید کنید که نواحی درستی را اختصاص داده اید:
firewall-cmd --get-active-zones
خروجی:
privateDNS interfaces: eth1 publicweb interfaces: eth0
حالا باید تایید کنید که سرویس های درستی برای هر دو ناحیه در دسترس است:
sudo firewall-cmd --zone=publicweb --list-services
خروجی:
http https ssh
sudo firewall-cmd --zone=privateDNS --list-services
خروجی:
dns
خوب حالا شما موفق شدید ناحیه خاص خود را ایجاد کنید.