免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 瀚海书香

CU线上连载讨论一 Linux iptables使用问题和内核Netfilter流程 [复制链接]

论坛徽章:
0
发表于 2011-07-14 13:19 |显示全部楼层
回复  platinum
我那个泛域名匹配主要是为了跟squid的用法一致,所以采用了squid中的机制。(最前面加"."表示泛域名匹配,不加”."表示精确匹配)。瀚海书香 发表于 2011-07-14 13:00



GOOD IDEA!
我可以借鉴一下!

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
发表于 2011-07-14 17:35 |显示全部楼层
回复 30# platinum

1、学会使用 -N,配合 -g 使用,缓解多条 iptables 语句时的效率低下问题

对,有时候单一的功能,可以考虑新建个链。
BTW,-g 选项我自己也很少用。白金兄介绍个实例啥的。

2、熟知你的网络数据特征,按照策略碰撞概率优先级调整规则排列顺序
3、慎用 -j LOG 记录数据

对,定位问题时可以用。常态不要用

4、能提前阻断的,在数据进入 conntrack 之前把它“办”掉(放在 raw 表中处理)
5、能不开启 conntrack 功能就不要开启

是的。conntrack 毕竟对系统的性能有影响

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
发表于 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 表同理)

学习了

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
发表于 2011-07-14 23:10 |显示全部楼层
学习了。

论坛徽章:
0
发表于 2011-07-15 00:50 |显示全部楼层
回复  platinum
BTW,-g 选项我自己也很少用。白金兄介绍个实例啥的。
Godbach 发表于 2011-07-14 17:35


比如这样一种逻辑,大家一起讨论一下:
1、如果是 TCP/81 需要打 MARK 999
2、如果是 UDP/80 需要打 MARK 999
3、如果是 NEW 状态却非 SYN 包的 TCP 需要打 MARK 999
4、规则中还有其他策略若干(不考虑 mport 模块的使用)

一般的做法有几种:
第一种,傻瓜式:一个一个平铺直述,虽然不怎么巧妙但可以实现需求

  1. iptables -A INPUT -p tcp --dport 81 -j MARK --set-mark 999
  2. iptables -A INPUT -p udp --dport 80 -j MARK --set-mark 999
  3. iptables -A INPUT --state NEW ! --syn -j MARK --set-mark 999
  4. iptables -A INPUT -p tcp --dport 21 -j DROP
  5. iptables -A INPUT -p udp --dport 53 -j DROP
  6. iptables -A INPUT -p tcp --dport 8080 -j DROP
  7. iptables -A INPUT -p tcp --dport 3128 -j DROP
复制代码
第二种,函数调用式:将所有同类操作引向一个自定义链,类似一个函数调用

  1. iptables -N SETMARK
  2. iptables A SETMARK -j MARK --set-mark 999
  3. iptables -A INPUT -p tcp --dport 81 -j SETMARK
  4. iptables -A INPUT -p udp --dport 80 -j SETMARK
  5. iptables -A INPUT --state NEW ! --syn -j SETMARK
  6. iptables -A INPUT -p tcp --dport 21 -j DROP
  7. iptables -A INPUT -p udp --dport 53 -j DROP
  8. iptables -A INPUT -p tcp --dport 8080 -j DROP
  9. iptables -A INPUT -p tcp --dport 3128 -j DROP
复制代码
但是大家有没有发现一个问题:
一和二中对特殊数据 MARK 后,数据包没有终止匹配,仍然继续向下做无用功
第二种情况虽然跳到自定义链里了,但最终没有明确是 ACCEPT 还是 DROP,还会跳回来
因此,我们再使用一种新的思路,在第二种函数式上改动一下

第三种,敢死队式:去了就再也不回来了

  1. iptables -N SETMARK
  2. iptables A SETMARK -j MARK --set-mark 999
  3. iptables -A INPUT -p tcp --dport 81 -g SETMARK
  4. iptables -A INPUT -p udp --dport 80 -g SETMARK
  5. iptables -A INPUT --state NEW ! --syn -g SETMARK
  6. iptables -A INPUT -p tcp --dport 21 -j DROP
  7. iptables -A INPUT -p udp --dport 53 -j DROP
  8. iptables -A INPUT -p tcp --dport 8080 -j DROP
  9. iptables -A INPUT -p tcp --dport 3128 -j DROP
复制代码

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
发表于 2011-07-15 08:48 |显示全部楼层
还真没用过-g,原来是这个意思,匹配之后就不向下走了.这个应该类似于-j RETURN吧,只不过return要在每一个不需要向下匹配的规则都添加一次

论坛徽章:
0
发表于 2011-07-15 09:12 |显示全部楼层
好帖子!

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
发表于 2011-07-15 09:26 |显示全部楼层
回复 35# platinum
还真没用过这个-g参数,有空也测试一下。。。

论坛徽章:
0
发表于 2011-07-15 09:53 |显示全部楼层
还真没用过-g,原来是这个意思,匹配之后就不向下走了.这个应该类似于-j RETURN吧,只不过return要在每一个不需 ...
chenyx 发表于 2011-07-15 08:48


不是类似 -j RETURN,恰好说反了

默认 -j 到自定义链的话,最后结束后会自动 RETURN 回来
-g 结束就结束了

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
发表于 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,也就是人家继续往下匹配是正确的,除非你不希望打完标记的数据包,继续匹配其他规则,

不知道我的理解是否正确
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP