论坛风格切换切换到宽版
  • 887阅读
  • 7回复

[问题求助]l7协议QQ过滤与重向的问题 [复制链接]

上一主题 下一主题
离线zh0407.
 
发帖
2064
C币
-313930
威望
388
贡献值
2
银元
-1
铜钱
4634
人人网人气币
0
只看楼主 倒序阅读 使用道具 楼主  发表于: 2009-05-01
我的做发是这样的:
      我在mangle的PREROUTING里写了个QQ的L7规则,把匹配到的QQ数.据包打上.一个MARK,在POSTROUTING中把打上QQ的MARK数据包DROP掉,只是这些规则都能.正常过滤。.但是在我的系统中还有HTTP的应用代理,为了做到透明代理,我把TCP 80端口重定向到本地,在代理程序中,我会把iptable打的MARK写回到数据包中。但.是出现这样一种情况,重定向起来后,QQ走TCP 80端口时,QQ的数据包L7就匹配.不到了,我在代理程序中就读不到MARK,QQ可以通过80端口正常登陆!(广告)

     请教各.位高手,谁.能给予指点迷津,谢谢!!!    美容

我来回答



评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
离线dyy0214.
发帖
2060
C币
-60444
威望
372
贡献值
1
银元
0
铜钱
4565
人人网人气币
0
只看该作者 沙发  发表于: 2010-04-13
1、没有必要在PREROUTING链打标记,再在POSTROUTING链丢弃,多次一举。直接不打标记丢弃就可以了。
2、iptable打的MARK写回到数据包中这句是什么意思,代理程序怎么能够处理IPTABLES打过MARK的包,具体的代理程序是哪个。如果是SQUID我有办法。


离线b88954966.
发帖
1978
C币
-235378
威望
361
贡献值
1
银元
-4
铜钱
4576
人人网人气币
0
只看该作者 板凳  发表于: 2010-04-13
1、上面为了说的简单点,所以说是POSTROUTING里DROP,我的系统真正是在FORWARD或OUTPUT里DROP(根据MARK),至于为什么没有在PREROUTING DROP,跟我的系统架构有关系。
2、代理程序只是个自己写的一个简单代理程序(做URL和病毒过滤),通过函数getsockopt(socket, SOL_SOCKET, 91, &nf_mark, (socklen_t *)&marksize)把IPTABLES打的标读出来(需要内核支持)。通过setsockopt,这些我都测试过没问题的。
3、现在的问题是重定向之后,TCP 80的QQ数据包L7匹配不成功


离线wjx79979.
发帖
2074
C币
-193461
威望
338
贡献值
1
银元
-7
铜钱
4611
人人网人气币
0
只看该作者 地板  发表于: 2010-04-13
mark 有两种,一种是数据包的 mark,另一种是 connection 的 mark,你做的是前者
mark 不是数据包特有的东西,它是定义在 sk_buff 结构体中的一个元素,与 TTL 和 TOS 不同,它的数值不会通过网络传输到其他环境里,mark 值只在本地网络协议栈有效
因此,你前面说的转到代理以后,代理看不到 mark 值,是正常现象


离线kawayiyi.
发帖
2126
C币
-60558
威望
397
贡献值
1
银元
-2
铜钱
4789
人人网人气币
0
只看该作者 4楼 发表于: 2010-04-13
QQ走TCP 80端口时,QQ的数据包L7就匹配不到了

谁说的,翻翻以前的帖子~


离线justinfull.
发帖
2077
C币
-60720
威望
374
贡献值
1
银元
-6
铜钱
4673
人人网人气币
0
只看该作者 5楼 发表于: 2010-04-13
SQUID禁止,CONNECT方法可以防止SQUID做数据传输类的代理,你可以参考一下.


发帖
2021
C币
-235653
威望
381
贡献值
1
银元
-1
铜钱
4484
人人网人气币
0
只看该作者 6楼 发表于: 2010-04-13
我做过实验,iptables打的mark通过getsockopt(socket, SOL_SOCKET, 91, &nf_mark, (socklen_t *)&marksize)是可以读到的(需内核支持)


离线szboy.
发帖
2033
C币
-140722
威望
373
贡献值
1
银元
-1
铜钱
4432
人人网人气币
0
只看该作者 7楼 发表于: 2010-04-13


QUOTE:原帖由 mackon_jong 于 2007-4-6 01:17 发表于 7楼  
我做过实验,iptables打的mark通过getsockopt(socket, SOL_SOCKET, 91, &nf_mark, (socklen_t *)&marksize)是可以读到的(需内核支持)

如果你 MARK 之后 DNAT 到另一台你的“代理”,然后你的“代理机”去读取 MARK 也能读到吗?


快速回复
限100 字节
如果您在写长篇帖子又不马上发表,建议存为草稿
 
上一个 下一个