瀚海书香 发表于 2011-07-18 14:10

回复 49# Godbach
如果说只是一条规则来说,应该是差不多的。但是如果具体到应用的话,string就有些力不从心了。
比如匹配baidu.com这个网站下所有的网站,那么你用字符串匹配的话,就无法利用from和to做到非常精确,因为你需要匹配:www.baidu.com,tingting.mp3.baidu.com,tieba.baidu.com,bj.map.baidu.com.....;这个时候你就只能是模糊的匹配baidu.com,而且这个范围就不能做到精确了。如果使用domain模块的话,可以直接定位到dns查询的请求的最后进行匹配baidu.com。

Godbach 发表于 2011-07-18 18:05

回复 51# 瀚海书香
能否直接用命令写出来这两者的区别。
你的这个举例,我没怎么搞清楚。

瀚海书香 发表于 2011-07-19 11:14

本帖最后由 瀚海书香 于 2011-07-19 14:45 编辑

回复 52# Godbach
还是实例比较好一些:

禁止访问*.baidu.com的域名.

string模块: iptables -m string --hex-string "|05|baidu|03|com" --from 40 --to 200 -j DROP   //由于需要匹配所有以baidu.com结尾的域名,from和to无法非常精确,只能是一个大体的范围

domain模块: iptables -m domain --hex-string ".baidu.com" -j DROP

Godbach 发表于 2011-07-19 14:28

回复 53# 瀚海书香
这两条规则都用了 string 匹配,是笔误吗

其次,我觉得首先决定匹配效率的是起始位置,这个位置如果指定好了,那么对于可以命中的查找的速度应该和你的实现是一样的吧。
对于不能命中的,那么就看 --to 写多大了。你的 domain 模块是会判断域名的结束位置,对吧。

瀚海书香 发表于 2011-07-19 14:47

回复 54# Godbach
上面的回复的确是笔误。

domain模块可以直接到最后进行比较是否是“baidu|03|com”
string模块需要进行模糊匹配。

renxiao2003 发表于 2011-07-19 19:23

使用iptables来做IP转发,需要配置两块以上的网卡。单块网卡不可以吧。
我曾经用iptables配置过限制,结果一不小心把自己搞到服务器外了。呵呵 。

chenyx 发表于 2011-07-19 21:23

回复 56# renxiao2003


    应该是iptables不支持子接口吧.
    把自己弄到服务器外我也弄过

瀚海书香 发表于 2011-07-20 08:09

回复 56# renxiao2003
不知道你是怎么配置的啊?

单网卡机器可以配置做网关模式是ip转发的。
比如一个网卡eth0:
ifconfig eth0 192.168.0.1
ifconfig eth0:1 202.102.xxx.xxx
通过iptables的snat可以实现对内部192.168.0.0/24的ip数据包转发的。

yuhongchun 发表于 2011-07-20 11:03

使用iptables来做IP转发,需要配置两块以上的网卡。单块网卡不可以吧。
我曾经用iptables配置过限制,结果 ...
renxiao2003 发表于 2011-07-19 19:23 http://bbs.chinaunix.net/images/common/back.gif

这问题我也多次遇到,后来采用如下方法解决,特推荐给广大的cuer们:

      防火墙初始化前,可以配置一计划任务crontab,每5分钟运行一次,即*/5 * * * * root /bin/sh /root/firestop.sh,firestop.sh内容为: service iptables stop;这样即使你的脚本存在错误设置(或丢失的)规则时,也不至于将你锁在计算机外而无法返回与计算机的连接,让你放心大胆的调试你的脚本,同学们可参考学习下,这毕竟是生产环境下逼出来的办法~

Godbach 发表于 2011-07-20 11:35

回复 55# 瀚海书香
嗯,我粗略的看了一下你的实现,明白了你的匹配算法。

不过,通过 strlen 来判断域名的长度,还是多少有一些风险的,如果攻击者不给你 '\0' 的话,你这个 strlen 的结果会是多少的
页: 1 2 3 4 5 [6] 7 8 9 10 11 12
查看完整版本: CU线上连载讨论一 Linux iptables使用问题和内核Netfilter流程