PF là một stateful firewall được phát triển bởi OpenBSD, tuy nhiên cũng được port sang FreeBSD. PF là một firewall đầy đủ tính năng, hỗ trợ ALTQ (Alternate Queuing), ALTQ cung cấp tính năng QoS.
1. Nạp PF kernel module, thêm dòng sau vào /etc/rc.conf:
Khởi động bằng tay:
Khi PF chạy, nó sẽ tìm đến file chứa cấu hình các luật, mặc định là /etc/pf.conf. Hãy tạo ra file pf.conf nếu nó chưa có trong /etc. Nếu file chứa các luật này nằm ở một nơi khác, thêm dòng sau vào /etc/rc.conf để PF load file này lên khi khởi động:
PF module có thể được load bằng tay từ command line:
PF hỗ trợ logging được cung cấp bởi pflog.ko và có thể được load bằng cách thêm dòng sau vào /etc/rc.conf:
Khởi động pflog bằng tay:
2. PF kernel options:
Khi ta cần thêm module khác cho PF, ta có thể cấu hình lại FreeBSD kernel để hỗ trợ. Cách cấu hình FreeBSD kernel như sau:
Tìm “ident GENERIC” và thay bằng “ident YOURKERNEL”. (Không có dấu ngoặc kép)
Sau đó ta thêm các option cho PF
CBQ (Class Based Queuing) cho phép chia băng thông của một connection thành các lớp và đưa vào hàng đợi đối với traffic ưu tiên dựa vào “filter rules”
RED (Random Early Detection) cho phép tránh nghẽn mạng, RED sẽ đo chiều dài của “queue” và so sánh với giá trị ngưỡng max và min cho “queue”. Nếu “queue” lớn hơn max, tất cả những packet mới sẽ bị drop.
RIO (Random Early Detection In and Out)
HFSC (Hierarchical Fair Service Curve Packet Scheduler)
PRIQ (Priority Queuing) cho phép traffic ở “queue” lớn hơn qua trước.
NOPCC cho SMP hỗ trợ ALTQ
3. File pf.conf
1. Nạp PF kernel module, thêm dòng sau vào /etc/rc.conf:
pf_enable="YES"Khởi động bằng tay:
#/etc/rc.d/pf startKhi PF chạy, nó sẽ tìm đến file chứa cấu hình các luật, mặc định là /etc/pf.conf. Hãy tạo ra file pf.conf nếu nó chưa có trong /etc. Nếu file chứa các luật này nằm ở một nơi khác, thêm dòng sau vào /etc/rc.conf để PF load file này lên khi khởi động:
pf_rules="/path/to/pf.conf"PF module có thể được load bằng tay từ command line:
#kldload pf.koPF hỗ trợ logging được cung cấp bởi pflog.ko và có thể được load bằng cách thêm dòng sau vào /etc/rc.conf:
pflog_enable="YES"Khởi động pflog bằng tay:
# /etc/rc.d/pflog start2. PF kernel options:
Khi ta cần thêm module khác cho PF, ta có thể cấu hình lại FreeBSD kernel để hỗ trợ. Cách cấu hình FreeBSD kernel như sau:
#cd /usr/src/sys/i386/conf/#cp GENERIC YOURKERNEL#vi YOURKERNELTìm “ident GENERIC” và thay bằng “ident YOURKERNEL”. (Không có dấu ngoặc kép)
Sau đó ta thêm các option cho PF
device pfdevice pflogdevice pfsyncoptions ALTQoptions ALTQ_CBQoptions ALTQ_REDoptions ALTQ_RIOoptions ALTQ_HFSCoptions ALTQ_PRIQoptions ALTQ_NOPCCCBQ (Class Based Queuing) cho phép chia băng thông của một connection thành các lớp và đưa vào hàng đợi đối với traffic ưu tiên dựa vào “filter rules”
RED (Random Early Detection) cho phép tránh nghẽn mạng, RED sẽ đo chiều dài của “queue” và so sánh với giá trị ngưỡng max và min cho “queue”. Nếu “queue” lớn hơn max, tất cả những packet mới sẽ bị drop.
RIO (Random Early Detection In and Out)
HFSC (Hierarchical Fair Service Curve Packet Scheduler)
PRIQ (Priority Queuing) cho phép traffic ở “queue” lớn hơn qua trước.
NOPCC cho SMP hỗ trợ ALTQ
3. File pf.conf
#ext_if="tun0"int_if="de0"icmp_types="echoreq"localnet=$int_if:networktable <ossec_fwtable> persistmartians = "{ 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8, 169.254.0.0/16, 192.0.2.0/24, 0.0.0.0/8, 240.0.0.0/4, 255.255.255.255/32 }"# optionsset block-policy returnset loginterface $int_ifset skip on lo# scrubscrub in all# nat/rdr#nat on $ext_if from $int_if to any -> ($ext_if)#filter rulesblock in allblock in log quick on $int_if inet proto tcp from any to $int_if flags FUP/FUPblock in quick from <ossec_fwtable> to anyblock out quick from any to <ossec_fwtable>#block drop in log (all) quick on $ext_if from $martians to any#block drop out log (all) quick on $ext_if from any to $martianspass out keep stateantispoof quick for { lo $int_if }pass in quick on $int_if inet proto tcp from any to $int_if port 22 flags S/SA keep statepass in quick on $int_if inet proto tcp from any to $int_if port 80 flags S/SA keep statepass in inet proto icmp all icmp-type $icmp_types keep state#pass in quick on $int_if
No comments:
Post a Comment