免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1566 | 回复: 5
打印 上一主题 下一主题

[网络管理] 学习iptables困惑 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-03-16 22:50 |只看该作者 |倒序浏览
最近看了些iptables的资料,但存在一些不明白的地方,请大侠指教
-->PREROUTING-->[ROUTE]-->FORWARD-->POSTROUTING-->
     mangle        |       mangle        ^ mangle
      nat          |       filter        |  nat
                   |                     |
                   |                     |
                   v                     |
                 INPUT                 OUTPUT
                   | mangle              ^ mangle
                   | filter              |  nat
                   v ------>local------->| filter


1、mangle表说是对数据包进行修改,如tos ttl,在netfilter的5个hook函数中每个地方都可以调用mangle表,到底有什么用途呢,一般什么规则要加到mangle表呢?
2、在OUTPUT那,nat做什么用呢,dnat?
3、在用layer7过滤时,我看举的例子(http://l7-filter.sourceforge.net/L7-HOWTO-Netfilter#patching)都是在mangle表的POSTROUTING里加的规则,有什么原因要加在这么?


[ 本帖最后由 platinum 于 2006-3-17 01:16 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-03-16 23:30 |只看该作者
請看這個圖比較清楚:



出處是 http://ebtables.sourceforge.net/br_fw_ia/bridge3b.png

mangle table 是特殊用途,一般常用於封包加入標籤使用等項目。目前最多使用在 iptables 內有包含 TOS/TTL/MARK 等項目調整配置。

至於你說 LOCAL 出去,OUTPUT chain 於 nat table 也有該項目的用途其實很多。比方您這樣使用:

  1. iptables -A OUTPUT -t nat -p tcp --dport 80 -d 1.2.3.4 -j DNAT --to 6.7.8.9:80
复制代码


本機出去封包的確是可以 DNAT 配置使用。

至於你說的 l7-filter project 的東西,我想您大概是看錯意思了。因為裡面談到像是:

  1. iptables -t mangle -A POSTROUTING -m layer7 --l7proto imap -j MARK --set-mark 3
复制代码


那是因為要封包標示,要使用 -j MARK 當然得放在 mangle table 設定。

==

[ 本帖最后由 kenduest 于 2006-3-16 23:38 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2006-03-17 01:35 |只看该作者
原帖由 stankeeper 于 2006-3-16 22:50 发表
1、mangle表说是对数据包进行修改,如tos ttl,在netfilter的5个hook函数中每个地方都可以调用mangle表,到底有什么用途呢,一般什么规则要加到mangle表呢?

mangle 表是用来修改数据的,一般只有需要修改数据时才会用到 mangle 表
虽然 mangle 表有 PREROUTING、POSTROUTING、INPUT、FORWARD、OUTPUT 这五个链,但是还是应该说“专表专用”
NAT 部分在 nat 表里做
过滤部分在 filter 表里做
要修改数据包内容的时候在 mangle 表里做

2、在OUTPUT那,nat做什么用呢,dnat?

从框架图里也可以看出来,INPUT 和 OUTPUT 连接的都是 local,也就是主机本身
INPUT 是进入主机的数据,OUTPUT 是从主机本身出来的数据
nat 后的数据经过 filter 表的 FORWARD 链,与 INPUT 和 OUTPUT 无关,因为目的和源都不是“local”

NAT 是网络地址转换,为了解决 IP 地址不够用的问题,或者做地址伪装
SNAT 是 Source NAT,即源地址转换,用于修改数据包的来源地址,变更数据包的来源
DNAT 是 Destination NAT,即目的地址转换,用于修改数据包的目的地址,变更数据包的投送目的

3、在用layer7过滤时,我看举的例子(http://l7-filter.sourceforge.net/L7-HOWTO-Netfilter#patching)都是在mangle表的POSTROUTING里加的规则,有什么原因要加在这么?

PREROUTING 是最先进入主机的
POSTROUTING 是最后离开主机的
其实在哪个位置加都可以,可能考虑到中间有个 FORWARD,所以如果中间有 DROP 的话,数据包就轮不到后面的 POSTROUTING 处理了,比直接放到 PREROUTING 省一些资源吧

论坛徽章:
0
4 [报告]
发表于 2006-03-17 09:55 |只看该作者
谢谢两位
不过一般不都是在filter表里做过滤么
iptables -t mangle -A POSTROUTING -m layer7 --l7proto http -j DROP
不就相当于在mangle里过滤了啊

论坛徽章:
0
5 [报告]
发表于 2006-03-17 10:00 |只看该作者
原帖由 stankeeper 于 2006-3-17 09:55 发表
谢谢两位
不过一般不都是在filter表里做过滤么
iptables -t mangle -A POSTROUTING -m layer7 --l7proto http -j DROP
不就相当于在mangle里过滤了啊

是的,虽然在 mangle 表的 FORWARD 和 POSTROUTING 链都可以进行过滤
但是我想说
“专表专用”和“专链专用”
mangle 表不是为过滤而设计的
POSTROUTING 链也不是为过滤而设计的
虽然他们都能达到阻断的效果,但是不推荐在不是专用的表和链里面写规则
为什么呢?要看源代码了,每个 hook 的优先级都不同,且不同的链有不同的特性
若规则很多,体系很庞大,你这样会出问题
而且,这样做效率也不高,因为不是“专用”

论坛徽章:
0
6 [报告]
发表于 2006-03-17 10:25 |只看该作者
原帖由 platinum 于 2006-3-17 10:00 发表

是的,虽然在 mangle 表的 FORWARD 和 POSTROUTING 链都可以进行过滤
但是我想说
“专表专用”和“专链专用”
mangle 表不是为过滤而设计的
POSTROUTING 链也不是为过滤而设计的
虽然他们都能达到阻断的效 ...


这下子终于明白为什么要“专表专用”和“专链专用”

多谢多谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP