دراین قسمت ابتدا به مقدمات نصب در FreeBSD میپردازیم. FreeBSD همانند گنو/لینوکس نمیباشد که یکسری پیشفرضها در کرنلش وجود داشته باشد. نه تنها کرنلش بلکه خود سیستمعامل آن نیز یک سیستمعامل لخت محسوب میشود. بدین جهت برای هر کاری باید مقدماتی را در خود سیستمعامل آماده سازی نمود.البته ناگفته نماند در این شماره کمی از مقدمات PF نیز گفته خواهد شد.
سؤالی که ممکن است پیش بیاید این است که چرا در خود OpenBSD نصب نکردیم. جواب این سؤال را بهتر است با تعریف خود community آن ارایه کنم: OpenBSD یک community حمایت کننده از پروژههایی همانند OpenSSH، LibreSSL، OpenSMTPD ، OpenBGPD، OpenIKED و mandoc میباشد. درواقع مکانی برای رشد و کمک به نرمافزار آزاد در مقیاس بزرگ میباشد.
نکته: مرحله اول یعنی به روز رسانی سیستم یک مسئله شخصی است وبنده به شخصه ترجیح میدهم که یک FreeBSD-Box را در درجه اول به روز کنم.
۱. به روزرسانی سیستم
برای آنکه در ابتدا به ساکن به سراغ FreeBSD رفتیم پس الزاماً به یک سری update ها نیز نیازمندیم. اولین گام به روز شدن /usr/port/ با سرور میباشد بدین منظور دستور زیر را وارد میکنیم:
root@firewall:/home/mohsen #portsnap fetch && portsnap extract
نکته: هر گاه port tree را update میکنیم دوباره باید برای آن index بسازیم که با دستور زیر میسر است.
root@firewall:/home/mohsen #cd /usr/ports/ && make index
Generating INDEX-10 – please wait..— describe.accessibility —
Generating INDEX-10 – please wait..— describe.accessibility —
— describe.arabic —
— describe.archivers —
— describe.astro —
— describe.audio —
— describe.benchmarks —
.
.
.
.
— describe.x11-drivers —
— describe.x11-fm —
— describe.x11-fonts —
— describe.x11-servers —
— describe.x11-themes —
— describe.x11-toolkits —
— describe.x11-wm —
Done.
در گام دوم با دستور زیر یکسری update ها را گرفته و نصب مینماییم.
root@firewall:/home/mohsen # freebsd-update fetch && freebsd-update install
در گام بعدی باید kernel را از لیست Component های آن حذف کنیم،زیرا قرار است تا خودمان کرنل کامپایل نماییم و قرار نیست به جای آن update شود. فایل etc/freebsd-update.conf/ را ویرایش مینمایم و در قسمت Component کلمه kernel را حذف مینماییم.
نکته: البته اگر قرار است این دستور را در cron استفاده شود.
سپس با یکی از دستوراتی که منجر به reboot سیستم میشود آن را reboot نمایید.
باید حال سراغ update کردن /usr/src/ برویم. برای این منظور دستور svn که جزو بسته subversion میباشد را باید نصب نماییم.
root@firewall:/home/mohsen # pkg install subversion
نکته:از اینجا به بعد تحت عنوان buildworld در FreeBSD شناخته میشود و اگر تا بحال این کار را انجام ندادهاید به هیچ عنوان بدون خواندن مستندات خود FreeBSD این کار را انجام ندهید!
root@firewall:/home/mohsen # svn checkout https://svn0.us-west.FreeBSD.org/src/head /usr/src
root@firewall:/home/mohsen # svn up /usr/src
root@firewall:/home/mohsen# cd /usr/src; make clean
root@firewall:/usr/src #chflags -R noschg /usr/obj/*
root@firewall:/usr/src #rm -rf /usr/obj
root@firewall:/usr/src #cd /usr/src && make buildworld
root@firewall:/usr/src #shutdown -r now
root@firewall:/home/mohsen # mergemaster -p
root@firewall:/home/mohsen# cd /usr/src/ && make installworld
root@firewall:/usr/src # mergemaster -iF
root@firewall:/usr/src # init 6
حال که buildworld تمام شد به سراغ کامپایل کرنل میرویم.
۲. کامپایل کرنل:
برای کامپایل کرنل به دایرکتوری زیر بروید:
root@firewall:/home/mohsen # cd /usr/src/sys/´uname -m´/conf
root@firewall:/usr/src/sys/i386/conf # pwd
/usr/src/sys/i386/conf
نکته: دایرکتوری sys در مسیر بالا مسیر کرنلهای شما میباشد و دستور uname -m نوع ماشنینتان را برمیگرداند.
در دایرکتوری conf کرنل شما config فایل کرنل شما وجود دارد که با نام GENERIC ذخیره شده است. اول از آن یک backup میگیریم.
root@firewall:/usr/src/sys/i386/conf # cp GENERIC GENERIC.back
سپس با ۲ دستور زیر آماده تغییر پیکربندی آن میشویم:
root@firewall:/usr/src/sys/i386/conf # mv GENERIC PF
root@firewall:/home/mohsen # cd /home/mohsen/ && ln -s /usr/src/sys/i386/conf/PF
از پیکربندی آن backup گرفته و آن را تغییر نام به PF داده و یک لینک در home دایرکتوری خود ساختیم.
در فایل پیکربندی یک خط به نام ident وجود دارد که نام کرنل شماست، در حقیقت الان به نام GENERIC است آن را به PF تغییر دهید تا به تغییرات فایروال PF برسیم.
به انتهای فایل پیکربندی خود خطوط زیر را اضافه کنید تا کرنل FreeBSD بتواند PF را بشناسد.
######PF Firewall #######################
device pf
device pflog
device pfsync
##########ALTQ PF ###########################
options ALTQ
options ALTQ_CBQ # Class Bases Queuing (CBQ)
options ALTQ_RED # Random Early Detection (RED)
options ALTQ_RIO # RED In/Out
options ALTQ_HFSC # Hierarchical Packet Scheduler (HFSC)
options ALTQ_PRIQ # Priority Queuing (PRIQ)
options ALTQ_NOPCC # Required for SMP build
###########PF END############
در غیر اینصوررت فایل dev/pf/ هم حتی وجود نخواهد داشت.
نکته: اینجا گنو/لینوکس نیست! به هیچ عنوان تحت هیچ شرایطی در درون کرنل بدون هیچ مستندی چیزی را جایگذاری و یا حذف ننمایید.
سپس به دایرکتوری /usr/src/ رفته و با ۲ فرمان زیر کرنل را کامپایل و نصب مینماییم:
root@firewall:/usr/src # make buildkernel KERNCONF=PF
root@firewall:/usr/src # make installkernel KERNCONF=PF
سپس ماشین را rebeoot میکنیم.
بعد از reboot ماشین اسم کرنل جدید با فرمان زیر مشخص خواهد شد:
root@firewall:/home/mohsen # uname -i
PF
درواقع indent کرنل را نمایش میدهد.
قبل از reboot کردن خروجی فرمان ifconfig بدین صورت بود:
mohsen@firewall:~ % /sbin/ifconfig
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
ether 08:00:27:93:23:6e
inet 192.168.1.8 netmask 0xffffff00 broadcast 192.168.1.255
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL> media: Ethernet autoselect (1000baseT )
status: active
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
options=600003<RXCSUM,TXCSUM,RXCSUM_IPV6,TXCSUM_IPV6>
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4
inet 127.0.0.1 netmask 0xff000000
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
حال که با PF کامپایل شده بدین صورت درآمده:
mohsen@firewall:~ % /sbin/ifconfig
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
ether 08:00:27:93:23:6e
inet 192.168.1.8 netmask 0xffffff00 broadcast 192.168.1.255
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL> media: Ethernet autoselect (1000baseT )
status: active
pflog0: flags=141<UP,RUNNING,PROMISC> metric 0 mtu 33184
pfsync0: flags=0<> metric 0 mtu 1500
syncpeer: 0.0.0.0 maxupd: 128 defer: off
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
options=600003<RXCSUM,TXCSUM,RXCSUM_IPV6,TXCSUM_IPV6>
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4
inet 127.0.0.1 netmask 0xff000000
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
۲. فایل rc.conf
دست نگه دارید!!!! همه چیز تمام نشده است. درست که شما کرنل را با PF همخوان کردید، ولی هنوز FreeBSD با PF مشکل دارد. درواقع FreeBSD با PF مشکل ندارد این شما هستید که با آن مشکل دارید. هنوز rc.conf را خالی گذاشتهاید.
باید خطوط زیر را به rc.conf توزیع خود اضافه کنید:
pf_enable=”YES”
pf_flags=”-e”
pf_rules=”/etc/pf.conf”
pflog_enable=”YES”
pflog_logfile=”/var/log/pflog”
pflog_flags=””
نکته: اینجا گنو/لینوکس نیست، برای دوباره لود شدن این فایل نیاز است تا با init 1 به single mode رفته و با CTRL+D به حالت اولیه برگردید.
تبریک میگوییم یک سیستمعامل آماده کار با فایروال قدرتمند PF دارید.
نوشته نصب و راه اندازی فایرول PF در FreeBSD (شماره اول) اولین بار در چرت و پرت پدیدار شد.