هاست لینوکس پرسرعت سی پنل

آموزش پیکربندی فایروال FirewallD روی CentOS 7

ما یک دورۀ آموزشی کانفیگ سرور لینوکس را شروع کردیم و الان قسمت ۹۱ ام هستیم و از قسمت ۸۶ تا اینجا روی دیوار آتش تمرکز کردیم. با اینکه سیستم عامل هدف ما در این دورۀ آموزشی CentOS 6 می باشد. اما تا حدی که در توان داریم روی CentOS 7 هم آموزش هایی را خدمت شما خواهیم داد. از جملۀ این آموزش‌ها فایروال FirewallD روی CentOS 7 است که یک دیوار آتش کامل با رابط کاربری firewall-cmd است که در این قسمت به نحوۀ کانفیگ یا پیکربندی فایروال FirewallD روی CentOS 7 می‌پردازیم.

آموزش پیکربندی فایروال FirewallD روی CentOS 7

آموزش پیکربندی فایروال FirewallD روی CentOS 7

 

در این مقالۀ آموزشی ما با بیشتر کاربردهای دستور firewall-cmd برای کانفیگ firewalld آشنا می شویم. اما قبل از شروع بد نیست دوباره خدمت شما یادآور شوم که مجموعه آموزشی ها به صورت سلسله وار هستند. پس حتماً نیاز است که آموزش های قبلی را مطالعه کرده باشید. مخصوصاً قسمت قبلی (۹۰) که مقدماتی راجع به FirewallD در آنجا گفته شده. الان باید بدانید Zone یا ناحیه ها چه هستند و چرا ما از دستور firewall-cmd استفاده می کنیم.

روشن کردن firewalld

در اولین گام ما باید firewalld را روشن کنیم. چون به صورت پیش فرض روشن نیست.

systemctl start firewalld.service

حالا برای اینکه مطمئن شوید که دیوار آتش firewalld روشن است و کارش را با پیکربندی های پیشفرض به درستی انجام می دهد، دستور زیر را می زنیم. running باید نتیجۀ دستور باشد.

firewall-cmd --state

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

آشنایی با وضعیت فعلی firewalld

قبل از شروع کانفیگ اصلی، بهتر است از وضعیت فعلی فایروال مطلع شویم. بدین منظور کارهای زیر را انجام می‌دهیم.

اول می بینیم که ناحیه پیش‌فرض دیوار آتش چیست:

firewall-cmd --get-default-zone

به احتمال زیاد public خواهد بود. به دلیل اینکه تا اینجا ما تغییراتی در ناحیه ها ایجاد نکردیم و ناحیه ای را به رابط شبکه (interface) مرتبط نکردیم، همین الان باید ناحیه فعال روی سرور ما همان ناحیۀ پیش فرض یعنی public باشد. دستور زیر همین موضوع را تصدیق می‌کند.

firewall-cmd --get-active-zones

نتیجه:

public
interfaces: eth0 eth1

اینجا ما فهمیدم که دو تا رابط یا همان سخت افزار شبکه داریم که با دیوار آتش کنترل می شوند (eth0 و eth1). هر دوی این‌ها هم با قواعد موجود در ناحیه public کنترل می‌شوند.

برای اینکه به طور کلی بدانیم قواعد ناحیه فعال یا همان public چطوریاست، دستور زیر می تواند به ما کمک کند.

firewall-cmd --list-all

نتیجه:

public (default, active)
interfaces: eth0 eth1
sources:
services: dhcpv6-client ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

با این نتیجه می توانیم بفهمیم که ناحیه پیش فرض و فعال ما در حال حاضر public می‌باشد و رابط های شبکۀ eth0 و eth1 در ارتباط با این ناحیه هستند. از طرف دیگر سرویس های dhcp و ssh که هر کدام کارهایی را برای سرور ما انجام می‌دهند، درون فایروال باز هستند.

برای اینکه بتوانیم فهرست کل ناحیه های موجود روی فایروال را بررسی کنیم، دستور زیر به ما کمک می کند.

firewall-cmd --get-zones

درون یک خط تمامیِ Zoneها نمایش داده می شوند.

block dmz drop external home internal public trusted work

هر زمان که از دستور firewall-cmd استفاده می کنیم، می توانیم با مشخۀ zone– مشخص کنیم که کاری که می خواهیم بکنیم، روی همان ناحیه مد نظر است. دستور زیر فهرست مشخصات ناحیۀ home را نشان می دهد. با اینکه در حال حاضر شاید یک ناحیه دیگر فعال باشد که همین طور هم هست.

firewall-cmd --zone=home --list-all
home
interfaces:
sources:
services: dhcpv6-client ipp-client mdns samba-client ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

حتی می توانید مشخصات کل ناحیه ها را یکجا مطالعه کنید.

firewall-cmd --list-all-zones | less

اختصاص ناحیه (Zone) به کارت شبکه (interface)

زمانی که هر کارت رابط شبکه‌ای بالا می آید، اگر شما برای آن ناحیه ای را تنظیم نکرده باشید، ناحیۀ پیش فرض یا همان Default Zone روی آن اعمال می گردد. هر ناحیه هم قواعدی دارد که بسته های ورودی و خروجیِ آن رابط شبکه توسط آنها پردازش می شوند. پس این امر مهم است که ما با تنظیم ناحیه های مناسب روی کارت های شبکه (اگر از یکی بیشتر باشند) امنیت سیستم خود را تضمین نماییم.

حالا می خواهیم یک ناحیه را به یک رابط شبکه، مرتبط کنیم. این کار به صورت موقتی و دائمی انجام شدنی است. اول به روش موقتی اشاره می کنیم. دستور زیر با مشخصۀ change-interface رابط یک ناحیه را تغییر می‌دهد. اما دقت داشته باشید این تغییر موقتی است و با reload شدن یا راه اندازی مجدد سرور از بین خواهد رفت. نتیجۀ کار باید عبارت success باشد.

firewall-cmd --zone=home --change-interface=eth0

نکته مهم : در مواقعی که شما ناحیه یک کارت شبکۀ فعال را تغییر می‌دهید که مثلاً روی آن ناحیه دسترسیِ SSH فعال است، و ناحیۀ جدید چنین دسترسی را ندارد، مطمئناً دسترسیِ شما به سرور از طریق درگاه SSH قطع خواهد شد. پس به سرویس هایی هر ناحیه فعال دارد، توجه داشته باشید. در ادامه راجع به این موضوع بیشتر به گفتگو خواهیم نشست.

برای اینکه مطمئن شویم کار به درستی انجام شده، دستور زیر را می زنیم.

firewall-cmd --get-active-zones

که نتیجه به این صورت خواهد شد.

Home
interfaces: eth0

Public
interfaces: eth1

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

systemctl restart firewalld.service
firewall-cmd --get-active-zones

اگر خواسته باشیم این کار را به صورت دائمی انجام دهیم، باید پروندۀ پیکربندیِ کارت شبکه را دستی ویرایش کنیم و یک خط به آن اضافه نماییم. تا در مواقع راه اندازی مجدد سیستم یا فایروال، تغییرات از بین نروند.

برای این کار به مسیر زیر بروید:

/etc/sysconfig/network-scripts

و پروندۀ تنظیمات رابط شبکه که نامی با این ساختار را دارد، با دستوری مثل nano باز کنید.

nano /etc/sysconfig/network-scripts/ifcfg-eth0

درون سند به دنبال عبارت ZONE= بگردید و آن را ویرایش کنید. که اگر نبود، در انتهای آن عبارت زیر را اضافه کنید.

ZONE=home

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

systemctl restart network.service
systemctl restart firewalld.service

بعد از اینکه با دستورات بالا سرویس شبکه و firewalld را راه اندازی مجدد کردید، حالا می بینید که ناحیۀ پیش فرض برای رابط های شبکۀ ما به درستی تنظیم شدند.

firewall-cmd --get-active-zones

نتیجه:

Home
interfaces: eth0

Public
interfaces: eth1

به تعداد رابط هایی که دارید و همچنین تنظیماتی که قصد اعمال روی آنها را دارید، می توانید مراحل بالا را تکرار نمایید. اما در هر صورت تنها یک ناحیه به صورت پیش فرض در تمامیِ شرایط وجود دارد که با دستور زیر می توانید این Zone (ناحیه) پیش‌فرض را تغییر دهید.

firewall-cmd --set-default-zone=home

الان با دستور بالا، زمانی که برای رابط شبکه ای ناحیه ای تعیین نشده باشد، home به عنوان Zone برای آن در نظر گرفته می‌شود.

تنظیم قواعد (Rules) برای برنامه های کاربردی یا سرویس‌ها

در این بخش یاد می گیرید چطور یک سرویس با برنامۀ کاربردی را مجاز کنید که از طریق دیوار آتش بتواند با دنیای بیرون خود ارتباط برقرار کند. به عبارتی دیگر وقتی می‌خواهید یک درگاه (پورتی) را باز کنید که بتوانید از آن سرویس استفاده کنید، اصطلاحاً باید آن سرویس را به فایروال اضافه نمایید. حالت های مختلفی برای انجام چنین کاری وجود دارد که در ادامه به مهم‌ترین آنها می پردازیم.

شما می توانید سرویس هایی که همینک آماده هستند تا شما از آنها استفاده کنید را ببینید. این سرویس ها لزوماً ممکن است همین الانش فعال نباشند.

firewall-cmd --get-services

نتیجه:

RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns ftp high-availability http https imaps ipp ipp-client ipsec kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind samba samba-client smtp ssh telnet tftp tftp-client transmission-client vnc-server wbem-https

هر کدام از سرویس هایی که در بالا نمایش داده شدند، برای خود در مسیر زیر یک سند دارند که حاوی مشخصات و ساختار XML مانند هستند تا firewalld بتواند آنها را تشخیص دهد. دقت داشته باشید که شما نباید دستی آنها را ویرایش کنید. یا سندی را حذف و اضافه نمایید.

/usr/lib/firewalld/services

شما با پارامتر add-service می‌توانید به ناحیه فعالِ فعلی سرویس دیگری را اضافه نمایید. یا اگر کار روی ناحیه خاصی را در نظر دارید، باید پارامتر zone را هم مورد استفاده قرار دهید. برای دائمی شدن دستور هم پارامتر permanent را فراموش نکنید. نمونۀ کامل چنین دستوری به این صورت خواهد شد:

firewall-cmd --zone=public --permanent --add-service=http

در ناحیۀ public که ناحیه پیش فرض هم هست، ما سرویس http را برای بازدید صفحات وب توسط بازدید کنندگان را فعال کردیم. اگر این کار را نکنید در حالی که وب سرور آپاچی روی سرور نصب و روشن است، کسی نمی تواند صفحۀ وبی روی سرور شما را مشاهده کند.

برای اینکه مطمئن شوید سرویس مورد نظر به ناحیۀ مدنظر افزوده شده است، پارامتر list-all یا list-services استفاده می شوند:

firewall-cmd --zone=public --list-services

نتیجه:

dhcpv6-client http ssh

به همین ترتیب اگر سرور شما روی پروتکل https هم ارائۀ خدمات می کند، بدین صورت باید عمل کنیم. دقت کنید که بهترین رویه این است که ابتدا به صورت موقتی بدون پارامتر permanent اقدام به افزودن سرویس مورد نظر به Zone کنید. اگر مشکلی ایجاد نشد، آن را دائمی کنید.

firewall-cmd --zone=public --add-service=https
firewall-cmd --zone=public --permanent --add-service=https

اگر سرویس مرتبطی وجود نداشت چه؟

در حالتی که سرویس مورد نظر برای باز کردن پورت مد نظر وجود نداشت، دو تا کار می توانید بکنید. یا اینکه شماره درگاه (پورت) را برای ناحیه مد نظر باز کنید. یا سرویس آن را به firewalld به طور کامل معرفی کنید. اول به روش اول می پردازیم که پارامتر add-port برای همین کار است.

firewall-cmd --zone=public --add-port=5000/tcp

از این روش مثلاً برای زمانی که درگاه SSH را تغییر دادیم استفاده می گردد. برای اینکه از انجام این کار مطمئن شویم، دستور زیر مورد نیاز است.

firewall-cmd --list-ports

برای این منظور حتی می توان یک محدودۀ شماره درگاه را مشخص کرد.

firewall-cmd --zone=public --add-port=4990-4999/udp

اما برای تعریف یک سرویس مثل سرویس های پیش فرض خود فایروال، باید اقدام به ساخت یک سند پیکربندی کنیم. ساده ترین کار این است که یکی از پرونده های اولیه را از مسیر /usr/lib/firewalld/services کپی کنیم و در مسیر /etc/firewalld/services جاگذاری کنیم و شروع به ویرایش آن نماییم. مثلاً ما سند XML مربوط به سرویس SSH را کپی می کنیم. اسم آن را به هر چه در نظر دارید می توانید تغییر دهید. البته تکراری هم نباید باشد.

cp /usr/lib/firewalld/services/service.xml /etc/firewalld/services/example.xml

حالا شروع به ویرایش و تعریف مشخصات آن سرویس می کنیم.

nano /etc/firewalld/services/example.xml

شما باید نام اختصاری سرویس را که درون برچسب short قرار گرفته است را ویرایش کنید. همچنین توضیحات آن را در برچسب description ویرایش نمایید. در نهایت هم برچسب port را می‌بینید که قسمت اصلی سند پیکربندی سرویس برای firewalld است. پروتکل و پورت آن را باب نیاز خود ویرایش نمایید.

<?xml version="1.0" encoding="utf-8"?>
<service>
<short>SSH</short>
<description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
<port protocol="tcp" port="22"/>
</service>

با فرض ویرایشی که روی سند مذکور انجام دادیم، نتیجه به این صورت تبدیل خواهد شد:

<?xml version="1.0" encoding="utf-8"?>
<service>
<short>Example Service</short>
<description>This is just an example service. It probably shouldn't be used on a real system.</description>
<port protocol="tcp" port="7777"/>
<port protocol="udp" port="8888"/>
</service>

سند را ذخیره و ببندید. حالا فایروال را reload نمایید.

firewall-cmd --reload

حالا در بین فهرست سرویس های موجود، سرویسی که اخیراً اضافه کردیم را می توانیم ببینیم.

firewall-cmd --get-services

عبارت example که نام سند xml مربوطه است، در بین دیگر عبارت ها که نام سرویس های موجود است یافت می گردد. حالا می توانیم با پارامتر add-service سرویس را فعال کنیم.

ساخت یک Zone یا ناحیه جدید

در حالی که ناحیه‌های پیش فرض برای استفاده کافی هستند، اما شاید ساخت یک ناحیه جدید برای هر چه بیشتر سفارشی کردن اجزاء آن مفید باشد. مثلاً شاید بخواهید یک ناحیه بسازید فقط برای سرور وب که قرار است سایت روی آن داشته باشید. پس ما در این حالت یک ناحیه با عنوان publicweb ایجاد می کنیم.

firewall-cmd --permanent --new-zone=publicweb

بعد از افزودن ناحیه جدید که باید با پارامتر permanent برای دائمی کردن آن این کار را انجام دهید، حالا مطمئن می شویم که ناحیه به درستی ساخته شده است.

firewall-cmd --permanent --get-zones

نتیجه:

block dmz drop external home internal public publicweb trusted work

حالا فایروال را راه اندازی مجدد می کنیم.

firewall-cmd --reload

پس از این، می توانید از دستوراتی که در بالا گفته شد را روی این ناحیه به مانند دیگر ناحیه های پیش فرض اعمال کنید. مثلاً سرویس هایی را به آن اضافه نمایید یا حتی سند پیکربندیِ سرویسی را بسازید. فقط فراموش نکنید که باید از پارامتر zone=publicweb استفاده کنید تا تغییرات فقط روی همین Zone اعمال گردد.

فعال کردن FirewallD برای اجرا حین شروع به کار سرور

پس از اینکه از عملکرد صحیح همۀ تنظیماتی که تا به الان انجام دادید راضی بودید، می توانید فایروال firewalld را برای همیشه فعال کنید. در طول پیکربندی هم اگر نیاز داشتید که سرور را reboot کنید، باید طبق دستور اول این آموزش سرویس فایروال را شروع (Start) کنید. الان با دستور زیر آن را فعال (Enable) می‌کنیم.

systemctl enable firewalld

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

شما از الان به بعد باید بتوانید به راحتی با firewalld کار کنید و تنظیمات و پیکربندی های لازم را روی دیوار آتش خود در CentOS 7 انجام دهید. اگر نکته ای هم مانده که باید بدانید و اطلاعات خود را افزایش دهید، از مستندات firewalld که با دستور man قابل دسترس می باشد هم غافل نشوید. آموزش های خوب و کاملی در مستندات خود سرویس ها و برنامه های کاربردی لینوکس موجود است که حتماً از آنها هم استفاده کنید. در آموزش های بعدی به سراغ رابط های ساده تر و جذاب تر کانفیگ فایروال CentOS خواهیم رفت.

دیدگاه تان را ارسال کنید.

لطفاً از درج نظرات خارج از موضوع این صفحه خودداری کنید!