Chinaunix首页 | 论坛 | 博客
  • 博客访问: 269274
  • 博文数量: 38
  • 博客积分: 2539
  • 博客等级: 少校
  • 技术积分: 443
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-01 11:19
文章分类

全部博文(38)

文章存档

2011年(4)

2010年(4)

2009年(30)

我的朋友

分类: LINUX

2009-07-06 16:05:14

防火墙内部网卡IP 192.168.0.1 故区网中的计算机请将IP设为192.168.0.2~254,网关器192.168.0.1

有关Linux 的安装问题,请参考相关网站,如鸟哥的私房菜或小红帽论坛,您最好具备一些网络的基本知识,不然可能又是另一场恶梦


基本上只要将下面的script,设定成开机自动执行,你的旧计算机便成为一台具有频宽控管功能的IP分享器

firewall script
文件(以下仅有初步的防火墙功能,但应已足够使用)
#!/bin/bash
#===================================================
#
开启IP转送

echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
#
定义变量IPT
IPT=/sbin/iptables
#----------------------------------
#
请把下行的 x.x.x.x 改成对外的
IP
#
目前为固定IP,,故将变量REALIP填入对外网卡eth0
IP
REALIP="x.x.x.x"

###-----------------------------------------------------###
#
清除先前的设定

###-----------------------------------------------------###
echo "Flush fiter table ......"
echo

# Flush filter
$IPT -F #清空所选链。这等于把所有规则一个个的删除。
$IPT -X
#没有给出参数,这条命令将试着删除每个非内建的链。



echo "Flush mangle table ......"
echo
# Flush mangle
$IPT -F -t mangle
$IPT -t mangle -X


echo "Flush nat table ......"
echo
# Flush nat
$IPT -F -t nat
$IPT -t nat -X


#
先加载FTP相关的模块

modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
#----------------------------------
#
设定 filter 内的 chain Policy
$IPT -t filter -P INPUT DROP
$IPT -t filter -P OUTPUT ACCEPT
$IPT -t filter -P FORWARD ACCEPT
#-------------------------------------------
#
设定 nat 这个 table chain
Policy
$IPT -t nat -P PREROUTING ACCEPT
$IPT -t nat -P OUTPUT ACCEPT
$IPT -t nat -P POSTROUTING ACCEPT
#----------------------------------------------

#--------------------------------------------------------------------------
#
开放连外的IP列表,,新开用户后请至档案尾端设定频宽

#--------------------------------------------------------------------------
$IPT -t nat -A POSTROUTING -o eth0 -j SNAT -s 192.168.0.100 --to-source $REALIP
$IPT -t nat -A POSTROUTING -o eth0 -j SNAT -s 192.168.0.30 --to-source $REALIP
$IPT -t nat -A POSTROUTING -o eth0 -j SNAT -s 192.168.0.121 --to-source $REALIP
$IPT -t nat -A POSTROUTING -o eth0 -j SNAT -s 192.168.0.122 --to-source $REALIP
$IPT -t nat -A POSTROUTING -o eth0 -j SNAT -s 192.168.0.123 --to-source $REALIP
#
开几个IP就将上面的描述复制,再修改一下IP即可,未在列表内的IP无法上网
#---------------------------------------------------------
#
定义处理 ICMP 封包的 chain: 'icmp_chain'
#
其中 type 0 代表 echo-reply (ping 对方时的响应
),
# type 8
echo-request (其它机器 ping 我们
).
$IPT -t filter -F
$IPT -t filter -X
$IPT -t filter -N icmp_chain
$IPT -t filter -A icmp_chain -p icmp --icmp-type 0 -j ACCEPT
$IPT -t filter -A icmp_chain -p icmp --icmp-type 3 -j ACCEPT
$IPT -t filter -A icmp_chain -p icmp --icmp-type 5 -j ACCEPT
$IPT -t filter -A icmp_chain -p icmp --icmp-type 8 -j ACCEPT
$IPT -t filter -A icmp_chain -p icmp --icmp-type 11 -j ACCEPT
$IPT -t filter -A icmp_chain -p icmp -j DROP
#==================================================================
#==================================================================
# PREROUTING (table:nat)
# 1.
即使是从内部 NAT 出去的联机, 它传送回来的封包的目的地址也绝对不会是内部
IP!
# 2.
NAT 出去的联机所传回的封包之目的地址在经过 PREROUTING 阶段后

#
才会被转换成内部 IP
$IPT -t nat -A PREROUTING -i eth0 -d 192.168.0.0/24 -j DROP
$IPT -t nat -A PREROUTING -i eth0 -d 127.0.0.0/8 -j DROP
# 3.
从外界进来,但宣称是来自内部网络的封包(来捣蛋的),一律挡掉。

$IPT -t nat -A PREROUTING -i eth0 -s 192.168.0.0/24 -j DROP
$IPT -t nat -A PREROUTING -i eth0 -s 127.0.0.0/8 -j DROP
#====================================================================
# INPUT (table:filter)
# A.
信任内部网络(192.168.0.0/24) lo 接口(127.0.0.0/8)
#
接受任何来自于这两个界面的封包
.
#--------------------------------------------------------------------
$IPT -t filter -A INPUT -p all -s 192.168.0.0/24 -j ACCEPT
$IPT -t filter -A INPUT -p all -s 127.0.0.0/8 -j ACCEPT
#--------------------------------------------------------------------
#
从此处起, 开始处理来自 internet 的封包

#--------------------------------------------------------------------
# B.
接受任何属于已建立的联机之封包.
$IPT -t filter -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
#------------------------------------------------------------------------
# C.
来自 internet, 属于 ICMP 的封包, 交由 icmp_chain 处理

$IPT -t filter -A INPUT -i eth0 -p icmp -j icmp_chain
#------------------------------------------------------------------------
# D.
只提供给外界 Mail (smtp) Web (www) 联机(TCP),
#
以及 DNS 查询(UDP), 其它一律不提供
.
#$IPT -t filter -A INPUT -p tcp --dport 10000 -m state --state NEW --syn -j ACCEPT
#$IPT -t filter -A INPUT -p tcp --dport www -m state --state NEW --syn -j ACCEPT
#$IPT -t filter -A INPUT -p udp --dport domain -j ACCEPT
#=================================================================
#
虚拟服务器
virturl server
#=================================================================
# E-donkey,E-mule to 192.168.0.122
$IPT -t nat -A PREROUTING -p tcp -d $REALIP --dport 4661 -j DNAT --to 192.168.0.122:4661
$IPT -t nat -A PREROUTING -p udp -d $REALIP --dport 4672 -j DNAT --to 192.168.0.122:4672

#------------------------------------------------------------------------
#kuro to 192.168.0.121
$IPT -t nat -A PREROUTING -p tcp -d $REALIP --dport 6699 -j DNAT --to 192.168.0.121:6699

#edonkey to 192.168.0.100
$IPT -t nat -A PREROUTING -p tcp -d $REALIP --dport 14661 -j DNAT --to 192.168.0.100:14661
$IPT -t nat -A PREROUTING -p udp -d $REALIP --dport 14672 -j DNAT --to 192.168.0.100:14672

#edonkey to 192.168.0.100
$IPT -t nat -A PREROUTING -p tcp -d $REALIP --dport 20001 -j DNAT --to 192.168.0.100:20001
$IPT -t nat -A PREROUTING -p udp -d $REALIP --dport 24672 -j DNAT --to 192.168.0.100:24672

#--------------------------------------------------------------------
# E.
由于 INPUT chain Policy 设为
DROP,
#
未被先前 rule 处理的封包至此将被 DROP
.
#

#
开始定义频宽

#========================================================================
#
定义流量管制上传的封包将之Mark起来,所有用户都要设,否则上传管制会失败
#
向核心解释封包样别:

$IPT -I PREROUTING -t mangle -s 192.168.0.100 -j MARK --set-mark 1
$IPT -I PREROUTING -t mangle -s 192.168.0.250 -j MARK --set-mark 2
$IPT -I PREROUTING -t mangle -s 192.168.0.251 -j MARK --set-mark 3
$IPT -I PREROUTING -t mangle -s 192.168.0.252 -j MARK --set-mark 4
$IPT -I PREROUTING -t mangle -s 192.168.0.30 -j MARK --set-mark 5

#bounded
叙述拿掉那么该类别就能够借取其它类别的频宽来用。
# eth0
为上传
# eth1
为下传
#
先清除eth0 eth1 的规则
tc qdisc del dev eth0 root
tc qdisc del dev eth1 root
#tc filter del
#tc filter del dev eth1

#--------------------------------------------------------------------
#
上传部份:eth0
#
上传需配合IPTABLES指令,如增加用户,请一并增加该IP的封包
mark
#
#--------------------------------------------------------------------



#
宣告上传队列戒律

/sbin/tc qdisc add dev eth0 root handle 10: cbq bandwidth 100Mbit avpkt 1000

#
宣告顶层的类别:10:0
/sbin/tc class add dev eth0 parent 10:0 classid 10:1 cbq bandwidth 100Mbit rate 100Mbit allot 1514 weight 40Kbit prio 8 maxburst 20 avpkt 1000 bounded
#/sbin/tc class add dev eth0 parent 10:0 classid 10:2 cbq bandwidth 100Mbit rate 384Kbit allot 1514 weight 40Kbit prio 8 maxburst 20 avpkt 1000


#
宣告客户类别,及其频宽大小

/sbin/tc class add dev eth0 parent 10:1 classid 10:100 cbq bandwidth 384Kbit rate 256Kbit allot 1514 weight 26Kbit prio 5 maxburst 20 avpkt 1000 bounded
/sbin/tc class add dev eth0 parent 10:1 classid 10:110 cbq bandwidth 180Kbit rate 150Kbit allot 1514 weight 15Kbit prio 5 maxburst 20 avpkt 1000 bounded
/sbin/tc class add dev eth0 parent 10:1 classid 10:120 cbq bandwidth 200Kbit rate 128Kbit allot 1514 weight 13Kbit prio 5 maxburst 20 avpkt 1000 bounded
/sbin/tc class add dev eth0 parent 10:1 classid 10:130 cbq bandwidth 200Kbit rate 128Kbit allot 1514 weight 13Kbit prio 5 maxburst 20 avpkt 1000 bounded


#--------------------------------------------------------------------

#
宣告管理队列
/sbin/tc qdisc add dev eth0 parent 10:100 sfq quantum 1514b perturb 15
/sbin/tc qdisc add dev eth0 parent 10:110 sfq quantum 1514b perturb 15
/sbin/tc qdisc add dev eth0 parent 10:120 sfq quantum 1514b perturb 15
/sbin/tc qdisc add dev eth0 parent 10:130 sfq quantum 1514b perturb 15
/sbin/tc qdisc add dev eth0 parent 10:140 sfq quantum 1514b perturb 15

#-----------------------------------------------------------------------
#
核心解释什么样的封包属于什么类别
#prio
为封包之优先级 1为最大,100为最小
/sbin/tc filter add dev eth0 protocol ip parent 10:0 prio 100 handle 1 fw classid 10:100
/sbin/tc filter add dev eth0 protocol ip parent 10:0 prio 100 handle 2 fw classid 10:110
/sbin/tc filter add dev eth0 protocol ip parent 10:0 prio 100 handle 3 fw classid 10:120
/sbin/tc filter add dev eth0 protocol ip parent 10:0 prio 100 handle 4 fw classid 10:130
/sbin/tc filter add dev eth0 protocol ip parent 10:0 prio 100 handle 5 fw classid 10:140
#--------------------------------------------------------------------
#
下载部份:eth1
#--------------------------------------------------------------------

# bounded
叙述拿掉那么该类别就能够借取其它类别的频宽来用。

#
下例为下传:宣告队列戒律
/sbin/tc qdisc add dev eth1 root handle 20: cbq bandwidth 100Mbit avpkt 1000

#
宣告顶层的类别为: 20:0
/sbin/tc class add dev eth1 parent 20:0 classid 20:1 cbq bandwidth 100Mbit rate 100Mbit allot 1514 weight 150Kbit prio 8 maxburst 20 avpkt 1000 bounded
#/sbin/tc class add dev eth1 parent 20:0 classid 20:2 cbq bandwidth 100Mbit rate 100Mbit allot 1514 weight 100Kbit prio 8 maxburst 20 avpkt 1000 bounded
#
宣告客户类别,及其频宽大小


#
下传频宽 最后面加bounded 则不可借频宽
/sbin/tc class add dev eth1 parent 20:1 classid 20:100 cbq bandwidth 2048Kbit rate 1024Kbit allot 1514 weight 102Kbit prio 6 maxburst 20 avpkt 1000
/sbin/tc class add dev eth1 parent 20:1 classid 20:110 cbq bandwidth 1536Kbit rate 800Kbit allot 1514 weight 80Kbit prio 6 maxburst 20 avpkt 1000 bounded
/sbin/tc class add dev eth1 parent 20:1 classid 20:120 cbq bandwidth 1536Kbit rate 800Kbit allot 1514 weight 90Kbit prio 6 maxburst 20 avpkt 1000 bounded
/sbin/tc class add dev eth1 parent 20:1 classid 20:130 cbq bandwidth 1536Kbit rate 800Kbit allot 1514 weight 90Kbit prio 6 maxburst 20 avpkt 1000 bounded
/sbin/tc class add dev eth1 parent 20:1 classid 20:140 cbq bandwidth 1536Kbit rate 800Kbit allot 1514 weight 90Kbit prio 6 maxburst 20 avpkt 1000 bounded




#
宣告管理队列
/sbin/tc qdisc add dev eth1 parent 20:100 sfq quantum 1514b perturb 15
/sbin/tc qdisc add dev eth1 parent 20:110 sfq quantum 1514b perturb 15
/sbin/tc qdisc add dev eth1 parent 20:120 sfq quantum 1514b perturb 15
/sbin/tc qdisc add dev eth1 parent 20:130 sfq quantum 1514b perturb 15
/sbin/tc qdisc add dev eth1 parent 20:140 sfq quantum 1514b perturb 15



#
向核心解释封包样别
/sbin/tc filter add dev eth1 parent 20:0 protocol ip prio 100 u32 match ip dst 192.168.0.100 flowid 20:100
/sbin/tc filter add dev eth1 parent 20:0 protocol ip prio 100 u32 match ip dst 192.168.0.250 flowid 20:110
/sbin/tc filter add dev eth1 parent 20:0 protocol ip prio 100 u32 match ip dst 192.168.0.251 flowid 20:120
/sbin/tc filter add dev eth1 parent 20:0 protocol ip prio 100 u32 match ip dst 192.168.0.252 flowid 20:130
/sbin/tc filter add dev eth1 parent 20:0 protocol ip prio 100 u32 match ip dst 192.168.0.30 flowid 20:140

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