Chinaunix首页 | 论坛 | 博客
  • 博客访问: 620901
  • 博文数量: 43
  • 博客积分: 4250
  • 博客等级: 上校
  • 技术积分: 486
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-04 04:09
文章分类
文章存档

2009年(2)

2008年(5)

2007年(29)

2006年(7)

我的朋友

分类: LINUX

2007-05-12 22:30:16


iptables -A FORWARD -i LAN1 -s  LANNET/NETMASK -m recent --set (用来确定那些ip段要动态限制)
 
上面的命令实现了LAN上正在连线的ip的当前列表。当第一次包通过时,在/proc/net/ipt_recent/DEFAULT下记录信息。以后有后续包
时改写last_seen的时间值。
 
cat /proc/net/ipt_recent/DEFAULT
 
查看当前的记录。记录类似于
src=192.168.0.1  ttl: 127 last_seen: 4322325954 oldest_pkt: 1 last_pkts: 4322325954
 
src描述源ip地址,last_seen是最后此ip地址发包的时间值(jiffies) 我们用到的就是这两项。
好了,现在有了这些基础,那么动态tc的实现就没有问题了。
下面就是写一个shell用crontabl来定时更新tc记录了。要做有以下几点.
1.在shell中判断是否存在/etc/dytc。
2. 在shell中,用以下命令生成/etc/dytc.temp
cat /proc/net/ipt_recent/DEFAULT | awk '{print substr($1,5)}" "$5' > /etc/dytc.temp
记录本次更新时的ip和时间.
3.根据src确定有那些ip最近在线,通过与/etc/dytc比对确定是否已经添加tc策略.根据last_seen加自定义的TCTIMEOUT来确定,是否
从/proc/net/ipt_recent/DEFAULT和tc策略中删除长时间未连接的ip.
(/etc/dytc.temp)last_seen值+TCTIMEOUT>(/etc/dytc.temp)ast_seen值时则执行相关tc策略删除工作.
echo   -*.*.*.*   >  /proc/net/ipt_recent/DEFAUTLT
tc的省略。
若是第一次无/etc/dytc则直接添加tc策略.
4.完成本次更新.
cp -fpv /etc/dytc.temp /etc/dytc
至此,动态tc每ip完成。
 
附:(注意事项)
1.recent模块有以下几个参数。不多解释了。
       ip_list_tot=100
              Number of addresses remembered per table
       ip_pkt_list_tot=20
              Number of packets per address remembered
       ip_list_hash_size=0
              Hash table size. 0 means to calculate it based on ip_list_tot,default: 512
       ip_list_perms=0644
              Permissions for /proc/net/ipt_recent/* files
2.last_seen的时间值在32位机器和64位机器的不同,timeout根据实际情况自行决定。
 
3.recent模块--name选项可以用来区分不同的tc策略.
 
本想写一个现成的脚本给大家。不过喝酒归来,实在是不想动。抱谦,抱谦。
阅读(4859) | 评论(3) | 转发(1) |
给主人留下些什么吧!~~

wysilly2008-01-08 18:05:29

能实现的.你可以研究一下recent模块.巧妙的利用此模块,可以做很多事情

chinaunix网友2008-01-08 10:23:27

用iptables的-m recent 能实现么? 还是不太明白。。