資安論壇 首頁 資安論壇
行政院 國家資通安全會報 - 技術服務中心 - 資安論壇 http://forum.icst.org.tw/
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入 

FreeBSD-我的 PF 學習筆記

 
發表新主題   回覆主題    資安論壇 首頁 -> Unix-Like 作業系統討論版
上一篇主題 :: 下一篇主題  
發表人 內容
weithenn



註冊時間: 2006-06-09
文章: 6
來自: 不自量力星球

發表發表於: 星期一 七月 03, 2006 11:00 am    文章主題: FreeBSD-我的 PF 學習筆記 引言回覆

http://0rz.net/c31zr

【前言】

以下介紹為引用 [FreeBSD 使用手冊 第26章 防火牆 26.4 OpenBSD Packet Filter (PF) 和 ALTQ]

2003 年 7 月, OpenBSD 的防火牆, 也就是常說的 PF 被成功地移植到了 FreeBSD 上, 並可以通過 FreeBSD Ports Collection 來安裝了; 第一個將 PF 集成到基本系統中的版本是 2004 年 11 月發行的 FreeBSD 5.3。 PF 是一個完整的提供了大量功能的防火牆軟件, 並提供了可選的 ALTQ (交錯隊列, Alternate Queuing) 功能。 ALTQ 提供了服務品質 (QoS) 帶寬整形功能, 這個功能能夠以基於過濾規則的方式來保障不同服務的帶寬。 OpenBSD Project 在維護 PF 用戶指南方面已經做了非常卓越的工作,因此我們不打算在這本使用手冊中進行更進一步的闡述, 以避免不必要的重複勞動。

警告: 在瀏覽 pf 用戶手冊時,請時刻注意,在 FreeBSD 中所包含的 pf 的版本和 OpenBSD 中是不一樣的。 在 FreeBSD 5.X 中 pf 相當於 OpenBSD 3.5 中的版本, 而 FreeBSD 6.X 中則相當於 OpenBSD 3.7。

更多的詳細信息, 可以在[FreeBSD 版本的 PF 網站]上找到

【作業環境】

FreeBSD 6.1-RELEASE

【安裝及設定】

Step1.修改核心來開啟支援 PF

若您不需要 PF ALTQ 功能則可不用透過修改核心來支援 PF,請直接在 /etc/rc.conf 內加入 pf_enable="YES" 即可。

device pf //啟動 Packet Filter 防火牆
device pflog //啟動 pflog0 網卡並以 bpf 格式來記錄網路流量
device pfsync //啟動 pfsync0 網卡用來監控「狀態的改變」
options ALTQ //啟動 ALTQ 功能 (注意不是所有網卡皆支援 ALTQ 功能)
options ALTQ_CBQ //啟動 Class Bases Queuing (CBQ) 功能

Step2.修改/etc/rc.conf

修改 /etc/rc.conf 中加入下列的設定,以便在系統啟動時啟用 PF

pf_enable="YES" # 啟用 PF (如果需要的話載入模組)
pflog_enable="YES" # 啟用 pflogd(Cool
gateway_enable="YES" # 啟用 LAN Gateway (若要做 NAT 的話)

Step3.修改 pf.conf

Packet Filter {PF}防火牆特性為 Default Pass ALL、Last Match Rules 當撰寫適合自已的 pf.conf 時記得 pf.conf 語法順序如下

巨集 Macro:包含 IP 位址、介面名稱等自定變數
表格 Tables:包含 IP 位址列表的表格
選項 Options:各種控制 PF 運作的選項
清理 Traffic Normalization:正規化與重組分段封包等再處理
佇列 Queueing:提供頻寬控制與封包優先順序
轉譯 Translation:控制網路位址轉譯與封包轉向
過濾規則 Packet Filtering:當封包通過任何網路介面時,允許選擇性的過濾或阻擋封包

PF 設定範例(/etc/pf.conf)請自行視個人需求修改,以下僅列出[阻擋惡意 Try SSH/FTP IP]內容

#special rule for ssh/ftp
pass in on $ext_if proto tcp from any to ($ext_if) port { ftp ssh } flags S/SA keep state (max-src-conn-rate 3/30, overload <ssh> flush global)
#block the ssh bruteforce bastards
block drop in quick on $ext_if from <ssh>

上面二條 Rules 運作流程大概是這樣

1. 首先 pass 對外進來的流量
2. 記錄連結 port {ftp ssh} 30秒內3次 (max-src-conn-rate 指定時間內允許連結次數)
3. 若有符合這樣條件的 IP 就將該 IP 加入 Table <ssh> 內
4. block 該 Table <ssh> 內列表的 IP

#pfctl -t ssh-bruteforce -Tshow //可看到惡意 ip 已加入table內
61.95.172.140
61.177.147.97
62.29.248.240
203.129.254.212
210.192.98.99
222.122.60.205

若想清除 Table <ssh> 內列表的 IP,方法有二

1.#pfctl -f /etc/pf.conf //重新載入 pf.conf 設定檔
2./usr/ports/security/expiretable //安裝 expiretable 定期清除 Table <ssh>

Step4.pf常用指令

修改完 PF 設定檔(pf.conf)後,常使用以下指令來控制 PF 更詳細的用法請參考[Man Page pf.conf]

#pfctl -f /etc/pf.conf //重新載入 pf.conf 設定檔
#pfctl -nf /etc/pf.conf //檢查 PF 語法是否正確 (未載入)
#pfctl -Nf /etc/pf.conf //僅載入 NAT 的設定檔
#pfctl -Rf /etc/pf.conf //僅載入防火牆的過濾設定檔
#pfctl -sn //顯示現階段 NAT 的規則
#pfctl -sr //顯示現階段過濾的規則
#pfctl -ss //顯示現階段封包運作狀態
#pfctl -si //顯示現階段過濾封包的統計資料
#pfctl -sa //顯示現階段所有統計的資料
#pfctl -vsr //顯示現階段過濾封包的統計資料
#pfctl -t ssh-bruteforce -Tshow //顯示 table 內資料

補充: PF 觀念導正

由於剛使用 PF 前 Firewall 是使用 IPF 於是以為只要將 ipf rule 貼到 pf.conf 內就可以了,但卻有些 rule不生效,經過 llwang 指導後就開通了 lol 以下為擷錄在 #bsdchat 內的談話

16:19 <weithenn_> llwang:block out quick on $lan_if from 192.168.1.231/32 to any 下這樣1.231還是可以出去
16:19 <weithenn_> llwang:block quick on $lan_if from 192.168.1.231/32 to any 下這樣1.231就出不去了
16:30 <llwang> 192.168.1.231 在哪一個 interface 上?
16:30 <weithenn_> llwang:$lan_if
16:31 <llwang> 你要擋的是不讓它連到哪裡?
16:31 <weithenn_> llwang:不讓它去任何地方
16:31 <llwang> 那你應該用 block in 而不是 block out
16:32 <llwang> 對 $lan_if 來說 192.168.1.231 是從這邊 進來 的
16:33 <weithenn_> llwang:但不是應該是 $lan_if 不讓來源1.231 出去 ?
16:33 <llwang> 因為你前面有 nat rule,進來的連線會 implicitly keep state
16:33 <llwang> weithenn_: 不是
16:33 <llwang> weithenn_: 你要從你這一台來看
16:34 <weithenn_> llwang:從pf.conf這台角度來看是嗎?
16:34 <llwang> weithenn_: 對你這一台來說,192.168.1.231 是從 $lan_if 進來,從 $ext_if1 或 $dmz_if 出去的
16:34 <llwang> weithenn_: 對,pf 這台
16:34 <llwang> weithenn_: 所以應該要用 block in
16:35 <weithenn_> llwang:so~~一句話點醒我夢中人........
16:35 <llwang> weithenn_: 用 block out 的話因為前面的 nat 會 keep state,所以 block out 會沒用
16:37 <weithenn_> llwang:感謝指教

【參考】

[PF: The OpenBSD Packet Filter]

[PF: OpenBSD 封包過濾器]

[pf中文手冊(for openbsd,但同樣適用FREEBSD)]

[FreeBSD 使用手冊 第26章 防火牆 26.4 OpenBSD Packet Filter (PF) 和 ALTQ]

[Man Page pf.conf]

[Man Page altq(4)]

[FreeBSD packet filter Mail List]

[PF: The OpenBSD Packet Filter]

[PF: OpenBSD 封包過濾器]

[FreeBSD 5.3 Release PF 初體驗]

[FreeBSD + PF + Shell Scritp + Load Sharing + Redundant ]

[FreeBSD NAT 上接兩條 ADSL 若斷線時自動偵測切換路由]

[PF 防火牆及 NAT 初次架設]

[jail-pf memo]

[FreeBSD筆記:pf log]

[游志峰的網路架設筆記 pf 的紀錄檔]

[游志峰的網路架設筆記 pf設定]

[游志峰的網路架設筆記 pf 原廠範例]

[OpenBSD Taiwan openbsd & pf 的邂逅]

[Hi! I’m clsung » Blog Archive » pf 擋 ssh 惡意連線]

[Block ssh bruteforce attempts]

[FreeBSD PF 防火牆及 NAT 初次架設 < 月夜火]

[OpenBSD 超精簡版PF使用手冊]

[OpenBSD firewall using pf]

[openbsd+adsl+pf+qdns 配置过程 - fanqiang.com]

[OpenBSD下面自动block密码测试不法分子]

[FreeBSD with Packet Filter(PF) Firewall - (1) ]

[FreeBSD with Packet Filter(PF) Firewall - (2) ]

[FreeBSD with Packet Filter(PF) Firewall - (3) ]

[FreeBSD with Packet Filter(PF) Firewall - (4) ]

[FreeBSD with Packet Filter(PF) Firewall - (5) ]

[FreeBSD with Packet Filter(PF) Firewall - (6) ]

【Log】

初稿-2006/07/03

感謝指導-[cls_bsd]、[llwang]、vvlng
_________________
不斷精進一直是我努力的目標
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
Roy1103



註冊時間: 2004-04-09
文章: 652
來自: Roc

發表發表於: 星期一 七月 03, 2006 9:31 pm    文章主題: 引言回覆

非常感謝您!

使論壇也能分享您的經驗與技術.

----------------------

尚未能仔細閱讀 因為沒有 FreeBSD 經驗.
_________________
正確的問題-答案!
『提問』
『中毒』
回頂端
檢視會員個人資料 發送私人訊息
weithenn



註冊時間: 2006-06-09
文章: 6
來自: 不自量力星球

發表發表於: 星期三 七月 05, 2006 6:05 pm    文章主題: 引言回覆

Roy1103 寫到:
非常感謝您!

使論壇也能分享您的經驗與技術.
.


您客氣了,只是個人一點小小的實作經驗,分享之~~~
_________________
不斷精進一直是我努力的目標
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
從之前的文章開始顯示:   
發表新主題   回覆主題    資安論壇 首頁 -> Unix-Like 作業系統討論版 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作