免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: Godbach
打印 上一主题 下一主题

[欢迎进入讨论] 关于syn-proxy的一些问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-03-16 13:43 |显示全部楼层
原帖由 独孤九贱 于 2009-3-16 13:38 发表
楼上的,你让给服务器的syn请求穿过netfilter连接跟踪表(事实上,如何是使用netfilter的状态跟踪,而不是自己来实现,也应该这样做),这个信息不就有地方存储了吗?

对哦。我对这个conntrack不熟悉。
多谢!

论坛徽章:
0
12 [报告]
发表于 2009-03-16 15:06 |显示全部楼层
原帖由 Godbach 于 2009-3-16 14:24 发表


采用syncookie + conntrack机制的话,个人觉得流程如下可以:
采用syncookie + conntrack机制的话,个人觉得流程如下可以:
(1)在PREROUTING处conntrack前注册syncookie的hook函数。fw完成处理和client端SYN三次握手,同时保存初始的SYN包,并记录cookie值。经过验证之后,将保存的SYN包发给server。
(2)fw发给server的syn包经过conntrack,新建一个conntrack表项,并在报文离开fw时加入连接跟踪表。这里如何获取cookie的值,让(1)模块中提供函数吗?

我觉得(2)可以在(1)中完成。在拦截到client发来的ack包的时候。

论坛徽章:
0
13 [报告]
发表于 2009-03-16 15:15 |显示全部楼层
原帖由 Godbach 于 2009-3-16 15:11 发表


拦截到ACK的时候,fw应该是将原先保留的SYN包发出去,然后这个SYN包就会进入conntrack进行处理了。按理说这个时候新建了conntrack,应该让conntrack记录下之前的cookie值了。

cookie值在client的ack包里有啊。

论坛徽章:
0
14 [报告]
发表于 2009-03-16 15:31 |显示全部楼层
可能我有什么没考虑到。
不能在接收到client的ack包的地方建立conntrack表项吗?

论坛徽章:
0
15 [报告]
发表于 2009-03-17 10:31 |显示全部楼层
我的一点思路:
In PRO Routing Hook
if(is syn from client)
{
   截获syn包,发送syn+ack
}
if(is ack from client)
{
  截获ack包,验证cookie,注册ip conntrack(其中有cookie值和syn),向server发送syn包
}
if(is syn+ack from server)
{
  截获syn+ack包,发送ack包。更新差值
}

论坛徽章:
0
16 [报告]
发表于 2009-03-17 10:40 |显示全部楼层
不知道Godbach兄有没有考虑伪造包丢失的问题。
如果由于网路问题,client或sever没有收到,是否得考虑重发。給client发的syn+ack包可能没有问题,因为client会继续发送syn包。而由fw伪造的发给server的syn包和ack包,似乎需要考虑这个问题。

论坛徽章:
0
17 [报告]
发表于 2009-03-17 10:55 |显示全部楼层
还有就是资源回收的问题了。比如ip conntrack的注销。

论坛徽章:
0
18 [报告]
发表于 2009-04-10 17:43 |显示全部楼层
动手做了一下。现在已经完成抓包发包,cookie部分。还差连接维护部分。

论坛徽章:
0
19 [报告]
发表于 2009-04-10 19:11 |显示全部楼层
原帖由 Godbach 于 2009-4-10 18:59 发表
恩。我前一段也想做呢,结果工作太忙了。richardhesidu兄是怎么实现的?

发包是netfilter的pre routing,自己构造相应包。内核的算cookie函数接口没有导出,所以不能用。把内核代码拿来改,也不是很难。连接管理我打算用netfilter的ip_conntrack。规则设置用类似iptables的方法,用netlink。用户态再写一个类似iptables的程序来设置。

论坛徽章:
0
20 [报告]
发表于 2009-04-13 11:43 |显示全部楼层
原帖由 clusterlee 于 2009-4-12 22:10 发表
richardhesidu 兄的规则应该是用来 控制对哪些包进行 proxy的吧。

还有建议不用conntrack做连接维护,conntrack 的效率不是很高,如果使用proxy 做防火墙的话,最好采用高效的数据结构,可以参考现有的IP 流 ...

是的,用来设置地址,端口,最大半开连接数,半开连接超时时间。

我也怀疑ip conntrack的效率,现阶段先实现再说,不行的话再换其他算法。

我用NF_HOOK(PF_INET, NF_IP_LOCAL_OUT, skb, NULL, nskb->dst->dev, dst_output);
发包。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP