Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2111821
  • 博文数量: 227
  • 博客积分: 10521
  • 博客等级: 上将
  • 技术积分: 3452
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-20 14:59
个人简介

低调做人,高调做事!

文章分类

全部博文(227)

文章存档

2013年(4)

2012年(8)

2011年(16)

2010年(24)

2009年(92)

2008年(83)

分类: LINUX

2008-03-27 23:17:57

  线路:ADSL:2M/512K
  ppp0:外网口
  eth0:192.168.1.254,内网口

  业务需求:保证正常的网页浏览,FTP,SMTP,POP3,对其它的所有应用加以限制,以免影响正常业务的使用。
  1、让交互数据包保持较低的延迟时间,也就是说上载或下载文件不会打扰SSH/telnet等。
  2、上载或下载期间有合理的速率用于网页浏览,即使http属于一种大量数据传输,也不应受其它传输影响太大
  3、对FTP-data限速,不会占用所有带宽
  4、对SMTP,pop3限速
  5、对未分类的进行限制,以免影响
  6、保证上载不会影响下载,上载数据流会影响下载的速率,这是相当普遍的现象。
  7、对每个IP的下载速率进行限制
  8、取得空闲带宽的优先级别如:交互数据,FTP-data,smtp,pop3;网页浏览,其它业务优先级别最低
    9、从内网服务器(192.168.1.254)到局域网不受限制。

#!/bin/bash

/sbin/iptables -t mangle -A PREROUTING -m tos --tos Minimize-Delay -j MARK --set-mark 0x1
/sbin/iptables -t mangle -A PREROUTING -m tos --tos Minimize-Delay -j RETURN

/sbin/iptables -t mangle -A PREROUTING -m tos --tos Minimize-Cost -j MARK --set-mark 0x4
/sbin/iptables -t mangle -A PREROUTING -m tos --tos Minimize-Cost -j RETURN 

/sbin/iptables -t mangle -A PREROUTING -m tos --tos Maximize-Throughput -j MARK --set-mark 0x5
/sbin/iptables -t mangle -A PREROUTING -m tos --tos Maximize-Throughput -j RETURN


# tag all incoming SYN packets through ppp0 as mark value
/sbin/iptables -t mangle -I PREROUTING -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j MARK --set-mark 0x1
/sbin/iptables -t mangle -I PREROUTING -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j RETURN

/sbin/iptables -t mangle -A PREROUTING -p tcp -m tcp --dport ftp -j MARK --set-mark 0x1
/sbin/iptables -t mangle -A PREROUTING -p tcp -m tcp --dport ftp -j RETURN
/sbin/iptables -t mangle -A PREROUTING -p tcp -m tcp --sport ftp -j MARK --set-mark 0x1
/sbin/iptables -t mangle -A PREROUTING -p tcp -m tcp --sport ftp -j RETURN

/sbin/iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 22 -j MARK --set-mark 0x1
/sbin/iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 22 -j RETURN

/sbin/iptables -t mangle -A PREROUTING -p udp -m udp --dport 53 -j MARK --set-mark 0x1
/sbin/iptables -t mangle -A PREROUTING -p udp -m udp --dport 53 -j RETURN

/sbin/iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 80 -j MARK --set-mark 0x2
/sbin/iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 80 -j RETURN
/sbin/iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 80 -j MARK --set-mark 0x2
/sbin/iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 80 -j RETURN

/sbin/iptables -t mangle -A PREROUTING -p tcp -m tcp --dport ftp-data -j MARK --set-mark 0x3
/sbin/iptables -t mangle -A PREROUTING -p tcp -m tcp --dport ftp-data -j RETURN
/sbin/iptables -t mangle -A PREROUTING -p tcp -m tcp --sport ftp-data -j MARK --set-mark 0x3
/sbin/iptables -t mangle -A PREROUTING -p tcp -m tcp --sport ftp-data -j RETURN

/sbin/iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 25 -j MARK --set-mark 0x4
/sbin/iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 25 -j RETURN
/sbin/iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 25 -j MARK --set-mark 0x4
/sbin/iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 25 -j RETURN
/sbin/iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 110 -j MARK --set-mark 0x4
/sbin/iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 110 -j RETURN
/sbin/iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 110 -j MARK --set-mark 0x4
/sbin/iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 110 -j RETURN

/sbin/iptables -t mangle -A PREROUTING -j MARK --set-mark 0x5

/sbin/iptables -t mangle -A OUTPUT -m tos --tos Minimize-Delay -j MARK --set-mark 0x1
/sbin/iptables -t mangle -A OUTPUT -m tos --tos Minimize-Delay -j RETURN

/sbin/iptables -t mangle -A OUTPUT -m tos --tos Minimize-Cost -j MARK --set-mark 0x4
/sbin/iptables -t mangle -A OUTPUT -m tos --tos Minimize-Cost -j RETURN 

/sbin/iptables -t mangle -A OUTPUT -m tos --tos Maximize-Throughput -j MARK --set-mark 0x5
/sbin/iptables -t mangle -A OUTPUT -m tos --tos Maximize-Throughput -j RETURN

/sbin/iptables -t mangle -I OUTPUT -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j MARK --set-mark 0x1
/sbin/iptables -t mangle -I OUTPUT -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j RETURN

/sbin/iptables -t mangle -A OUTPUT -p tcp -m tcp --dport ftp -j MARK --set-mark 0x1
/sbin/iptables -t mangle -A OUTPUT -p tcp -m tcp --dport ftp -j RETURN
/sbin/iptables -t mangle -A OUTPUT -p tcp -m tcp --sport ftp -j MARK --set-mark 0x1
/sbin/iptables -t mangle -A OUTPUT -p tcp -m tcp --sport ftp -j RETURN

/sbin/iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 22 -j MARK --set-mark 0x1
/sbin/iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 22 -j RETURN

/sbin/iptables -t mangle -A OUTPUT -p udp -m udp --dport 53 -j MARK --set-mark 0x1
/sbin/iptables -t mangle -A OUTPUT -p udp -m udp --dport 53 -j RETURN

/sbin/iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 80 -j MARK --set-mark 0x2
/sbin/iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 80 -j RETURN
/sbin/iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 80 -j MARK --set-mark 0x2
/sbin/iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 80 -j RETURN

/sbin/iptables -t mangle -A OUTPUT -p tcp -m tcp --dport ftp-data -j MARK --set-mark 0x3
/sbin/iptables -t mangle -A OUTPUT -p tcp -m tcp --dport ftp-data -j RETURN
/sbin/iptables -t mangle -A OUTPUT -p tcp -m tcp --sport ftp-data -j MARK --set-mark 0x3
/sbin/iptables -t mangle -A OUTPUT -p tcp -m tcp --sport ftp-data -j RETURN

/sbin/iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 25 -j MARK --set-mark 0x4
/sbin/iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 25 -j RETURN
/sbin/iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 25 -j MARK --set-mark 0x4
/sbin/iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 25 -j RETURN
/sbin/iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 110 -j MARK --set-mark 0x4
/sbin/iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 110 -j RETURN
/sbin/iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 110 -j MARK --set-mark 0x4
/sbin/iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 110 -j RETURN

/sbin/iptables -t mangle -A OUTPUT -j MARK --set-mark 0x5


DOWNLINK=2000
UPLINK=512

#clean existing down and uplink qdiscs,put the errors to /dev/null

tc qdisc del dev ppp0 root    2> /dev/null > /dev/null
tc qdisc del dev ppp0 ingress 2> /dev/null > /dev/null
tc qdisc del dev eth0 root    2> /dev/null > /dev/null

########################################uplink###########################################
#install root HTB,point default traffic to 1:15:
tc qdisc add dev ppp0 root handle 1: htb default 15

#shape everything at $UPLINK speed -this prevents huge queues in your DSL modem which destroy latency
tc class add dev ppp0 parent 1: classid 1:1 htb rate ${UPLINK}kbit ceil ${UPLINK}kbit

#high prio class 1:11:
tc class add dev ppp0 parent 1:1 classid 1:11 htb rate 256kbit  ceil ${UPLINK}kbit prio 0
tc class add dev ppp0 parent 1:1 classid 1:12 htb rate 256kbit  ceil ${UPLINK}kbit prio 2
tc class add dev ppp0 parent 1:1 classid 1:13 htb rate 128kbit  ceil ${UPLINK}kbit prio 1
tc class add dev ppp0 parent 1:1 classid 1:14 htb rate 128kbit  ceil ${UPLINK}kbit prio 1
tc class add dev ppp0 parent 1:1 classid 1:15 htb rate 128kbit  ceil ${UPLINK}kbit prio 3

#bost get Stochastic Fairness:
tc qdisc add dev ppp0 parent 1:11 handle 11: sfq perturb 10
tc qdisc add dev ppp0 parent 1:12 handle 12: sfq perturb 10
tc qdisc add dev ppp0 parent 1:13 handle 13: sfq perturb 10
tc qdisc add dev ppp0 parent 1:14 handle 14: sfq perturb 10
tc qdisc add dev ppp0 parent 1:15 handle 15: sfq perturb 10


#TOS Mininum Delay (ssh,telnet) in 1:11:
tc filter add dev ppp0 parent 1:0 protocol ip prio 1 handle 1 fw classid 1:11
#80,8080,443 in 1:12
tc filter add dev ppp0 parent 1:0 protocol ip prio 2 handle 2 fw classid 1:12
#ftp-data in 1:13
tc filter add dev ppp0 parent 1:0 protocol ip prio 3 handle 3 fw classid 1:13
#smtp,pop3 in 1:14
tc filter add dev ppp0 parent 1:0 protocol ip prio 4 handle 4 fw classid 1:14
tc filter add dev ppp0 parent 1:0 protocol ip prio 5 handle 5 fw classid 1:15

########################################DOWNLINK###########################################
# install the ingress qdisc on the ingress
tc qdisc add dev ppp0 handle ffff: ingress

# DROP everything thats coming in too fast:
tc filter add dev ppp0 parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate ${DOWNLINK}kbit burst 10k drop flowid :1

tc qdisc add dev eth0 root handle 2:0 htb default 30
tc class add dev eth0 parent 2:0 classid 2:1 htb rate 2Mbit burst 15k
tc class add dev eth0 parent 2:1 classid 2:10 htb rate 2Mbit burst 15k
tc class add dev eth0 parent 2:1 classid 2:20 htb rate 72000kbit ceil 72000kbit burst 15k
tc class add dev eth0 parent 2:1 classid 2:30 htb rate 500kbit ceil 500kbit burst 15k


tc qdisc add dev eth0 parent 2:10 handle 10: sfq perturb 10
tc qdisc add dev eth0 parent 2:20 handle 20: sfq perturb 10
tc qdisc add dev eth0 parent 2:30 handle 30: sfq perturb 10


U32_1="tc filter add dev eth0 protocol ip parent 2:0 prio 1 u32"
$U32_1 match ip dst 192.168.1.99/32 flowid 2:10

U32_2="tc filter add dev eth0 protocol ip parent 2:0 prio 2 u32"
$U32_2 match ip src 192.168.1.254/32 flowid 2:20

tc filter add dev eth0 protocol ip parent 2:0 prio 3 u32 match ip dst 192.168.1.0/24 flowid 2:30


 

阅读(1983) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~