【問題】使用 linux_xp 大哥的 QOS 設定所遇到的問題..



贊助商連結


yowlc
2006-10-10, 12:24 AM
使用 Coyote Linux 頻寬管制 (QoS) 設定教學 的方法之後, 遇到一 些問題

BrazilFW 2.28 , 使用固定 IP
eth0 對內 ( 虛擬 IP => 192.168.28.xx )
eth1 對外 ( 實體 IP => 192.192.128.249 (舉例) )

有使用 BrazilFW 內的 IP 對應 MAC 的 設定功能.
實作後, 確實 192.168.28.xx 的電腦都被頻寬給控管住了
(每台的頻寬為: 保證上:5kbyte, 最大上: 8kbyte, 保證下:50kbyte, 最大下:188kbyte)
, 但是做了一些測試後

1). 192.168.28.xx 的電腦使用 ftp 去 192.192.128.56 或 192.192.128.80 (兩台皆 ftp 主機), 結果上下傳皆為 3m byte 左右. 但是到 hinet 網站作 上下傳則可被管住在 8 / 188 kbyte.

2). 如果將 隨便一台 NB, 自己設定固定 IP 為 192.168.28.100 (這是為了測試 DHCP, 因為 DHCP 的 28.100 會配給另外一台電腦), 結果還是可以上網, 因為 iptables 確實沒有下達 IP 對 MAC 的指令 關係, 請問這部分的指令要怎麼下達呢??

因此 我要請問的問題是, 怎麼解決, 也可以讓區域內的電腦(192.168.28.xx) 去存取 BrazilFW 真實 IP 同一段的網段(192.192.128.xx), 也可以受到 QOS 的限制呢??

謝謝大家!!

贊助商連結


linux_xp
2006-10-11, 09:00 PM
1.
關鍵是在「iptables」給封包貼標籤的部份

# uploads
iptables -t mangle -A PREROUTING -s [$source_IP 來源] -j MARK --set-mark [$classID 標籤編號]

# downloads
iptables -t mangle -A POSTROUTING -s [$source_IP 來源] -j MARK --set-mark [$classID 標籤編號]

如果是這種寫法,都是在路由之前,就已經貼標籤分類了
由語法中可以看出,它與介面或目的地,是完全無關係的
因為語法中,完全沒有提到介面或目的地

但是為什麼,與「真實 IP」同網段的 FTP,卻不受到管制?

原因可能是:

可能原因一、
猜測可能根本就沒走閘道 (非 DMZ 架構)
可能是固 3 或 固 5 IP
除了 BrazilFW 用掉一個,其它拿去架網站
而這些網站主機,又有線路連接區網的交換器

也就是說
區網內電腦,下載這些自架主機的東西,可能是直接走交換器的
根本沒過閘道防火牆 (BrailFW),自然也就無法管制了

可能原因二、
很碰巧的,這些外面的 FTP站,居然是和你的對外真實 IP 同網段

我們區網電腦,要連接閘道器才能出去外面網路,也就是 BrazilFW
其實就算 Internet 上面的主機,也是一樣

閘道器,又稱路由器,Router
它的功用是「路徑選擇」
當「目標位址」不是和自己同網段時,無法藉由廣播取得目標端的回應
封包就必須往路由器送

而當外面的主機,和對外網卡真實 IP 同網段
封包就不需要上閘道器 (ISP 指定的 gateway)
自然也就不會有所謂的路由了

這種情況下 (罕見)
使用預先路由鍊 (PREROUTING、POSTROUTING)
當然就是無效的,因為封包根本不需要路由

改使用轉送鍊 (FORWARD),直接指定來源和目的:
---------------------------------------------
# uploads
iptables -t mangle -A FORWARD -s [$區網電腦] -d [$對外真實IP 的"網段"] -j MARK --set-mark [$classID 標籤編號]

# downloads
iptables -t mangle -A FORWARD -s [$對外真實IP 的"網段"] -d [區網電腦] -j MARK --set-mark [$classID 標籤編號]

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

2.
DHCP 服務,可以針對 MAC 給予 IP
因此同樣 MAC,每次自動取得的 IP,都會是一樣的

但是使用者
如果自行「手動設定」,而不使用 DHCP的「自動取得」
就可以避開這個限制,這是一種漏洞

為了防範有人利用這個漏洞,就要把它補起來!

怎麼補呢?

方法1.
大略過濾法

看 DHCP 分配的範圍,是多少,理論上,它會是一個網段
如果知道「子網路切割」的計算方式,請自行算出子網路遮罩
例如:
DHCP 分配的範圍在 192.168.0.239~247
網段就是 192.168.0.239/29,共有 8 個 IP 可用

# 假設對內網卡為 eth0,對外網卡為 eth1
# 新增一條 filter 表格的規則,轉送鍊
# 由 eth0 進入,eth1 出去,來源不是這個網段,全部丟棄
# ! 驚嘆號是反轉的意思

iptables -A FORWARD -i eth0 -o eth1 -s ! 192.168.0.239/29 -j DROP

說明:
這不是 QoS,是防火牆規則
不是來自這個網段的封包,想要出去,全部丟棄
也就是說,不需要動到 QoS ,因為走漏洞的人根本無法上網
:D

不過假設這個網段 IP 的電腦,沒有全部開機
還是有可能會被利用到...

規則是下的很簡單,但仍有漏洞...


方法二:
滴水不露法

防火牆的過濾機制,是由上而下,當符合規則,就不會繼續往下比對

iptables -A FORWARD -i eth0 -o eth1 -m mac --mac-sorece aa:bb:cc:dd:ee:ff -j ACCEPT
..........
.........
........


iptables -A FORWARD -i eth0 -o eth1 -j DROP

說明:
將允許使用的 MAC 通通加入規則,ACCPET 允許通過
最後一條,無論是誰,六親不認,全部丟棄

也就是說
有幾個 MAC 是要允許可以使用的,就要加幾條規則
很煩很累,但保證滴水不露的意思

如果要再"絕"一點,還可以這樣寫:
iptables -A FORWARD -i eth0 -o eth1 -s [區網 IP] -m mac --mac-sorece [MAC位址] -j ACCEPT

也就是說,不僅要符合這個 MAC,而且還要是這個 IP
即使使用者自行手動設定
他也許 MAC 符合,但 IP 不符,照樣無法通過


其實規則寫的愈詳細,漏洞就愈少
只是寫起來會比較累,要改也很累,除錯也很累

較佳的方法,是寫 shell script 程式化
直接去讀一份純文字檔的資料
這個文字檔,紀錄一些 MAC 與對應 IP 之類的資料
程式只要寫一次就 OK了,以後要修改,只要改純文字的資料檔
不過這就牽涉到 shell script 程式設計了,非三言兩語可以道盡

yowlc
2006-10-12, 08:41 AM
to linux_xp 大哥, 聽君一席話, 勝讀十年書...

我的恩人排行榜要把您列在前頭啦..

感恩. 找個時間快來試試看!!