اطلاعیه

بستن
هنوز اطلاعیه ای در دست نیست.

تنظیمات فایروال (یا FirewallD) در لینوکس RHEL/CentOS 7 و Fedora 21

بستن
X
 
  • فیلتر کردن
  • زمان
  • نمایش
Clear All
پست های جدید

    تنظیمات فایروال (یا FirewallD) در لینوکس RHEL/CentOS 7 و Fedora 21

    همانطور که همه ما میدانیم net-filter یک فایروال در لینوکس است. FirewallD یک سرویس داینامیک برای مدیریت فایروال می باشد و از zone های شبکه پشتیبانی میکند. در ورژن قبل، RedHat/CentOS 6 ما از iptables به عنوان یک سرویس برای فیلتر کردن packet ها مورد استفاده قرار میدادیم. در سیستم عامل های RHEL/CentOS 7 و Fedora 21 اینترفیس iptables با firewalld جایگزین شده است.

    تنظیمات فایروال در centos 7



    از آنجایی که ممکن است در آینده iptables از رده خارج شود، پیشنهاد میشود که کار با firewalld را به جای iptables شروع کنید. به هر حال iptables همچنان پشتیبانی میشود و میتوان با استفاده از YUM آنرا نصب کرد. ما نمی توانیم که FirewallD و iptables را همزمان روی یک سیستم داشته باشیم، که ممکن است conflict رخ دهد.

    در iptables ما عادت به کانفیگ chain ها INPU, OUTPUT و FORWARD داشتیم اما اینجا در firewalld مفهوم استفاده از zone ها در میان است. به صورت پیش فرض zone های متفاوتی در firewalld موجود هستند که در این مقاله درباره آنها بحث خواهیم کرد.

    zone های اصلی public zone و private zone هستند. برای اینکه موارد مروبوط به این zone ها به درستی کار کنند نیاز داریم که اینترفیس به همراه zone مشخص شده را اضافه و سپس میتوانیم سرویس ها را نیز به firewalld اضافه کنیم.

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

    firewalld با ipv4 ،ipv6 و همچنین ethernet bridge به خوبی کار می کند، که ما می توانیم تنظیمات دائمی و یا لحظه ای مجزا را در firewalld انجام دهیم.


    و اما نحوه ی کار کردن با zone ها و ساختن service های خودمان و موارد استفاده جالب دیگر از FirewallD :


    محیط تستی ما :

    کد PHP:
    Operating System :    CentOS Linux release 7.0.1406 (Core)
    IP Address       :    192.168.1.129
    Host
    -name    :    linux-zone.org 
    فایروال لینوکس






    مرحله 1 : نصب پکیج FirewallD

    1 - پکیج firewalld به صورت پیش فرض روی RHEL/CentOS 7 و Fedora 21 نصب است. در غیر اینصورت شما میتوانید آنرا با استفاده از دستور YUM زیر نصب کنید.
    کد PHP:
    # yum install firewalld -y 
    نصب firewalld در لینوکس (centos, ubuntu)





    2 - بعد از اینکه پکیج با موفقیت نصب شد باید بررسی کنید که آیا سرویس iptables در حال اجرا هست یا خیر، و در صورتی که در حال اجرا بود شما نیاز دارید که آنرا متوقف و با استفاده از دستورات زیر آنرا mask (که دیگر استفاده نشود) کنید.
    کد PHP:
    # systemctl status iptables
    # systemctl stop iptables
    # systemctl mask iptables 


    مرحله 2 : بحث در مورد محتوای FirewallD

    3 - قبل از اینکه کانفیگ FirewallD را شروع کنید قصد داریم که درباره هر zone بحث کنیم. به صورت پیش فرض یکسری zone ها وجود دارد. ما باید اینترفیس را به zone اختصاص دهیم. یک zone تعریف میکند که آیا برای اینترفیس که با آن ارتباط برقرار میشود trusted یا denied است، همچنین یک zone میتواند شامل service ها و port ها باشد. در اینجا ما قصد داریم zone های موجود در firewalld را شرح دهیم.


    Drop Zone : اگر ما از zone drop استفاده کنیم پکت های ورودی drop میشوند. این zone همانند استفاده از iptable -j drop میباشد. اگر ما از قانون drop استفاده کنیم این به معنی این است که هیچ پاسخی نخواهیم داشت و تنها ارتباطات خروجی شبکه در دسترس خواهند بود.

    Block Zone : از ارتباطات ورودی جدید در شبکه جلوگیری میکند و آنها را با یک icmp-host-prohibited ریجکت (reject) میکند. تنها ارتباطات stablish شده درون سرور مجاز هستند.

    Public Zone : برای قبول کردن connection های انتخاب شده ما میتوانیم rule هایی را در public zone تعریف کنیم. که تنها اجازه میدهد پورت خاصی در سرورمان باز باشد و ارتباطات دیگر drop خواهند شد.

    External Zone : این zone همانند آپشن های router عمل میکند (با masquerad فعال) ارتباطات دیگر drop خواهند شد و تایید نمیشود و تنها ارتباطات مشخص شده مجاز خواهند بود.

    DMZ Zone : اگر نیاز داشته باشیم که دسترسی به یکسری از سرویس ها را به public مجاز کنیم میتوانیم در dmz zone تعریف کنیم. این مورد هم تنها برای ارتباطات ورودی انتخاب شده قابل قبول هستند.

    Work Zone : در این zone ما میتوانیم تنها شبکه های داخلی را تعریف کنیم مانند ترافیک شبکه های private که مجاز هستند.

    Home Zone : این zone در نواحی home استفاده میشود، ما میتوانیم از این zone برای trust کردن کامپیوتر های دیگر روی شبکه استفاده کنیم. این مورد نیز تنها connection های ورودی انتخاب شده را امکان پذیر میکند.

    Internal Zone : این مورد شبیه به work zone است و برای ارتباطات ورودی انتخاب شده استفاده میشود.

    Trusted Zone : اگر ما trusted zone تعریف کنیم همه ترافیک ها accept میشود.


    حالا شما دید بهتری نسبت به zone ها دارید اکنون zone های موجود را بررسی میکنیم. zone های پیش فرض و تمامی zone های دیگر را با استفاده از دستور زیر لیست میکنیم.
    کد PHP:
    # firewall-cmd --get-zones 
    چک کردن فایروال در لینوکس




    کد PHP:
    # firewall-cmd --get-default-zone 

    کد PHP:
    # firewall-cmd --list-all-zones 

    نکته : خروجی دستور بالا در یک صفحه مجزا نمایش داده نمیشود، با توجه به اینکه همه zone ها block, dmz, drop, external, home, internal, public, trusted, و work را لیست خواهد کرد. در صورتی که zone ها rule یا سرویس های فعال و یا پورت داشته باشند به همراه اطلاعات دیگر zone این اطلاعات نیز لیست خواهند شد.



    مرحله 3 : تعریف Default Zone

    در صورتی که بخواهید default zone تان را internal, external, drop, work و یا هر zone دیگری تعریف کنید، شما میتوانید از دستور زیر برای تعریف default zone استفاده کنید. در اینجا ما زون internal رو به عنوان zone پیش فرض تعریف میکنیم.
    کد PHP:
    # firewall-cmd --set-default-zone=internal 

    5 - بعد از تعریف zone میتوانید با استفاده از دستور زیر zone پیش فرض را بررسی نمایید.
    کد PHP:
    # firewall-cmd --get-default-zone 
    فایروال لینوکس





    6 - در اینجا اینترفیس ما enp0s3 میباشد در صورتی که بخواهیم بررسی کنیم که zone ما روی چه اینترفیسی binde شده است میتوانیم از دستور زیر استفاده کنیم.
    کد PHP:
    # firewall-cmd --get-zone-of-interface=enp0s3 
    فایروال لینوکس





    7 - قابلیت جالب دیگر در فایروال "icmptype" میباشد که یکی از انواع icmp میباشد که توسط firewalld پشتیبانی میشود. برای دریافت لیستی از انواع icmp پشتیبانی شده میتوان از دستور زیر استفاده کنید.
    کد PHP:
    # firewall-cmd --get-icmptypes 


    مرحله 4 : ایجاد سرویس های خودمان در FirewallD

    8 - سرویس ها مجموعه ای از قوانین به همراه پورت ها و آپشن هایی هستند که توسط فایروال مورد استفاده قرار میگیرند. سرویس هایی که فعال شده باشند به صورت اتوماتیک هنگامی که firewalld استارت و در حال اجرا میباشد، Load میشود.به صورت پیش فرض سرویس های زیادی موجود هستند. برای دریافت لیستی از همه سرویس های موجود از دستور زیر استفاده میکنیم.
    کد PHP:
    # firewall-cmd --get-services 
    firewalld





    9 - برای دریافت لیستی از همه سرویس های موجود پیش فرض به دایرکتوری زیر رفته، در اینجا شما لیستی از سرویس ها را دریافت خواهید کرد.
    کد PHP:
    # cd /usr/lib/firewalld/services/ 
    چک کردن همه سرویس ها در فایروال لینوکس





    10 - برای ایجاد سرویس های خودتان شما نیاز دارید که آنرا در مسیر زیر تعریف کنید.
    کد PHP:
    # cd /etc/firewalld/services/ 
    برای مثال من میخواهم سرویس RTMP را روی پورت 1935 اضافه کنم. ابندا یک کپی از هر سرویسی از مسیر زیر میگیریم.
    کد PHP:
    # cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ 
    و سپس به مسیری که فایل سرویس را در آن copy کرده رفته و سپس فایل ssh.xml را به rtmp.xml همانطور که در تصویر زیر میبینیم تغییر نام میدهیم.
    کد PHP:
    # cd /etc/firewalld/services/ 
    firewall لینوکس




    ساخت سرویس در فایروال لینوکس





    11 - سپس فایل را باز کرده و Heading, Description, Protocol و شماره Port که برای استفاده از سرویس RTMP نیاز داریم (همانطور که در تصویر زیر مشاهده میکنید) تغییر میدهیم.

    فایروال linux




    12 - برای اعمال تغییرات بالا سرویس FirewallD را restart و تنظیمات را reload میکنیم.
    کد PHP:
    # firewall-cmd --reload 

    13 - برای تایید اینکه آیا سرویس اضافه شده یا خیر دستور زیر را اجرا میکنیم و تمامی سرویس های موجود را لیست میکنیم.
    کد PHP:
    # firewall-cmd --get-services 
    چک کردن سرویس ها در فایروال cnetos






    مرحله 5 : اختصاص دادن Service ها به Zone ها


    14 - در اینجا به نحوه مدیریت فایروال با استفاده از دستور firewalld-cmd میپردازیم، برای بررسی وضعیت موجود firewalld و همه zone های فعال دستور زیر را اجرا کنید.
    کد PHP:
    # firewall-cmd --state
    # firewall-cmd --get-active-zones 

    15 - زون پیش فرض برای اینترفیس enp0s3 زون public میباشد که در فایل /etc/firewalld/firewalld.conf به عنوان DefaultZone=public تعریف شده است.


    برای لیست همه سرویس های موجود در این zone پیش فرض اینترفیس دستور زیر را اجرا میکنیم.
    کد PHP:
    # firewall-cmd --get-service 


    مرحله 6 : اضافه کردن سرویس ها به zone ها

    16 - در مثال بالا ما نحوه ایجاد سرویس های خودمان به واسطه ایجاد سرویس RTMP را مشاهده کردیم، در اینجا ما نحوه اضافه کردن سرویس RTMP به zone را نیز آموزش خواهیم داد.
    کد PHP:
    # firewall-cmd --add-service=rtmp 

    17 - برای حذف سرویس اضافه شده به zone از دستور زیر استفاده میکنیم.
    کد PHP:
    # firewall-cmd --zone=public --remove-service=rtmp 

    مرحله بالا به صورت موقتی میباشد. برای دائمی کردن آن ما نیاز داریم که دستور زیر را با آپشن --permanent اجرا کنیم.
    کد PHP:
    # firewall-cmd --add-service=rtmp --permanent
    # firewall-cmd --reload 

    18 - رول ها یا همان قوانین را برای رنج شبکه خود تعریف و دسترسی روی port ها را برای همه (هر کسی) باز کنید به طور مثال اگر بخواهید که رنج شبکه 192.168.0.0/24 و پورت 1935 را باز کنید دستورات زیر را اجرا کنید.
    کد PHP:
    # firewall-cmd --permanent --add-source=192.168.0.0/24
    # firewall-cmd --permanent --add-port=1935/tcp 
    مطمئن شوید که سرویس firewalld را بعد از اضافه یا حذف هر سرویس یا پورتی reload کنید.
    کد PHP:
    # firewall-cmd --reload
    # firewall-cmd --list-all 
    دسترسی دادن یک پورت در فایروال لینوکس





    همچنین توصیه میشود مطالعه کنید.

    نحوه اضافه کردن یک سرویس یا پورت و یا یک رنج از پورت ها به FirewallD در CentOS 7



    مرحله 7 : اضافه کردن Rich Rules برای رنج شبکه

    19 - اگر بخواهیم سرویس هایی مانند http, https, vnc-server, postgreSQL را مجاز کنید از rule های زیر استفاده میکنیم ابتدا rule را اضافه و آنرا Permanent میکنیم و rule ها را reload و همچنین status را بررسی میکنیم.
    کد PHP:
    # firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="http" accept'
    # firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="http" accept' --permanent
    # firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="https" accept'
    # firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="https" accept' --permanent
    # firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="vnc-server" accept'
    # firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="vnc-server" accept' --permanent
    # firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="postgresql" accept'
    # firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="postgresql" accept' --permanent 

    اکنون رنج شبکه 192.168.0.0/24 میتواند سرویس ها بالا را در سرور شما استفاده کنید. آپشن --permanent میتواند در هر rule ی که تعریف میکنیم مورد استفاده قرار گیرد و به عنوان آپشنی برای دسترسی client به سرور اعمال شود.


    20 - بعد از اضافه کردن rule های بالا فراموش نکنید که rule های فایروال را reload کنید و rule ها را با استفاده از دستورات زیر لیست کنید.
    کد PHP:
    # firewall-cmd --reload
    # firewall-cmd --list-all 
    list active rules in firewalld





    برای کسب اطلاعات بیشتر در مورد FirewallD از دستور man استفاده کنید :
    کد PHP:
    # man firewalld 

    ما در این مقاله نحوه تنظیم net-filter با استفاده از FirewallD در RHEL/CentOS 7 و Fedora 21 را بررسی کردیم.


    همچنین توصیه میشود مقالات زیر را مطالعه کنید :

    دستورات مفید Firewalld برای تنظیم و مدیریت فایروال در لینوکس

    ترفندها و دستورات iptables

    آموزش تنظیمات فایروال لینوکس (iptable)

    نحوه بستن/مسدود کردن ping در فایروال لینوکس

    نحوه ی نصب و راه اندازی فایروال CSF در RHEL/CentOs و Fedora

    آموزش نصب و کانفیگ pfsense 2.3.2 firewall/router


    نتیجه

    net-filter فریم ورکی برای فایروال و هر توزیع لینوکسی میباشد. در گذشته در هر نسخه ای از RHEL و CentOS ما از iptables استفاده میکردیم اما از ورژن 7 به بعد firewalld معرفی شده، که درک و استفاده از آن آسانتر است. امیدوارم که از این پست لذت برده باشید.
    فایل های پیوست شده
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 02-07-2021, 10:27 AM.

درباره انجمن منطقه لینوکسی ها

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

شبکه های اجتماعی
در حال انجام ...
X