سنت او اسسیستم عامل لینوکسمقالات وب

معرفی 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

 

خوب حالا شما موفق شدید ناحیه خاص خود را ایجاد کنید.

Rate this post
برچسب ها

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

بستن