 |
資安論壇 行政院 國家資通安全會報 - 技術服務中心 - 資安論壇 http://forum.icst.org.tw/
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
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(
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 寫到: | 非常感謝您!
使論壇也能分享您的經驗與技術.
. |
您客氣了,只是個人一點小小的實作經驗,分享之~~~ _________________ 不斷精進一直是我努力的目標 |
|
回頂端 |
|
 |
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票
|
|