[FreeBSD 10]_Firewall using PF NCKU CSNA HW03-2

今天的文章,嘿嘿嘿…就是要在FBSD用PF架設防火牆…

 

 

然後筆記下一些進階的技巧,並且完成以下事情:

•Requirements:

•Remember to set some rules for your convenience.

122.117.119.197 Others
ssh YES NO
FTP YES NO
Web NO YES

•You can use Packet Filter(pf), IP Filter(IPF) or IP Filter Wall(IPFW).

 

1.首先你要先安裝好pf,這是FBSD內建的核心功能,所以你必須要重新BUILD你的核心,開啟PF跟ALTQ(可以做到QOS還有其他進階的功能,pf必須要他一起啟動才行)

在你的kernel config中加入以下內容並且build起來後更換核心:

#PACKEGE FILETER
device pf
device pflog
device pfsync

#ALTQ
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

 

如果不清楚kernel怎麼build,可以參考以下幾個site(或者我之後會發一個簡單版的文章)

https://www.freebsd.org/doc/handbook/kernelconfig-building.html

https://www.freebsd.org/doc/zh_TW/books/handbook/kernelconfig-building.html

http://fanqiang.chinaunix.net/a1/b2/20020307/060200123_b.html

 

 2.用standalong的方式啟動pf,在/etc/rc.conf加入以下內容啟動pf:

pf_enable="YES"
pf_rules="/etc/pf.conf"
pf_flag=""
pflog_enable="YES"
pflog_logfile="/var/log/pflog"
pflog_flags=""

儲存後重新開機

 

3.新增防火牆規則到/etc/pf.conf底下

table <goodguys> {192.168.1.0/24 219.71.32.219}
ext_if="em0"

set skip on lo0
block in all
pass in on $ext_if proto {tcp udp} from any to any port {80}
block in on $ext_if proto {tcp udp} from any to any port {21 22}
block in on $ext_if proto {tcp udp} from 122.117.119.197 to port {80}
pass in on $ext_if proto {tcp udp} from 122.117.119.197 to port {21 22 65500:65535}
pass in on $ext_if proto {tcp udp} from <goodguys> to any

我這邊解釋一下,

 

第一行建立一個名為goodguys的table,裡面包含著信任ip來源,我這邊因為機器是放在vm裡面,直接bridge區域網路,所以允許我該網段下的所有裝置都在goodguys名單

還有我外網的一個ip位置也是在信任名單中

 

第二行就是我的網卡代稱,也就是ext_if是一個變數,裡面放em0這個字串

第三行是不處理任何loop裝置

第四行是先drop所有規則,基本上pf是last match rule,所以會一行一行開放下來(另外有與法式quick,就不會是last match,進階用法不提)

第四行是讓所有連線都能夠通過80 port(web)

第五行是阻擋所有連線到21(ftp)跟22 port(ssh)

第六行是阻擋122.117.119.197到80 port(web)

第七行是允許122.117.119.197到21 22 port,還有給ftp用的passive mode資料port,利用冒號表示一個port range

第八行是允許所有在信任名單內的來源不進行過濾

 

儲存離開

 

4.重新啟動pf

service pf start

 

以上,就可以完成需求,另外pf進階用法請參考文末幾篇來源~

 

另外補充說明,如果機器在內網,外網有做port forwarding

例如外面8181轉進去80 port,這時pf.conf的規則不需要變成8181,維持原樣就好~

 

thx for:

http://wiki.weithenn.org/cgi-bin/wiki.pl?PF-%E5%88%A9%E7%94%A8_PF_%E8%BC%95%E9%AC%86%E9%81%94%E6%88%90_NAT

http://article.denniswave.com/1004

https://www.freebsd.org/doc/zh_TW/books/handbook/firewalls-ipf.html

https://www.netroby.com/view.php?id=3534#.VI3LqHuZPo2

http://newsletter.ascc.sinica.edu.tw/news/read_news.php?nid=1975

 

 

Leave a comment

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料