dgclan 发表于 2006-8-8 00:10:40

說明:
--------------------------------
這邊的 eh1 是對外網卡,eth0 是對內網卡
若與您的實際環境不同,請自行修改

主要過程:
1.清除網卡上的所有佇列規則 (不論有或沒有)
2.定義網卡的佇列規則
3.定義各類別
4.定義各類別的佇列規則
5.定義過濾器

rate 後面的數字:保證頻寬
ceil 後面的數字:最大頻寬
單位只有:KByte/s ,不過上面要寫 kbps,因為這是 HTB 的規定語法

prio 後面的數字:優先權,數字愈低愈高,0最大

classid 後面的編號:完整類別編號
parent 後面的編號:父類別,或者佇列規則,亦即該項目上一層的物件


這裡列出了 7 個類別,可以自行新增或減少

default 類別,可有可無
較嚴謹的頻寬管制,可取消 default 類別,以避免內部有人鑽漏洞
一般情況,則建議設 default 比較好


註1:可參考前面的「類別規劃示意圖」,比較容易了解此處的設定用意

註2:這段參考用原始碼,只是一個範例,必須修改後,才能符合您的環境



iptables 指令,過濾器 (編輯自定義防火牆規則) :

代碼:

dgclan 发表于 2006-8-8 00:11:24

# uploads
# 設定上傳方面,先利用 iptables 給封包貼標籤,再交由 fw 過濾器進行過濾

iptables -t mangle -A PREROUTING -s 192.168.1.6 -m layer7 --l7proto dns -j MARK --set-mark 10
iptables -t mangle -A PREROUTING -s 192.168.1.6 -m layer7 --l7proto smtp -j MARK --set-mark 20
iptables -t mangle -A PREROUTING -s 192.168.1.6 -m layer7 --l7proto http -j MARK --set-mark 30

iptables -t mangle -A PREROUTING -s 192.168.1.1 -j MARK --set-mark 40
iptables -t mangle -A PREROUTING -s 192.168.1.2 -j MARK --set-mark 50
iptables -t mangle -A PREROUTING -s 192.168.1.3 -j MARK --set-mark 60

# downloads
# 下載方面

iptables -t mangle -A POSTROUTING -d 192.168.1.6 -m layer7 --l7proto dns -j MARK --set-mark 10
iptables -t mangle -A POSTROUTING -d 192.168.1.6 -m layer7 --l7proto smtp -j MARK --set-mark 20
iptables -t mangle -A POSTROUTING -d 192.168.1.6 -m layer7 --l7proto http -j MARK --set-mark 30

iptables -t mangle -A POSTROUTING -d 192.168.1.1 -j MARK --set-mark 40
iptables -t mangle -A POSTROUTING -d 192.168.1.2 -j MARK --set-mark 50
iptables -t mangle -A POSTROUTING -d 192.168.1.3 -j MARK --set-mark 60



說明:
--------------------
iptables 會去檢查封包,看它來自哪裡,或者 Layer-7 協定是哪種的 ,然後貼上標籤
之後 fw 過濾器,會依照標籤上的數字,來給封包歸類別

IP:電腦的 IP

Layer-7 協定種類:
此部份是採用 l7-filter 直接做過濾,例如:dns,smtp,http
P2P 下載的封包,也可以管制
l7-filter 詳細用法請參考 Coyote 的教學文章,補充說明

mark 後面的數字:「類別」的編號

註:這段參考用原始碼,只是一個範例,必須修改後,才能符合您的環境


#############################################################################

dgclan 发表于 2006-8-8 00:11:38

Linux QoS 設定,看似複雜,然其實可以做到非常彈性化 (可程式化)

其效能是取決 CPU、RAM、網卡晶片,可由使用者自行決定組裝等級
若使用高等配備,並不會輸給一台幾萬元的昂貴硬體路由器
且在價格上,更具優勢

昔日網路上的中文 Linux QoS 資料,非常稀少
即使是現在,雖然市面上已有幾本 Linux QoS 相關中文書籍了
但網路上的 Linux QoS 的中文討論,仍是寥寥可數
故小弟今日貼此一篇,望能拋磚引玉之效,開創 Linux QoS 風潮

Linux QoS 的技術
基礎的像此篇管制小型網路頻寬之應用
進階的可以配合 l7-filter 做 service 的頻寬管制
到深入一點,複雜一點的
更可以藉由 iproute2 多重路由,達到多WAN的架構


歡迎有興趣的朋友,一起加入研究討論的行列
若有任何心得,請發表此篇後面
謝謝

dgclan 发表于 2006-8-8 00:11:54

##########################################
補充 01: 2005/10/04
##########################################

FW 過濾器使用方法補充說明

附加說明:如何限制 P2P 下載?

Linux QoS 有三要素:佇列規則,類別,過濾器

佇列規則是實際負責 QoS 的單位
類別是定義 「頻寬大小」的單位
而過濾器,顧名思義,就是用來過濾封包,判斷封包該屬於哪個類別的單位

換句話說,要限制 P2P....等等之類,關鍵就在於「過濾器」
只要「過濾器」有辦法把 P2P 的封包抓出來,那麼要管制它就不難了


FW 實際上是靠 iptables 給封包貼標籤
然後 FW 再依照標籤編號,給封包歸類別
所以下面講的,其實是 iptables 的語法.....


iptables 語法簡單講解:
------------------------------------
iptables -t mangle -A PREROUTING -s 192.168.1.1 -j MARK --set-mark 10
iptables -t mangle -A POSTROUTING -d 192.168.1.1 -j MARK --set-mark 10

-t mangle:指定使用 mangle 表格 (QoS 要用這個表格)
-A:新增一條規則

PPRROUTING:上傳方向,是內部電腦傳出去的,後面加 -s 來源端
POSTROUTING:下傳方向,是外面網路傳進來的,後面 -d 目的地

-s:來源端
-d:目的地

-j mark:處理動作,給予貼標籤
--set-mark:貼什麼標籤,數字指定於後

※ 重要:
在 Linux下, 所有的指令和檔名,都有分英文大小寫
PREROUTING 和 prerouting 所代表的意義是不同的,後者是錯誤語法

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


iptables 給封包貼標籤時,「比對規則」有以下六種基本型態:
(基本型態可混搭,變成更嚴謹的複雜型態)


1.針對 IP 過濾
iptables -t mangle -A PREROUTING -s 192.168.1.1 -j MARK --set-mark 10

2.針對「網段」過濾
iptables -t mangle -A PREROUTING -s 192.168.1.0/24 -j MARK --set-mark 10

3.針對 MAC 過濾
iptables -t mangle -A PREROUTING -m --mac-source 00:00:AA:BB:CC:EE -j MARK --set-mark 10

4.針對 PORT 過濾
iptables -t mangle -A PREROUTING -p tcp --sport 80 -j MARK --set-mark 10
iptables -t mangle -A POSTROUTING -p tcp --dport 80 -j MARK --set-mark 10

iptables -t mangle -A PREROUTING -p udp --sport 53 -j MARK --set-mark 10
iptables -t mangle -A PREROUTING -p icmp -j MARK --set-mark 10

5.針對 「網卡介面」過濾 (假如對內有多片網卡的話,-i 進入方向, -o 出去方向)
iptables -t mangle -A PREROUTING -o eth0 -j MARK --set-mark 10
iptables -t mangle -A POSTROUTING -i eth0 -j MRAK --set-mark 10


6. l7-filter 過濾
iptables -t mangle -A PREROUTING -m layer7 --l7proto bittorrent -j MARK --set-mark 10
( BT上傳方向的封包,給予貼標籤 10 )

iptables -t mangle -A POSTROUTING -m layer7 --l7proto edonkey -j MARK --set-mark 10
( 驢子 下載方向的封包,給予貼標籤 10 )


若要管制 P2P 下載,就是把 bittorrent 和 edonkey 兩個 L7 協定
各設置 上傳/下載,共4條過濾器規則
並把這4條規則的封包,通通給予貼某一個類別的標籤,例如:90
讓過濾器把 P2P 的封包,丟給該類別 10:90 去處理即可

註:此部份僅是設定「過濾器」,實際在處理 QoS 的是「佇列規則」、「類別」,所以另一邊也必須有相對應的設定。例如:必須定義 10:90 這個類別的頻寬,整個 P2P 管制的 QoS 才會生效。


附錄:Coyote 可用 l7-filter 協定一覽表



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

dgclan 发表于 2006-8-8 00:12:08

########################################
補充 02: 2005/11/03
########################################

淺談 Coyote 防火牆之工作原理
從底層 iptables 的角度來看



Coyote 的防火牆,預設政策為「允許通過」

預設政策的意思是:
假如封包不符合任何使用者訂立的規則,則以預設政策來處理。




iptables 的 filter 表格,內建只有三個鏈 (Chain):
INPUT、FORWARD、OUTPUT

而 iptables 允許使用者新增自訂鏈
Coyote 在設計上,會自動新增一些自訂鏈

在「WEB 管理介面」中
有關防火牆方面的設定,其實是以 Coyote 自訂的鏈 來處理
以下會進一步說明:




上圖所示
在高級防火牆配置中,有兩種類型:
-------------------------------------
1.Admin (管理)
2.Access (訪問)



1.Admin (管理) 實際上是寫入 Coyote 的自訂鏈:remote-admin

此 remote-admin 自訂鏈,是被安排在 INPUT 鏈中

這說明了,所謂的類型 Admin (管理),是和 Coyote 本機有關的
它是用來管制誰能夠從遠端登入 Coyote 主機,進行操作




2.Access (訪問) 實際上是寫入 Coyote 的自訂鏈: access-acl

此 access-acl 自訂鏈:是被安排在 FORWARD 鏈中

所以它是和 NAT 有關係的
用來管制外部網路,和內部網路電腦的連線

至於 Internet Interface (int-if) 和 Internet (int-net) 選項的差別

如上圖所示,從 source (來源)端,我們可以看出:

Internet Interface (int-if),實際結果是 anywhere,和 any 選項是一樣的

Internet (int-net),則是指 ISP 的閘道端


經測試後發現
ISP 閘道端,並不等於 Internet (泛指網際網路 0.0.0.0)
阻擋 LAN 內電腦的封包,進入 ISP 閘道端
並無法阻擋其進入網際網路
所以這是一個詭異的選項,它實際上並沒有太大作用

若要從 WEB 管理介面設定防火牆
建議外部網路的選項,選擇 Internet Interface (int-if) 或者 any
才能真正起到保護作用


在終端模式下,查詢 iptables 設定明細表的指令為:
----------------------------------------------
iptables -L (預設查詢 filter 表格)
iptables -t nat -L (指定查詢 nat 表格)
iptables -t mangle -L (指定查詢 mangle 表格)


######################################

其它補充....待續

dgclan 发表于 2006-8-8 00:12:25

具体


http://www.pczone.com.tw/vbb3/showthread.php?t=116666

dgclan 发表于 2006-8-8 00:47:20

簡體中文 轉 繁體中文,建議的用詞:

字符 = 字元
內核 = 核心
轉發 = 轉換
激活 = 啟動
掩碼 = 遮罩
遠程 = 遠端
模塊 = 模組
進程 = 程序
接口 = 組態 修正: 接口 (Interface) = 介面
內存 = 記憶體
串口 = 連接埠
計算機 = 主機
網關 = 閘道器
端口(port) = 埠
重新加載(reload) = 重新載入
子網掩碼 = 子網路遮罩
域 = 網域
主機名 = 主機名稱

dgclan 发表于 2006-8-11 12:13:15

谢谢hzl88688 老大

Email已收到 还有几个问题倒是一并发上来请教一下

dgclan 发表于 2006-8-11 22:19:47

具体Conlimit L7 package设置怎么老出错?

我的设置
设置192.168.123.1 连接数为5

具体设置

[ 本帖最后由 dgclan 于 2006-8-11 22:22 编辑 ]

dgclan 发表于 2006-8-11 22:22:49

Start Conlimit

dgclan 发表于 2006-8-11 22:24:22

最后显示


Starting conlimit: Configuring ...
iptables: Unknown error -1
Working!


具体设置那里错了?

hzl88688 发表于 2006-8-11 22:46:55

原帖由 dgclan 于 2006-8-11 22:24 发表
最后显示


Starting conlimit: Configuring ...
iptables: Unknown error -1
Working!


具体设置那里错了?

hzl88688 发表于 2006-8-11 23:58:44

前面给你的版本有点问题,iptable不支持工作,你留下EMAIL,我再发个给你试试!

[ 本帖最后由 hzl88688 于 2006-8-12 00:48 编辑 ]

dgclan 发表于 2006-8-12 16:49:46

xufangqing@sina.com

QQ:75006392

我看到加载的模块

ip_nat_ftp            2128   0 (unused)
ip_conntrack_mms      2480   1
ip_conntrack_h323       1865   1
ip_conntrack_irc      2440   1
ip_conntrack_ftp      3120   1

其中 FTP功能怎么用?我怎么连接它呢?

[ 本帖最后由 dgclan 于 2006-8-12 18:09 编辑 ]

dgclan 发表于 2006-8-13 14:45:50

已经收到 装好
还有几个问题:
页: 1 [2] 3
查看完整版本: 太美老大以及众位高人有空来一下:)