platinum
发表于 2011-07-14 13:19
回复platinum
我那个泛域名匹配主要是为了跟squid的用法一致,所以采用了squid中的机制。(最前面加"."表示泛域名匹配,不加”."表示精确匹配)。瀚海书香 发表于 2011-07-14 13:00 http://bbs.chinaunix.net/images/common/back.gif
GOOD IDEA!
我可以借鉴一下!:D
Godbach
发表于 2011-07-14 17:35
回复 30# platinum
1、学会使用 -N,配合 -g 使用,缓解多条 iptables 语句时的效率低下问题
对,有时候单一的功能,可以考虑新建个链。
BTW,-g 选项我自己也很少用。白金兄介绍个实例啥的。
2、熟知你的网络数据特征,按照策略碰撞概率优先级调整规则排列顺序
3、慎用 -j LOG 记录数据
对,定位问题时可以用。常态不要用
4、能提前阻断的,在数据进入 conntrack 之前把它“办”掉(放在 raw 表中处理)
5、能不开启 conntrack 功能就不要开启
是的。conntrack 毕竟对系统的性能有影响
chenyx
发表于 2011-07-14 22:14
提醒大家需要注意的一些误区:
1、nat 表只匹配一个连接的前几个包(TCP 和 UDP 的实现略有不同),后续数据无法被 nat 表的规则匹配
2、limit 不能防止本机被 DoS 攻击,只能降低本机 CPU 负载
3、不要认为 iptables -t mangle -F 这样的语句就可以清空 mangle 表规则,它的副作用是载入了 mangle hook(nat、raw、filter 表同理)
学习了
ecjtubaowp
发表于 2011-07-14 23:10
学习了。
platinum
发表于 2011-07-15 00:50
回复platinum
BTW,-g 选项我自己也很少用。白金兄介绍个实例啥的。
Godbach 发表于 2011-07-14 17:35 http://bbs.chinaunix.net/images/common/back.gif
比如这样一种逻辑,大家一起讨论一下:
1、如果是 TCP/81 需要打 MARK 999
2、如果是 UDP/80 需要打 MARK 999
3、如果是 NEW 状态却非 SYN 包的 TCP 需要打 MARK 999
4、规则中还有其他策略若干(不考虑 mport 模块的使用)
一般的做法有几种:
第一种,傻瓜式:一个一个平铺直述,虽然不怎么巧妙但可以实现需求
iptables -A INPUT -p tcp --dport 81 -j MARK --set-mark 999
iptables -A INPUT -p udp --dport 80 -j MARK --set-mark 999
iptables -A INPUT --state NEW ! --syn -j MARK --set-mark 999
iptables -A INPUT -p tcp --dport 21 -j DROP
iptables -A INPUT -p udp --dport 53 -j DROP
iptables -A INPUT -p tcp --dport 8080 -j DROP
iptables -A INPUT -p tcp --dport 3128 -j DROP
第二种,函数调用式:将所有同类操作引向一个自定义链,类似一个函数调用
iptables -N SETMARK
iptables A SETMARK -j MARK --set-mark 999
iptables -A INPUT -p tcp --dport 81 -j SETMARK
iptables -A INPUT -p udp --dport 80 -j SETMARK
iptables -A INPUT --state NEW ! --syn -j SETMARK
iptables -A INPUT -p tcp --dport 21 -j DROP
iptables -A INPUT -p udp --dport 53 -j DROP
iptables -A INPUT -p tcp --dport 8080 -j DROP
iptables -A INPUT -p tcp --dport 3128 -j DROP
但是大家有没有发现一个问题:
一和二中对特殊数据 MARK 后,数据包没有终止匹配,仍然继续向下做无用功
第二种情况虽然跳到自定义链里了,但最终没有明确是 ACCEPT 还是 DROP,还会跳回来
因此,我们再使用一种新的思路,在第二种函数式上改动一下
第三种,敢死队式:去了就再也不回来了
iptables -N SETMARK
iptables A SETMARK -j MARK --set-mark 999
iptables -A INPUT -p tcp --dport 81 -g SETMARK
iptables -A INPUT -p udp --dport 80 -g SETMARK
iptables -A INPUT --state NEW ! --syn -g SETMARK
iptables -A INPUT -p tcp --dport 21 -j DROP
iptables -A INPUT -p udp --dport 53 -j DROP
iptables -A INPUT -p tcp --dport 8080 -j DROP
iptables -A INPUT -p tcp --dport 3128 -j DROP
chenyx
发表于 2011-07-15 08:48
还真没用过-g,原来是这个意思,匹配之后就不向下走了.这个应该类似于-j RETURN吧,只不过return要在每一个不需要向下匹配的规则都添加一次
haha_yong
发表于 2011-07-15 09:12
好帖子!
瀚海书香
发表于 2011-07-15 09:26
回复 35# platinum
还真没用过这个-g参数,有空也测试一下。。。
platinum
发表于 2011-07-15 09:53
还真没用过-g,原来是这个意思,匹配之后就不向下走了.这个应该类似于-j RETURN吧,只不过return要在每一个不需 ...
chenyx 发表于 2011-07-15 08:48 http://bbs.chinaunix.net/images/common/back.gif
不是类似 -j RETURN,恰好说反了
默认 -j 到自定义链的话,最后结束后会自动 RETURN 回来
-g 结束就结束了
Godbach
发表于 2011-07-15 10:02
回复 35# platinum
白金兄,你这里的描述,并没有明确提出,打过 mark 的就不需要往下匹配了啊
比如这样一种逻辑,大家一起讨论一下:
1、如果是 TCP/81 需要打 MARK 999
2、如果是 UDP/80 需要打 MARK 999
3、如果是 NEW 状态却非 SYN 包的 TCP 需要打 MARK 999
4、规则中还有其他策略若干(不考虑 mport 模块的使用)
我刚才看了 xt_mark 的实现,打完标记就是 XT_CONTINUE,也就是人家继续往下匹配是正确的,除非你不希望打完标记的数据包,继续匹配其他规则,
不知道我的理解是否正确
页:
1
2
3
[4]
5
6
7
8
9
10
11
12