مقدمه:

در این مقاله شما با مقدماتی در مورد فایروال PF  آشنا می شوید.

 

بخش های این مقاله:

۱- فعال سازی برنامه PF

۲-مختصری در مورد فایل های پیکربندی

۳-کنترل کردن برنامه با فرمان pfctl

۴-آشنا شدن با مفهوم لیست

 

منابع:

www.OpenBSD.com


۱- فعال سازی برنامه PF

برنامه PF به صورت پیش فرض فعال است برای غیرفعال کردن آن باید خط  pf=NO را به فایل  /etc/rc.conf.local اضافه کنید و سیستم را دوباره راه اندازی کنید تا این خط تاثیر خودش رو برروی سیستم اعمال کند. شما همچین می توانید به صورت دستی PF را راه اندازی کنید. برای این منطور باید از برنامه pfctl استفاده کنید. لازم به ذکر است که با این فرمان شما توان غیرفعال کردن این برنامه را دارید که این امر در زیر نمایش داده شده:

# pfctl  -e

# pfctl  -d

این فرمان ها به ترتیب برنامه pf را  فعال و غیرفعال می کنند. به این نکته توجه داشته باشید که با این فرمان ها فقط شما به فعال سازی و غیر فعال کردن پرداختید و برای راه اندازی کامل باید به اصطلاح ruleset بارگذاری کنید.


 

۲-مختصری در مورد فایل های پیکربندی

فایل پیکربندی برنامه pf در مسیر /etc/pf.conf قرار دارد و در زمان راه اندازی سیستم به وسیله فرمان معروف rc بارگذاری می شود. فرمت این فایل به صورت متنی بوده و توسط برنادمه pfctl تفسیر می شود تا به برنامه pf پیکربندی وارد شود.

فایل pf.conf به ۵ بخش تقسیم می شود به شرح زیر:

بخش macros: در این بخش متغییرها تعریف می شود.

بخش tables: در این بخش لیستی از آدرس های IP دخیره می شود.

بخش options: در این بخش تنظیماتی قرار می گیرد که به رفتار برنامه pf نظارت دارد.

بخش Queueing :  این بخش برای کنترل پهنای باند و اولویت در ارسال بسته به کار می رود.

بخش Filter Rules :  این بخش به شما امکان مدیریت بسته ها برای رد کردن یا عبور دادن آنها را می دهد. در این بخش شما همچنان می توانید حالات NAT  و  packet redirection. را فعال کنید.


 

۳-کنترل کردن برنامه با فرمان pfctl

بعد از راه اندازی، pf به استفاده از برنامه pfctl مدیریت می شود. در زیر مثال های در این زمینه را مشاهده می کنید:

     # pfctl -f /etc/pf.conf     Load the pf.conf file

     # pfctl -nf /etc/pf.conf    Parse the file, but don’t load it

     # pfctl -sr                 Show the current ruleset

     # pfctl -ss                 Show the current state table

     # pfctl -si                 Show filter stats and counters

     # pfctl -sa                 Show EVERYTHING it can show

خط اول، فایل pf.conf  را بارگذاری می کند. در خط دوم، فایل مربوطه را تجزیه و تحلیل می کند ولی بارگذاری نمی کند. فرمان خط سوم همه ruleset حال حاضر را نمایش می دهد. فرمان خط چهارم وضعیت table را نمایش می دهد. خط پنج وضعیت filter  و شمارنده آن را نمایش می دهد و خط پایانی همه وضعیت های موجود را نمایش می دهد.


۴-آشنا شدن با مفهوم لیست

شما با استفاده از این بخش می توانید از دوباره نویسی یک سری اطلاعات تکراری در بخش ها مربوط به rules ها جلوگیری کنید، به جای نوشتن یک رول برای هر آدرس ip می توانید این بخش را در لیست قرار دهید تا هر زمان که به آن نیاز داشتید به آن مراجعه کنید. لیست ها با براکت مشخص می شوند. زمانی که برنامه pfctl  به بخشی که در آن از list استفاده شده برای بارگذاری می رسد این برنامه برای هر بخش خودش به صورت اتوماتیک rule جداگانه ایجاد می کند. در زیر مثالی را در این زمینه مشاهده می کنید:

block out on fxp0 from { 192.168.0.1, 10.5.32.6 } to any

این خط به صورت زیر تفسیر می شود:

block out on fxp0 from 192.168.0.1 to any
block out on fxp0 from 10.5.32.6 to any

شما می توانید ار چند لیست در یک rule استفاده کنید. این امر در زیر نمایش داده شده:

match in on fxp0 proto tcp to port { 22 80 } rdr-to 192.168.0.6
block out on fxp0 proto { tcp udp } from { 192.168.0.1, \
۱۰٫۵٫۳۲٫۶ } to any port { ssh telnet }

البته لیست ها می توانند تو در تو هم باشند. همانند مثال زیر:

trusted = “{ 192.168.1.2 192.168.5.36 }”
pass in inet proto tcp from { 10.10.0.0/24 $trusted } to port 22

شما در لیست می توانید از حالت نفی هم استفاده کنید. این امر در مثال زیر نمایش داده شده:

pass in on fxp0 from { 10.0.0.0/8, !10.1.2.3 }

فرمان بالا با استفاده از لیست می تواند به صورت زیر تفسیر شود:

pass in on fxp0 from 10.0.0.0/8
pass in on fxp0 from !10.1.2.3

این فرمان یعنی همه آدرس های ای پی شبکه ۱۰٫۰٫۰٫۰/۸ را رد کن به جز ۱۰٫۱٫۲٫۳٫