瀚海书香
发表于 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