顯示具有 Firewall Server 標籤的文章。 顯示所有文章
顯示具有 Firewall Server 標籤的文章。 顯示所有文章

2009年10月22日 星期四

使用tc進行限流(QOS)

系統使用CentOS 5.1
使用內建的tc指令進行限流

1.編輯tc規則
◎此例是與iptables規則檔放在一起,也可另外存放執行

vim /etc/iptables.rule

#設定網卡參數

WAN_IF="eth0"

LAN_IF="eth1"

#下載限流規則(針對內部網卡)
##清除規則
/sbin/tc qdisc del dev $LAN_IF root 2>/dev/null
##設定預設群組
/sbin/tc qdisc add dev $LAN_IF root handle 10: htb default 30
##設定群組總流量,rate保障頻寬、ceil限制頻寬
/sbin/tc class add dev $LAN_IF parent 10: classid 10:1 htb rate 256kbps ceil 256kbps
##設定各群組限流,prio為分配頻寬的優先順序
/sbin/tc class add dev $LAN_IF parent 10:1 classid 10:10 htb rate 64kbps ceil 256kbps prio 1
/sbin/tc class add dev $LAN_IF parent 10:1 classid 10:20 htb rate 64kbps ceil 128kbps prio 1
/sbin/tc class add dev $LAN_IF parent 10:1 classid 10:30 htb rate 32kbps ceil 64kbps prio 2
/sbin/tc qdisc add dev $LAN_IF parent 10:10 handle 101: pfifo
/sbin/tc qdisc add dev $LAN_IF parent 10:20 handle 102: pfifo
/sbin/tc qdisc add dev $LAN_IF parent 10:30 handle 103: pfifo
/sbin/tc filter add dev $LAN_IF parent 10: protocol ip prio 100 handle 10 fw classid 10:10
/sbin/tc filter add dev $LAN_IF parent 10: protocol ip prio 100 handle 20 fw classid 10:20
/sbin/tc filter add dev $LAN_IF parent 10: protocol ip prio 100 handle 30 fw classid 10:30

#上傳限流規則(針對外部網卡)
/sbin/tc qdisc del dev $WAN_IF root 2>/dev/null
/sbin/tc qdisc add dev $WAN_IF root handle 10: htb default 30
/sbin/tc class add dev $WAN_IF parent 10: classid 10:1 htb rate 256kbps ceil 256kbps
/sbin/tc class add dev $WAN_IF parent 10:1 classid 10:10 htb rate 64kbps ceil 256kbps prio 1
/sbin/tc class add dev $WAN_IF parent 10:1 classid 10:20 htb rate 64kbps ceil 128kbps prio 1
/sbin/tc class add dev $WAN_IF parent 10:1 classid 10:30 htb rate 32kbps ceil 64kbps prio 2
/sbin/tc qdisc add dev $WAN_IF parent 10:10 handle 101: pfifo
/sbin/tc qdisc add dev $WAN_IF parent 10:20 handle 102: pfifo
/sbin/tc qdisc add dev $WAN_IF parent 10:30 handle 103: pfifo
/sbin/tc filter add dev $WAN_IF parent 10: protocol ip prio 100 handle 10 fw classid 10:10
/sbin/tc filter add dev $WAN_IF parent 10: protocol ip prio 100 handle 20 fw classid 10:20
/sbin/tc filter add dev $WAN_IF parent 10: protocol ip prio 100 handle 30 fw classid 10:30

2.設定iptables規則,針對IP將封包加上標記
◎如果美各IP需分別設定上傳跟下載的規則,用戶多時會造成規則暴增,所以我改用陣列方式執行規則

#建立QOSa陣列,將分組10用戶IP加入
QOSa=(192.168.1.1 192.168.1.2 192.168.1.3)

#針對QOSa陣列,標記為群組10
for IPa in ${QOSa[@]}; do
/sbin/iptables -t mangle -A POSTROUTING -d $IPa -j MARK --set-mark 10
/sbin/iptables -t mangle -A PREROUTING -s $IPa -j MARK --set-mark 10
done

#建立QOSa陣列,將分組20用戶IP加入
QOSb=(192.168.1.10 192.168.1.11 192.168.1.12)

#針對QOSb陣列,標記為群組20
for IPb in ${QOSb[@]}; do
/sbin/iptables -t mangle -A POSTROUTING -d $IPb -j MARK --set-mark 20
/sbin/iptables -t mangle -A PREROUTING -s $IPb -j MARK --set-mark 20
done

3.執行規則
如果規則都是放在iptables.rule的話,只要執行iptables.rule即可
sh /etc/iptables.rule
或是執行自建的規則檔

2008年8月13日 星期三

防火牆iptables快速安裝

系統使用CentOS 5.1

1.安裝相關元件
yum install elinks gcc ncurses-devel

2.下載iptables套件
cd /usr/local/src
elinks netfilter.org
下載iptables-1.3.8.tar.bz2 (選擇最新版本)

3.解壓縮元件
cd /usr/local/src
tar -jxvf iptables-1.3.8.tar.bz2


4.安裝iptables
cd /usr/local/src/iptables-1.3.8

chmod 777 ./extensions/.*
make KERNEL_DIR=/usr/src/linux
make install KERNEL_DIR=/usr/src/linux
make install-devel

5.修改iptables路徑
cd /sbin
mv iptables iptables.old
ln -s /usr/local/sbin/iptables iptables

6.編輯rc.local
vim /etc/rc.d/rc.local

echo 1 > /proc/sys/net/ipv4/ip_forward
sh /etc/iptables.rule

7.編輯iptables規則於/etc/
vim /etc/iptables.rule

8.執行iptables規則
sh /etc/iptables.rule

##EasyReadMore##