FirewallD یک راه برای کانفیگ رولهای دینامیک فایروال فرآهم می کند، که به صورت آنی و بدون نیاز به restart فایروال اعمال می شود، و همچنین از D_BUS و مفهوم zone پشتیبانی می کند که باعث تسهیل در کانفیگ می شود. Firewalld جایگزین مکانیزم قدیمی فایروال فدورا (فدورا 18) می باشد، RHEL/CentOS 7 و توزیع های جدید از این مکانیزم جدید پشتیبانی می کنند. یکی از بزرگترین دلایل معرفی سیستم جدید فایروال، نیاز فایروال قدیمی برای restart در هر تغییر می باشد، که باعث قطع تمامی ارتباطات فعال می باشد. همان طور که در بالا گفته شد، firewalld جدید از zone های دینامیک پشتیبانی می کند که در کانفیگ مجموعه ای متفاوت از zone ها و رولها برای شبکه خانه یا محل کارتان به روش گرافیکی یا کامند لاینی بسیار مفید می باشد.
در ابتدا، کانفیگ firewalld مشکل به نظر می رسد، اما ترکیب سرویس ها و zone ها آن را آسان می کنند که هر دو در این مقاله بحث می شود.
در مقاله قبلی، نحوه کار با firewalld و zone های آن را بحث کردیم، در این مقاله چند رول مفید firewalld را برای کانفیگ سیستم لینوکسی با استفاده از کامند لاین بررسی خواهیم کرد.
همچنین توصیه میشود مقالات زیر را مطالعه کنید :
تنظیمات FirewallD در لینوکس RHEL/CentOS 7 و Fedora 21
نحوه اضافه کردن یک Service یا Port به FirewallD
ترفندها و دستورات iptables
آموزش تنظیمات فایروال لینوکس (iptable)
تمام مثال ها در این مقاله بر روی CentOS 7 به صورت عملی تست شده اند و بر روی توزیع های RHEL و فدورا هم کار می کند.
قبل از اجرای رول های firewalld، ابتدا مطمئن شوید که آیا سرویس firewalld فعال و در حال اجرا باشد.
عکس بالا نشان می دهد که firewalld فعال و در حال اجرا ست. اکنون زمان آن است که تمام zone ها و سرویس های فعال را چک کنیم.
اگر با کامند لاین آشنا نیستید، می توانید از GUI برای مدیریت firewalld استفاده کنید، برای این منظور باید پکیج GUI بر روی سیستم نصب باشد، اگر نصب نیست از کامند زیر استفاده کنید.
همان طور که در بالا گفته شد، این مقاله برای دوستداران کامند لاین نوشته شده است و تمام مثال ها به صورت کامند لاین نوشته می شوند نه به صورت GUI ... با عرض پوزش..
قبل از هر کاری، ابتدا مطمین شوید که روی کدام public zone قرار است فایروال لینوکس را کانفیگ کنید و تمام سرویس های فعال، پورت ها، رولها برای public zone را با کامند زیر لیست کنید.
در عکس بالا، هیچ رول فعالی هنوز اضافه نشده است، در ادامه مقاله به نحوه حذف ، اضافه و تغییر رولها خواهیم پرداخت .
1. حذف و اضافه کردن پورت ها در Firewalld
برای باز کردن هر پورتی برای public zone از کامند زیر استفاده کنید. به عنوان مثال، کامند زیر پورت 80 را برای public zone باز خواهد کرد.
مشابه به بالا برای حذف پورت اضافه شده، تنها از دستور firewalld به همراه آپشن --remove همانند زیر استفاده کنید.
بعد از حذف و اضافه کردن پورت های خاص، با استفاده از آپشن –list-ports مطمئن شوید که آیا پورت اضافه و یا حذف شده است.
2. حذف و اضافه کردن سرویس ها در Firewalld
به صورت پیش فرض firewalld با سرویس های از پیش تعریف شده ای همراه است، اگر شما می خواهید لیستی از سرویس های خاص را اضافه کنید، باید یک فایل جدید xml را بسازید که شامل تمام سرویس ها باشد یا با استفاده از دستورات زیر هر یک از سرویس ها را به صورت دستی حذف یا تعریف کنید.
برای مثال، دستورات زیر به شما کمک خواهد کرد تا سرویس های خاص را اضافه و با حذف کنیم همانطور که اینجا در این مثال برای ftp انجام دادیم.
3. بلاک کردن پکت های ورودی و خروجی (Panic Mode)
اگر می خواهید ارتباطات ورودی یا خروجی را بلاک کنید، باید از مد panic-on برای بلاک اینچنین درخواست هایی استفاده کنید. برای مثال، رول زیر هر ارتباط establishe شده موجود بر روی سیستم را drop میکند.
بعد از فعال کردن مد panic، هر دامین را که می خواهید ping کنید (برای مثال google.com ) و با استفاده از آپشن –query-panic چک کنید که آیا مد panic، در وضعیت on هست یا نه.
در شکل بالا می بینیم که query جواب panic Unknown host google.com را برمیگرداند. حالا مد panic را غیر فعال کنید و دوباره عمل ping را انجام داده و چک کنید.
حالا یک درخواست ping به google.com می فرستیم.
4. Masquerade کردن IP Address
Masquerade به نام NATیا(Network Address Translation ) هم شناخته می شود، که اساسا یک روش ساده است که به یک کامپیوتر اجازه می دهد تا به اینترنت متصل شود، و در واقع به نوعی کارش وساطت است.
حالا خواهیم دید که چگونه یک پورت را به بیرون از شبکه فوروارد کنیم. برای مثال، اگر من بخواهم از هر جایی به ماشین مجازی ام در خانه ssh کنم، باید پورت 22 ssh ام را به یک پورت متفاوتی فوروارد کنم (به طور مثال 2222 ).
قبل از انجام پورت فورواردینگ، ابتدا مطمئن شوید که آیا masquerade برای external zone فعال است یا نه، چون می خواهیم به کامپیوتر از بیرون شبکه دسترسی پیدا کنیم.
اگر فعال نیست، می توانید با کامند زیر فعال کنید.
اکنون تمام ارتباطات به پورت 22 ssh را به پورت 2222 و ip 192.168.0.132 فوروارد می کنیم.
5. چگونه ICMP را بلاک و فعال کنیم
اول، نوع icmp را که داریم استفاده می کنید را با دستور زیر چک کنید.
با دستور زیر می توانید icmp block را به هر zone ای اضافه کنید. در این مثال من icmp block را روی external zone اضافه خواهم کرد، قبل از بلاک کردن، یک icmp پینگ برای چک وضعیت icmp block انجام می دهیم.
اگر شما جواب no گرفتید، به این معنی است که هیچ icmp block ای اعمال نشده است، پس باید icmp block را فعال کنیم.
6. اضافه و حذف Chain با استفاده از Direct اینترفیس
برای اضافه کردن یک رول اینترفیس direct، می توانیم از آپشن –direct در هر chain ی (Public, Work, Internal, External ) استفاده کنیم در این مثال ما یک رول در public zone اضافه خواهیم کرد.
قبل از اضافه کردن هر رولی، اول تمام رولهای موجود در public zone را با استفاده از آپشن –get-rules لیست کنید.
برای اضافه کردن رول از آپشن –add-rules استفاده کنید.
برای حذف رول ها به جای –add-rules از –remove-rule استفاده کنید.
7. رول های Firewalld Lockdown
با هر برنامه لوکال که مجوز روت داشته باشد، می توانیم رولهای firewalld را تغییر دهیم. برای جلوگیری از تغییرات بر روی رولهای firewalld، باید بر روی فایل firewalld.conf، یک lock-down قرار دهیم. این باعث می شود که firewalld از تغییرات نا خواسته توسط برنامه ها در امان باشد.
no را به yes تغییر دهید.
برای این که تغییر بالا دائمی شود از آپشن –reload استفاده کنید.
بعد از اعمال تغییرات بالا، از lockdown بودن firewalld اطمینان حاصل کنید.
برای On/Off کردن مد lockdown ازهر دو کامند زیر استفاده کنید.
8. فعال کردن Fail2ban-Firewalld
برای فعال کردن fail2ban در firewalld، باید پکیج fail2ban-firewalld را نصب کنیم و مخزن epel را در سیستم RHEL/CentOS فعال کنیم. Fail2ban چندین رول امنیتی اضافی برای SSH, SSH-DDOS, MariaDB, Apache فرآهم می کند.
بعد از فعال کردن epel، پکیج fail2ban-firewalld را با کامند زیر نصب کنید.
بعد از نصب پکیج، سرویس fail2ban را استارت و فعال کنید.
9. اضافه و بلاک کردن آدرس های IP
برای اضافه کردن ادرس ip خاص (192.168.0.254) به public zone قابل اعتماد از کامند زیر استفاده کنید.
بعد از اضافه کردن رول بالا، تمام رولهای public zone قابل اعتماد را لیست کنید.
برای حذف هر رولی عبارت –add-rich-rule را با –remove-rich-rule جایگزین کنید.
برای reject یا drop کردن یک آدرس ip از zone های قابل اعتماد، عبارت accept را با reject جایگزین کنید.
همچنین توصیه میشود مقالات زیر را مطالعه کنید :
نحوه بستن/مسدود کردن ping در فایروال لینوکس
نحوه ی نصب و راه اندازی فایروال CSF در RHEL/CentOs و Fedora
آموزش نصب و کانفیگ pfsense 2.3.2 firewall/router
نتیجه گیری :
ما در اینجا با نحوه کانفیگ چند رول و سرویس های پیش فرض در firewalld آشنا شدیم. اگر سوالی داشتید، در همین پست مطرح کنید.
در ابتدا، کانفیگ firewalld مشکل به نظر می رسد، اما ترکیب سرویس ها و zone ها آن را آسان می کنند که هر دو در این مقاله بحث می شود.
در مقاله قبلی، نحوه کار با firewalld و zone های آن را بحث کردیم، در این مقاله چند رول مفید firewalld را برای کانفیگ سیستم لینوکسی با استفاده از کامند لاین بررسی خواهیم کرد.
همچنین توصیه میشود مقالات زیر را مطالعه کنید :
تنظیمات FirewallD در لینوکس RHEL/CentOS 7 و Fedora 21
نحوه اضافه کردن یک Service یا Port به FirewallD
ترفندها و دستورات iptables
آموزش تنظیمات فایروال لینوکس (iptable)
تمام مثال ها در این مقاله بر روی CentOS 7 به صورت عملی تست شده اند و بر روی توزیع های RHEL و فدورا هم کار می کند.
قبل از اجرای رول های firewalld، ابتدا مطمئن شوید که آیا سرویس firewalld فعال و در حال اجرا باشد.
کد:
# systemctl status firewalld
عکس بالا نشان می دهد که firewalld فعال و در حال اجرا ست. اکنون زمان آن است که تمام zone ها و سرویس های فعال را چک کنیم.
کد:
# firewall-cmd --get-active-zones # firewall-cmd --get-services
اگر با کامند لاین آشنا نیستید، می توانید از GUI برای مدیریت firewalld استفاده کنید، برای این منظور باید پکیج GUI بر روی سیستم نصب باشد، اگر نصب نیست از کامند زیر استفاده کنید.
کد:
# yum install firewalld firewall-config
قبل از هر کاری، ابتدا مطمین شوید که روی کدام public zone قرار است فایروال لینوکس را کانفیگ کنید و تمام سرویس های فعال، پورت ها، رولها برای public zone را با کامند زیر لیست کنید.
کد:
# firewall-cmd --zone=public --list-all
در عکس بالا، هیچ رول فعالی هنوز اضافه نشده است، در ادامه مقاله به نحوه حذف ، اضافه و تغییر رولها خواهیم پرداخت .
1. حذف و اضافه کردن پورت ها در Firewalld
برای باز کردن هر پورتی برای public zone از کامند زیر استفاده کنید. به عنوان مثال، کامند زیر پورت 80 را برای public zone باز خواهد کرد.
کد:
# firewall-cmd --permanent --zone=public --add-port=80/tcp
کد:
# firewall-cmd --zone=public --remove-port=80/tcp
کد:
# firewall-cmd --zone=public --list-ports
2. حذف و اضافه کردن سرویس ها در Firewalld
به صورت پیش فرض firewalld با سرویس های از پیش تعریف شده ای همراه است، اگر شما می خواهید لیستی از سرویس های خاص را اضافه کنید، باید یک فایل جدید xml را بسازید که شامل تمام سرویس ها باشد یا با استفاده از دستورات زیر هر یک از سرویس ها را به صورت دستی حذف یا تعریف کنید.
برای مثال، دستورات زیر به شما کمک خواهد کرد تا سرویس های خاص را اضافه و با حذف کنیم همانطور که اینجا در این مثال برای ftp انجام دادیم.
کد:
# firewall-cmd --zone=public --add-service=ftp # firewall-cmd --zone=public --remove-service=ftp # firewall-cmd --zone=public --list-services
3. بلاک کردن پکت های ورودی و خروجی (Panic Mode)
اگر می خواهید ارتباطات ورودی یا خروجی را بلاک کنید، باید از مد panic-on برای بلاک اینچنین درخواست هایی استفاده کنید. برای مثال، رول زیر هر ارتباط establishe شده موجود بر روی سیستم را drop میکند.
کد:
# firewall-cmd --panic-on
کد:
# ping google.com -c 1 # firewall-cmd --query-panic
در شکل بالا می بینیم که query جواب panic Unknown host google.com را برمیگرداند. حالا مد panic را غیر فعال کنید و دوباره عمل ping را انجام داده و چک کنید.
کد:
# firewall-cmd --query-panic # firewall-cmd --panic-off # ping google.com -c 1
حالا یک درخواست ping به google.com می فرستیم.
4. Masquerade کردن IP Address
Masquerade به نام NATیا(Network Address Translation ) هم شناخته می شود، که اساسا یک روش ساده است که به یک کامپیوتر اجازه می دهد تا به اینترنت متصل شود، و در واقع به نوعی کارش وساطت است.
حالا خواهیم دید که چگونه یک پورت را به بیرون از شبکه فوروارد کنیم. برای مثال، اگر من بخواهم از هر جایی به ماشین مجازی ام در خانه ssh کنم، باید پورت 22 ssh ام را به یک پورت متفاوتی فوروارد کنم (به طور مثال 2222 ).
قبل از انجام پورت فورواردینگ، ابتدا مطمئن شوید که آیا masquerade برای external zone فعال است یا نه، چون می خواهیم به کامپیوتر از بیرون شبکه دسترسی پیدا کنیم.
کد:
# firewall-cmd --zone=external --query-masquerade
کد:
# firewall-cmd --zone=external --add-masquerade
کد:
# firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toport=2222:toaddr=192.168.0.132 # firewall-cmd --zone=external --list-all
5. چگونه ICMP را بلاک و فعال کنیم
اول، نوع icmp را که داریم استفاده می کنید را با دستور زیر چک کنید.
کد:
# firewall-cmd --get-icmptypes
کد:
# firewall-cmd --zone=public --query-icmp-block=echo-reply
کد:
# firewall-cmd --zone=public --add-icmp-block=echo-reply
6. اضافه و حذف Chain با استفاده از Direct اینترفیس
برای اضافه کردن یک رول اینترفیس direct، می توانیم از آپشن –direct در هر chain ی (Public, Work, Internal, External ) استفاده کنیم در این مثال ما یک رول در public zone اضافه خواهیم کرد.
قبل از اضافه کردن هر رولی، اول تمام رولهای موجود در public zone را با استفاده از آپشن –get-rules لیست کنید.
کد:
# irewall-cmd --direct --get-rules ipv4 filter IN_public_allow
کد:
# firewall-cmd --direct --add-rule ipv4 filter IN_public_allow 0 -m tcp -p tcp --dport 25 -j ACCEPT
کد:
# firewall-cmd --direct --remove-rule ipv4 filter IN_public_allow 0 -m tcp -p tcp --dport 25 -j ACCEPT
7. رول های Firewalld Lockdown
با هر برنامه لوکال که مجوز روت داشته باشد، می توانیم رولهای firewalld را تغییر دهیم. برای جلوگیری از تغییرات بر روی رولهای firewalld، باید بر روی فایل firewalld.conf، یک lock-down قرار دهیم. این باعث می شود که firewalld از تغییرات نا خواسته توسط برنامه ها در امان باشد.
کد:
# vim /etc/firewalld/firewalld.conf
کد:
Lockdown=yes
برای این که تغییر بالا دائمی شود از آپشن –reload استفاده کنید.
کد:
# firewall-cmd --reload
کد:
# firewall-cmd --query-lockdown
کد:
# firewall-cmd --lockdown-on # firewall-cmd --lockdown-off
8. فعال کردن Fail2ban-Firewalld
برای فعال کردن fail2ban در firewalld، باید پکیج fail2ban-firewalld را نصب کنیم و مخزن epel را در سیستم RHEL/CentOS فعال کنیم. Fail2ban چندین رول امنیتی اضافی برای SSH, SSH-DDOS, MariaDB, Apache فرآهم می کند.
بعد از فعال کردن epel، پکیج fail2ban-firewalld را با کامند زیر نصب کنید.
کد:
# yum install fail2ban-firewalld -y
بعد از نصب پکیج، سرویس fail2ban را استارت و فعال کنید.
کد:
# systemctl start fail2ban # systemctl enable fail2ban
9. اضافه و بلاک کردن آدرس های IP
برای اضافه کردن ادرس ip خاص (192.168.0.254) به public zone قابل اعتماد از کامند زیر استفاده کنید.
کد:
# firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.0.254" accept'
کد:
# firewall-cmd --zone=public --list-all
کد:
# firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source address="192.168.0.254" accept'
برای reject یا drop کردن یک آدرس ip از zone های قابل اعتماد، عبارت accept را با reject جایگزین کنید.
کد:
# firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.0.250" reject' # firewall-cmd --zone=public --list-all
همچنین توصیه میشود مقالات زیر را مطالعه کنید :
نحوه بستن/مسدود کردن ping در فایروال لینوکس
نحوه ی نصب و راه اندازی فایروال CSF در RHEL/CentOs و Fedora
آموزش نصب و کانفیگ pfsense 2.3.2 firewall/router
نتیجه گیری :
ما در اینجا با نحوه کانفیگ چند رول و سرویس های پیش فرض در firewalld آشنا شدیم. اگر سوالی داشتید، در همین پست مطرح کنید.