如何配置iptables与tc限制带宽和流量

 ##启用netfilter中的forward链的转发功能
    # Enabling IP Forwarding......
    echo "Enabling IP Forwarding........"
    echo "1" > /proc/sys/net/ipv4/ip_forward
    IPTABLES="/sbin/iptables"
    ##定义通信端口,以便调用
    # Protocols Configuration.
    HTTP="80"
    HTTPS="443"
    FTP="21"
    FTP_DATA="20"
    SMTP="25"
    POP3="110"
    IMAP="143"
    SSH="22"
    TELNET="23"
    PCAW_TCP="5631"
    PCAW_UDP="5632"
    WEBMIN="10000"
    WAM="12000"
    DNS="53"
    ##配置网络接口
    # Internet Configuration.
    INET_IF="ppp0"
    #internet netcard
    EXT_IF="eth0"
    #intranet netcard
    LAN_IF="eth1"
    LAN_IP="192.168.0.1"
    LAN_IP_RANGE="192.168.0.0/24"
    #TRUSTED_TCP_PORT="22 25 53 80 110 143 443 3128 6000 6001 6002 7100"
    # Localhost Configuration.
    LO_IF="lo"
    LO_IP="127.0.0.1"
    ##挂载相应功能模块
    # Module loading.
    echo "modprobe modules"
    # Module loading.
    # Needed to initially load modules
    /sbin/depmod -a
    #Required modules
    #/sbin/modprobe ip_tables
    #/sbin/modprobe ip_conntrack
    #/sbin/modprobe iptable_filter
    #/sbin/modprobe iptable_mangle
    #/sbin/modprobe iptable_nat
    #/sbin/modprobe ipt_LOG
    #/sbin/modprobe ipt_limit
    #/sbin/modprobe ipt_state
    #/sbin/modprobe ip_conntrack_ftp
    #/sbin/modprobe ip_nat_ftp
    # Non-Required modules
    #/sbin/modprobe ipt_owner
    #/sbin/modprobe ipt_REJECT
    #/sbin/modprobe ipt_MASQUERADE
    #/sbin/modprobe ip_conntrack_irc
    #/sbin/modprobe ip_nat_irc
    #############################################################################开始用tc控制网络流量
    ##########################TC begin##########################################
    ##########################################################################上传端口配置
    echo "Enabling uplink limit"
    #uplink limit
    ##clear dev eth0 rule
    tc qdisc del dev eth0 root 2>/dev/null
    ##定义上传总带宽(用tc语法,这里用的是htb过滤器)
    ##define root and default rule
    tc qdisc add dev eth0 root handle 10: htb default 70
    ##define uplink max rate
    tc class add dev eth0 parent 10: classid 10:1 htb rate 64kbps ceil 64kbps
    ##对不同的业务进行分类,定义不同的数据流量
    ##define second leaf
    #tc class add dev eth0 parent 10:1 classid 10:10 htb rate 2kbps ceil 4kbps prio 2
    #tc class add dev eth0 parent 10:1 classid 10:20 htb rate 2kbps ceil 4kbps prio 2
    #tc class add dev eth0 parent 10:1 classid 10:30 htb rate 32kbps ceil 40kbps prio 3
    tc class add dev eth0 parent 10:1 classid 10:40 htb rate 3kbps ceil 13kbps prio 0
    tc class add dev eth0 parent 10:1 classid 10:50 htb rate 1kbps ceil 11kbps prio 1
    tc class add dev eth0 parent 10:1 classid 10:60 htb rate 1kbps ceil 11kbps prio 1
    tc class add dev eth0 parent 10:1 classid 10:70 htb rate 2kbps ceil 5kbps prio 1
    ##定义不同数据传输业务的优先级别和优化数据传输方法
    ##define rule for second leaf
    #tc qdisc add dev eth0 parent 10:10 handle 101: pfifo
    #tc qdisc add dev eth0 parent 10:20 handle 102: pfifo
    #tc qdisc add dev eth0 parent 10:30 handle 103: pfifo
    #tc qdisc add dev eth0 parent 10:40 handle 104: pfifo
    #tc qdisc add dev eth0 parent 10:50 handle 105: pfifo
    #tc qdisc add dev eth0 parent 10:60 handle 106: pfifo
    #tc qdisc add dev eth0 parent 10:70 handle 107: pfifo
    ##tc qdisc add dev eth0 parent 10:10 handle 101: sfq perturb 10
    ##tc qdisc add dev eth0 parent 10:20 handle 102: sfq perturb 10
    ##tc qdisc add dev eth0 parent 10:30 handle 103: sfq perturb 10
    tc qdisc add dev eth0 parent 10:40 handle 104: sfq perturb 5
    tc qdisc add dev eth0 parent 10:50 handle 105: sfq perturb 10
    tc qdisc add dev eth0 parent 10:60 handle 106: sfq perturb 10
    tc qdisc add dev eth0 parent 10:70 handle 107: sfq perturb 10
    ##为netfilter链中的mangle链打标记做好准备(做句柄标示)
    ##define fw for ipfilter
    #tc filter add dev eth0 parent 10: protocol ip prio 100 handle 10 fw classid 10:10
    #tc filter add dev eth0 parent 10: protocol ip prio 100 handle 20 fw classid 10:20
    #tc filter add dev eth0 parent 10: protocol ip prio 100 handle 30 fw classid 10:30
    tc filter add dev eth0 parent 10: protocol ip prio 100 handle 40 fw classid 10:40
    tc filter add dev eth0 parent 10: protocol ip prio 100 handle 50 fw classid 10:50
    tc filter add dev eth0 parent 10: protocol ip prio 100 handle 60 fw classid 10:60
    tc filter add dev eth0 parent 10: protocol ip prio 100 handle 70 fw classid 10:70
    ###################################################################################
    ##下载端口配置(方法同上传配置,只是在速率定义上有调整)
    echo "Enabling downlink limit"
    #downlink limit
    ##clear dev eth1 rule
    tc qdisc del dev eth1 root 2>/dev/null
    ##define root and default rule
    tc qdisc add dev eth1 root handle 10: htb default 70
    ##define downlink max rate
    tc class add dev eth1 parent 10: classid 10:1 htb rate 128kbps ceil 128kbps
    ##define second leaf
    #tc class add dev eth1 parent 10:1 classid 10:10 htb rate 2kbps ceil 32kbps prio 2
    #tc class add dev eth1 parent 10:1 classid 10:20 htb rate 2kbps ceil 32kbps prio 2
    #tc class add dev eth1 parent 10:1 classid 10:30 htb rate 32kbps ceil 212kbps prio 3
    tc class add dev eth1 parent 10:1 classid 10:40 htb rate 5kbps ceil 20kbps prio 0
    tc class add dev eth1 parent 10:1 classid 10:50 htb rate 2kbps ceil 17kbps prio 1
    tc class add dev eth1 parent 10:1 classid 10:60 htb rate 2kbps ceil 17kbps prio 1
    tc class add dev eth1 parent 10:1 classid 10:70 htb rate 3kbps ceil 5kbps prio 1
    ##define rule for second leaf
    #tc qdisc add dev eth1 parent 10:10 handle 101: pfifo
    #tc qdisc add dev eth1 parent 10:20 handle 102: pfifo
    #tc qdisc add dev eth1 parent 10:30 handle 103: pfifo
    #tc qdisc add dev eth1 parent 10:40 handle 104: pfifo
    #tc qdisc add dev eth1 parent 10:50 handle 105: pfifo
    #tc qdisc add dev eth1 parent 10:60 handle 106: pfifo
    #tc qdisc add dev eth1 parent 10:70 handle 107: pfifo
    ##tc qdisc add dev eth1 parent 10:10 handle 101: sfq perturb 10
    ##tc qdisc add dev eth1 parent 10:20 handle 102: sfq perturb 10
    ##tc qdisc add dev eth1 parent 10:30 handle 103: sfq perturb 10
    tc qdisc add dev eth1 parent 10:40 handle 104: sfq perturb 5
    tc qdisc add dev eth1 parent 10:50 handle 105: sfq perturb 10
    tc qdisc add dev eth1 parent 10:60 handle 106: sfq perturb 10
    tc qdisc add dev eth1 parent 10:70 handle 107: sfq perturb 10
    ##define fw for ipfilter
    #tc filter add dev eth1 parent 10: protocol ip prio 100 handle 10 fw classid 10:10
    #tc filter add dev eth1 parent 10: protocol ip prio 100 handle 20 fw classid 10:20
    #tc filter add dev eth1 parent 10: protocol ip prio 100 handle 30 fw classid 10:30
    tc filter add dev eth1 parent 10: protocol ip prio 100 handle 40 fw classid 10:40
    tc filter add dev eth1 parent 10: protocol ip prio 100 handle 50 fw classid 10:50
    tc filter add dev eth1 parent 10: protocol ip prio 100 handle 60 fw classid 10:60
    tc filter add dev eth1 parent 10: protocol ip prio 100 handle 70 fw classid 10:70
    #############################################################################
    ##定义iptables规则
    echo "Enabling iptables rules"
    # Enabling iptables rules
    ##清空各个链中原有的内容
    # Reset the default policies in the tables
    iptables -P INPUT ACCEPT
    iptables -P FORWARD ACCEPT
    iptables -P OUTPUT ACCEPT
    iptables -t nat -P PREROUTING ACCEPT
    iptables -t nat -P POSTROUTING ACCEPT
    iptables -t nat -P OUTPUT ACCEPT
    iptables -t mangle -P PREROUTING ACCEPT
    iptables -t mangle -P OUTPUT ACCEPT
    iptables -F
    iptables -t nat -F
    iptables -t mangle -F
    iptables -X
    iptables -t nat -X
    iptables -t mangle -X
    ##定义默认链的政策(全部拒绝)采取需要时才开放策略
    # Set policies
    iptables -P INPUT DROP
    iptables -P OUTPUT DROP
    iptables -P FORWARD DROP
    ############################################################################
    ##允许本机做ping回环测试
    # allow ping localhost,ping 192.168.0.1/2
    # Allow loopback access
    iptables -A INPUT -p icmp -i lo -j ACCEPT
    iptables -A OUTPUT -p icmp -o lo -j ACCEPT
    ##允许从本机ping局域网内的微机
    # Allow ping LAN
    iptables -A INPUT -p ALL -i $LAN_IF -s $LAN_IP_RANGE -j ACCEPT
    iptables -A OUTPUT -p ALL -o $LAN_IF -d $LAN_IP_RANGE -j ACCEPT
    ##定义从ppp0端口出去的包和ppp0进来的并且是响应的包允许通过
    # Allow ppp0
    iptables -A INPUT -p ALL -i $INET_IF -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A OUTPUT -p ALL -o $INET_IF -j ACCEPT
    ##定义新的自定义链
    # Creat userspecified chains
    iptables -N allowed
    iptables -N tcp_packets
    iptables -N bad_tcp_packets
    iptables -N icmp_packets
    iptables -N limited_packets
    ##在bad_tcp_packets 链中定义坏包检测机制
    # bad_tcp_packets rules chain
    iptables -A bad_tcp_packets -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset
    iptables -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "New not syn:"
    iptables -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP
    ##定义允许通过的包的检测条件
    # allowed rules chain
    iptables -A allo
    Linux联盟
    收集整理
    wed -p tcp --syn -j ACCEPT
    iptables -A allowed -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A allowed -p tcp -j DROP
    #定义icmp规则包,防止ping死攻击
    # ICMP rules chain
    iptables -A icmp_packets -p icmp -s 0/0 --icmp-type 8 -j ACCEPT
    iptables -A icmp_packets -p icmp -s 0/0 --icmp-type 11 -j ACCEPT
    # limited_packets rules chain
    #iptables -A limited_packets -p tcp ! --syn -m state --state NEW -j DROP
    #iptables -A INPUT -i $INET_IF -s 192.168.0.0/16 -j DROP
    #iptables -A INPUT -p udp -i $LAN_IF --dport 67 --sport 68 -j ACCEPT
    #
    ######################################################################
    ##对input链做bad_tcp_packets过滤
    # The first bad_tcp_packets filter of INPUT chain
    iptables -A INPUT -p tcp -j bad_tcp_packets
    ##对input链做icmp_packets过滤
    # The second icmp_packets filter of INPUT chain
    iptables -A INPUT -p icmp -i $INET_IF -j icmp_packets
    # Open trusted ports
    #echo "Open trusted ports....."
    #iptables -N services
    #for PORT in $TRUSTED_TCP_PORT; do
    #iptables -A tcp_packets -s 0/0 -p tcp --dport $PORT -j allowed
    #done
    #for PORT in $TRUSTED_UDP_PORT; do
    #iptables -A tcp_packets -s 0/0 -p udp --dport $PORT -j allowed
    #done
    # The trust port of INPUT chain
    #iptables -A INPUT -p tcp -i $INET_IF -j tcp_packets
    ##拒绝欺骗攻击
    # deny local cheat
    iptables -A INPUT -i $INET_IF -s 192.168.0.0/16 -j DROP
    iptables -A INPUT -i $INET_IF -s 10.0.0.0/8 -j DROP
    iptables -A INPUT -i $INET_IF -s 172.16.0.0/12 -j DROP
    iptables -A INPUT -i $INET_IF -s 127.0.0.0/8 -j DROP
    # allow DHCP_packets from LAN
    #iptables -A INPUT -p udp -i $LAN_IF --dport 67 --sport 68 -j ACCEPT
    ##拒绝burst攻击
    # deny attack of hack to input chain
    iptables -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level INFO --log-prefix "IPT INPUT packets died:"
    ##定义forward链上的规则
    # FORWARD chain
    ##bad_tcp_packets filter检查
    # bad_tcp_packets filter
    iptables -A FORWARD -p tcp -j bad_tcp_packets
    # address of limited filter
    #iptables -A FORWARD -p tcp -j limited_packets
    ##从内网出去的包不做流量外的限制
    # allow the packets from LAN to WAN
    iptables -A FORWARD -o $INET_IF -s $LAN_IP_RANGE -j ACCEPT
    iptables -A FORWARD -i $LAN_IF -s $LAN_IP_RANGE -j ACCEPT
    ##定义从ppp0进来的包通过foward链的规则
    # allow the packets from wan to lan
    iptables -A FORWARD -i $INET_IF -d $LAN_IP_RANGE -m state --state ESTABLISHED,RELATED -j ACCEPT
    ##对forward做burst检测
    # deny attack of hack to forward chain
    iptables -A FORWARD -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level DEBUG --log-prefix "IPT FORWARD packets died:"
    ##对forward链做icmp(ping攻击)检测
    # deny ping attack of hack
    iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
    iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
    ##对forward链做简单的ddos防御
    # deny DDOS attack
    iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
    ##做伪装(net转换)
    # allow UDP
    #iptables -A FORWARD -p udp -d $LAN_IP_RANGE -i $EXT_IF -j ACCEPT
    # the servies of www to the port for Squid
    #iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
    # the other servies use nat chain to masquerade
    iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE
    ############mark for mangle filter############
    echo "Enabling mangle "
    # uploads
    #iptables -t mangle -A PREROUTING -s 192.168.0.6 -m layer7 --l7proto dns -j MARK --set-mark 10
    #iptables -t mangle -A PREROUTING -s 192.168.0.6 -m layer7 --l7proto smtp -j MARK --set-mark 20
    #iptables -t mangle -A PREROUTING -s 192.168.0.6 -m layer7 --l7proto http -j MARK --set-mark 30
    ##为ip地址打标记以便进行流量控制--上传
    #iptables -t mangle -A PREROUTING -s 192.168.0.52 -j MARK --set-mark 40
    #iptables -t mangle -A PREROUTING -s 192.168.0.0/24 -j MARK --set-mark 70
    #iptables -t mangle -A PREROUTING -s 192.168.0.3 -j MARK --set-mark 60
    # downloads
    #iptables -t mangle -A POSTROUTING -d 192.168.0.6 -m layer7 --l7proto dns -j MARK --set-mark 10
    #iptables -t mangle -A POSTROUTING -d 192.168.0.6 -m layer7 --l7proto smtp -j MARK --set-mark 20
    #iptables -t mangle -A POSTROUTING -d 192.168.0.6 -m layer7 --l7proto http -j MARK --set-mark 30
    ##为ip地址打标记以便进行流量控制--下载
    #iptables -t mangle -A POSTROUTING -d 192.168.0.52 -j MARK --set-mark 40
    #iptables -t mangle -A POSTROUTING -d 192.168.0.0/24 -j MARK --set-mark 70
    #iptables -t mangle -A POSTROUTING -d 192.168.0.3 -j MARK --set-mark 60
    ################################### iptables END########################################
    echo "iptables END"
    #echo "Enabling Squid"
    #/usr/local/squid/sbin/squid
    echo "Enabling ADSL"
    adsl-start
    ##########################################################
    每个人的linux安装的不一样,netfilter模块加载的也不一样,在模块加载处估计各位要进行微调,将需要加载的模块前带#的去掉几个估计就可以了,tc处可根据自己的实际情况进行微调。
    本配置已经实际运行了3年,没出现什么问题(配置上),但要是某个高手盯上你了,估计。。。。嘿嘿,技术就是这样,没有绝对的,反正我的配置(p3赛阳 600,128mpc100,10g硬盘,810e主板,双8139d百兆网卡,debian woody 2.4.32核心)不关机除了每两个月的正常清洁外没出现过什么异常(因为对内网是没有限制的,故清理内鬼是比较重要的)。欢迎大家多多指教,把此脚本多多完善,本人不胜感激。学以致用,linux学习更应如此 。
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值