دراین قسمت ابتدا به مقدمات نصب در FreeBSD میپردازیم. FreeBSD همانند گنو/لینوکس نمیباشد که یکسری pf-iconپیشفرضها در کرنلش وجود داشته باشد. نه تنها کرنلش بلکه خود سیستمعامل آن نیز یک سیستمعامل لخت محسوب میشود. بدین جهت برای هر کاری باید مقدماتی را در خود سیستمعامل آماده سازی نمود.البته ناگفته نماند در این شماره کمی از مقدمات PF نیز گفته خواهد شد.
سؤالی که ممکن است پیش بیاید این است که چرا در خود OpenBSD نصب نکردیم. جواب این سؤال را بهتر است با تعریف خود community آن ارایه کنم: OpenBSD یک community حمایت کننده از پروژههایی همانند OpenSSH، LibreSSL، OpenSMTPD ، OpenBGPD، OpenIKED و mandoc میباشد. درواقع مکانی برای رشد و کمک به نرمافزار آزاد در مقیاس بزرگ میباشد.
نکته: مرحله اول یعنی به روز رسانی سیستم یک مسئله شخصی است وبنده به شخصه ترجیح میدهم که یک FreeBSD-Box را در درجه اول به روز کنم.
۱. به روزرسانی سیستم
برای آنکه در ابتدا به ساکن به سراغ FreeBSD رفتیم پس الزاماً به یک سری update ها نیز نیازمندیم. اولین گام به روز شدن /usr/port/ با سرور میباشد بدین منظور دستور زیر را وارد میکنیم:
1 |
root@firewall:/home/mohsen #portsnap fetch && portsnap extract |
نکته: هر گاه port tree را update میکنیم دوباره باید برای آن index بسازیم که با دستور زیر میسر است.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
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 ها را گرفته و نصب مینماییم.
1 |
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 میباشد را باید نصب نماییم.
1 |
root@firewall:/home/mohsen # pkg install subversion |
نکته:از اینجا به بعد تحت عنوان buildworld در FreeBSD شناخته میشود و اگر تا بحال این کار را انجام ندادهاید به هیچ عنوان بدون خواندن مستندات خود FreeBSD این کار را انجام ندهید!
1 2 3 4 5 6 7 8 9 10 11 |
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 تمام شد به سراغ کامپایل کرنل میرویم.
۲. کامپایل کرنل:
برای کامپایل کرنل به دایرکتوری زیر بروید:
1 2 3 |
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 میگیریم.
1 |
root@firewall:/usr/src/sys/i386/conf # cp GENERIC GENERIC.back |
سپس با ۲ دستور زیر آماده تغییر پیکربندی آن میشویم:
1 2 |
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 را بشناسد.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
######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/ رفته و با ۲ فرمان زیر کرنل را کامپایل و نصب مینماییم:
1 2 |
root@firewall:/usr/src # make buildkernel KERNCONF=PF root@firewall:/usr/src # make installkernel KERNCONF=PF |
سپس ماشین را rebeoot میکنیم.
بعد از reboot ماشین اسم کرنل جدید با فرمان زیر مشخص خواهد شد:
1 2 |
root@firewall:/home/mohsen # uname -i PF |
درواقع indent کرنل را نمایش میدهد.
قبل از reboot کردن خروجی فرمان ifconfig بدین صورت بود:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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 کامپایل شده بدین صورت درآمده:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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 توزیع خود اضافه کنید:
1 2 3 4 5 6 |
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 دارید.