起草于, 05/13/2003
Edward Balas
Advanced Network Management Lab
印第安纳大学
中文版权归包子所有,欢迎转载,请保留翻译者信息
郑州大学网络安全园
摘要
本文讨论的是限制每个honeypot的带宽的方法,主要涉及FreeBSD下的Dummynet,linux下的Advanced Routing and Traffic Control, Cisco的Committed Access Rate(CAR)和Juniper的Traffic Policing.以下的例子都假设在一个路由或者交换设备的后面建立了一个honeynet,并且Linux,Cisco和Juniper的例子并没有经过完全的测试,请根据你的环境自行修改。
动机
当我们定制一个蜜罐的时候,我们面临着种种危险,尤其令人担心的就是被人拿来当作发动拒绝服务攻击的肉鸡,正是为了减轻这种危险,我们才有了下面的讨论。
你的选择
在带宽控制上你或许有很多选择,但是最基本的就是在honeynet中使用半双工的10M网卡,至于软件方面,你可以尽你所能的做出种种限制。但是最好还是软硬件方法一起使用,因为当软件出现种种问题的时候,硬件的极限可以减低你的损失。下面我们介绍四个解决方案,其中两个是基于FreeBSD和Linux的,另外两个是基于路由器的。
FreeBSD Dummynet
Dummynet是由Luigi Rizzo开发用来测试网络协议的FreeBSD系统工具,管理员可以用他来创建虚拟的通道,并且可以为这些通道指定一些包括带宽在内的属性,当使用Dummynet的时候,你的FreeBSD系统就扮演着一个交换机或者路由器的角色。
配置
在这个例子中我们使用FreeBSD系统作为防火墙,并且fxp0接口是外网口,而fxp1是内网口或者honeynet接口。下面我们使用ipfw命令来配置防火墙
ipfw add pipe 1 ip from any to any in via fxp1
ipfw add pipe 2 ip from any to any in via fxp0
ipfw pipe 1 config mask src-ip 0xffffffff bw 128kbits/s
ipfw pipe 2 config mask dst-ip 0xffffffff bw 128kbits/s
上面的配置限制了fxp1下面的系统的传输速率最大是128kbits/s,前面的两行告诉FreeBSD什么流量应该被发送到哪个通道,第三四行告诉Dummynet虚拟通道的配置
我们对通道1做了基于源IP地址的最大速率是128kbits/s的控制。通道2和通道1相似,但是是针对目标地址的速率限制,我们之所以需要两个通道是因为我们正在建立一个全双工的连接,就是说每个方向(进和出)的流量都占用一条通道。
使用他你不需要重新配置honeypots的IP地址,而且经过长时间测试,Dummynet的稳定性也是很不错的。
Linux Traffic Control
Linux的 Traffic Control support可以用来做普通的流量控制,他需要针对每个honeypot做配置,而且他不能用在VMWARE模拟的系统中,你可以考虑使用hogwash来满足你的需求。
配置
在这个例子中,假设他的环境和上面FreeBSD的环境相似,eth0是外网口,而eth1连接到honeynet。
!----- 并没经过测试
#-- 第一步 -----
tc qdisc add dev eth0 root handle 0: htb default 0:3
#-- 第二步 -----
tc class add dev eth0 parent 0: classid 0:1 htb rate 128kbit ceil 128kbit
tc class add dev eth0 parent 0: classid 0:2 htb rate 128kbit ceil 128kbit
tc class add dev eth0 parent 0: classid 0:3 htb rate 10Mbit ceil 10Mbit
#-- 第三步 -----
tc filter add dev eth0 protocol ip parent 0:0 prio 1 u32
match ip dst 10.0.0.1 flowid 0:1
tc filter add dev eth0 protocol ip parent 0:0 prio 1 u32
match ip dst 10.0.0.2 flowid 0:2
#-- 针对其他方向做相应的重复配置 -----
tc qdisc add dev eth1 root handle 1: htb default 1:3
tc class add dev eth1 parent 1: classid 1:1 htb rate 128kbit ceil 128kbit
tc class add dev eth1 parent 1: classid 1:2 htb rate 128kbit ceil 128kbit
tc class add dev eth1 parent 1: classid 1:3 htb rate 10Mbit ceil 10Mbit
tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32
match ip src 10.0.0.1 flowid 1:1
tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32
match ip src 10.0.0.2 flowid 1:2
在本例中我们限制了每个方向的流量,我们的动作有:
为root创建了一个有序的队列
定义了root使用的级别,这里的级别相当于上面的FreeBSD的例子中的管道
为每个级别又加以分类定义其流量
Cisco的 CAR
Committed Access Rate,也就是CAR,他一般都包含在现在主流的CISCO ISO中,IPS常常使用他来为客户做子速率服务(sub-rate service),比如一个客户使用GB的以太网接口接如ISP,但是只申请了500M的带宽。CAR也可以用来为每个主机做速率限制,但是他的缺点和Linux的方案一样,需要针对每个主机进行相应的设置。
!----- 并没经过测试
interface eth0/0
rate-limit input access-group 1 128000 0 0
conform-action transmit exceed-action drop
rate-limit output access-group 2 128000 0 0
conform-action transmit exceed-action drop
rate-limit input access-group 3 128000 0 0
conform-action transmit exceed-action drop
rate-limit output access-group 4 128000 0 0
conform-action transmit exceed-action drop
!
access-list 1 permit ip from 10.0.0.1 to any
access-list 2 permit ip from any to 10.0.0.1
access-list 3 permit ip from 10.0.0.2 to any
access-list 4 permit ip from any to 10.0.0.2
在上面的例子里,我们编辑了eth0/0接口并做了下面的设置:
启用速率限制的方向
访问组的设置
平均流量(BPS)
突发流量(BPS)
最大流量(BPS)
接着,我们在访问列表中定义那些需要限制速率的单元,如果你需要限制每一个主机,你必须做重复的配置
Juniper的 Traffic Policing
Junipers Policer,同样需要定义每个主机,但是他和CISCO的方案相比的好处就是他可以和Circuit Cross-Connect一起使用以令他不会减少TTL,这就意味着入侵者使用traceroute不能发现他的存在,这增加了蜜罐网络的真实性。
!------ 并没经过测试 ------
[edit]
firewall{
family inet {
!-- 第一步 -----
policer 128k-pipe {
if-exceeding{
bandwidth-limit 128k;
burst-size-limit 0k;
} then {
discard;
};
!-- 第二步 -----
filter number1 {
!-- 第三步 -----
term 1 {
destination-address 10.0.0.1/32
} then {
policer 128k-pipe;
accept;
}
term 2{
destination-address 10.0.0.2/32
} then {
policer 128k-pipe;
accept;
}
}
filter number2 {
term 1 {
source-address 10.0.0.1/32
} then {
policer 128k-pipe;
accept;
}
term 2{
source-address 10.0.0.2/32
} then {
policer 128k-pipe;
accept;
}
}
[edit interfaces]
eth-0/0/0 {
unit 0{
family inet{
!-- 第四步 -----
filter {
input number1;
output number2;
}
}
}
在Juiper的配置中,我们做了:
在防火墙配置中我们定义了速率限制
为每个方向设置了一个过滤器
在每个过滤器中添加相应的主机
--------------------------------------------------------------------------------
总结
下面对以上四种方案的几个方面做了些对比,看起来基于FreeBSD的的方案是最好的
解决方案 FreeBSD Linux Juniper Cisco
容易配置 YES NO NO NO
没有TTL衰减 YES YES YES NO
为每个主机配置 NO YES YES YES
--------------------------------------------------------------------------------
偶感觉上面的方案都只是针对防止POT向外发动洪水攻击的
而snort-inline+iptables则添加了修改或丢弃其他的一些攻击代码的功能,更加好 |