[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://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
很抱歉,必須登入網站才能發佈留言。