Linux 版 (精华区)

发信人: lofe (〖感激生活Θ垃圾桶〗), 信区: Linux
标  题: IPtable 1.0.7指南(二) 
发信站: 哈工大紫丁香 (2001年12月11日13:45:21 星期二), 站内信件

真正开始伪装 
我们第一个任务就是开始真正的伪装,是吗?至少对我是这样的。首先我们向
nat table添加一条规则,在POSTROUTING 链上,该规则将伪装出自我们与
Internet连接的接口的所有包。对我来说这是eth0,-t 告诉我们用哪个表,在这
种情况下是nat,-A 告诉我们,我们将在一个叫做POSTROUTING 的已存在链上加一
个新规则,-o eth0 告诉我们匹配eth0 上的所有流出包,我们最后的目标是伪装
包。所有与这条规则匹配的包都被伪装,看起来象来自你的Internet 接口。很简
单,是吗? 
下一步是接收所有来自输入接口eth1 的并通过默认表过滤器中的FORWARD链的包,
eth1是与内部网络连接的接口。所有在我们网络设备被传送的包都将穿过过滤器表
中的FORWARD 链。 
下一件事是接收所有来自任何地方的建立或关联某个连接的包。换句话说,在
eth1后我们先在本地网络设备发送一个包,因为它来自eth1, 所以我们接收它,然
后当Internet 网络设备应答的时候,它被这个规则俘获,因为连接在两个方向上
都看见了这个包。 
最后的事情就是记录滑过边缘命中省缺策略的负载,这是那些应该通过却没有通过
的包。在其他情况下,他们可能是那些显然不能通过的包,你要通报这一点。我们
允许这条规则每分钟最多匹配3次,限制是3。这意味着在这条线上,我们每分钟最
多得到3条记录(log entries),限制仍是3,所以如果我们在2秒钟内得到3条记
录,下条记录我们要等1分钟。如果有人对你倾倒废物的话这是好的,否则会产生
许多兆字节的日志记录。我们在日志前加一个前缀——log-prefix,将日志级别设
为log-level,日志级别将告诉syslogd或logging facility这条日志到底重要到什
么程度。 

不同链的规则取代,为什么? 
我用尽可能多的节约CPU资源 的方式取代了不同的链。不让TCP 包穿过ICMP, 
UDP 和 TCP规则,我只是匹配TCP 包,让TCP 包穿过另一条链。使用这种方法我们
并没有耗费太多资源。下面的图画试着解释一个包如何穿过你的ipfilters。这副
图来自 
。 
首先做一个路由决策,如果它的目的地是你的主机,它是发向INPUT,如果它的目
的地是本地网的某个网络设备,它是发向FORWARD。然后它们穿过那些链。如果你
的本地网络设备对去往服务器的包做出应答,它们将穿过OUTPUT 链。 
这有一幅图给出它们怎么穿过INPUT 、 FORWARD 、 OUTPUT链, 
当一个包碰到INPUT 链,它首先被检查是否是ICMP 包,如果是,则被发往
icmp_packets 被检查是否被允许。如果允许,我们只是离开INPUT 链接收这个包
。如果不允许,它将到达icmp_packets 链尾,回到INPUT 链,到达链尾做更多的
检查,看它是否来自本地主机或本地网,如果是它将被接收。通过检查它是否是一
个已建立或相关连接的一部分来检查这个包是否属于其他连接,在这种情况下我们
要接收它们。如果它什么也不匹配,它将由丢弃链规则来处理,这条规则负责丢弃
它所碰到的任何东西。 
如果是个TCP 包,它不会匹配是ICMP 包的规则,传到下一个检查是否是TCP包的规
则。因为是,所以匹配,将被传送到tcp_packets 链。这里我们将检查它是否去往
我们所允许或不允许的一个端口,如果是, 我们将它传送到允许的链做最后的检查
。如果在检查中它失败了,它将被送到INPUT 链,穿过与ICMP 包相同的路。 
UDP包基本上一样,除了它要穿过udpincoming_packets 链,如果它在那什么规则
也没匹配,它将被送到INPUT 链,穿过与TCP包和ICMP 包相同的路 。具体图片可
以在以下地址获得. 
如果包去往或来自我们的本地网,它将被路由到FORWARD链。如果包来自我们的局
域网,我们接收它,不多不少。如果我们愿意,我们可以只接收SYN包,但我跳过
它了。如果包去往我们的本地网,我们只是匹配已建立的或相关的流,因为我们不
想建立从外部到我们本地网的新连接。如果这些规则都不匹配,包将被我们的链规
则丢弃。具体图片可以在以下地址获得. 
这个链是很直接的。我们允许任何东西从本地主机发出,我们允许任何东西从本地
网的ip发出,最后我们允许任何东西从我们自己的ip 发出到internet。你可能在
某种情况下希望消除这一切,不过不要忘了消除OUTPUT 链的默认规则是丢弃所有
的东西。 

建立不同的使用链 
现在你有点了解包如何穿过不同链以及它们之间的从属关系,我们负责将它们联系
起来。 首先我们用一个简单的命令配置不同链上的默认规则。iptables -P 
默认规则在包不能与链中规则匹配时使用。然后我们建立我们想与-N 命令一同使
用的不同的特殊链。新链将建立起来而且内部没有任何规则。我们使用的链是
icmp_packets,tcp_packets, udpincoming_packets 和tcp_packets允许的链。在
eth0上的包,凡是属于ICMP 类的,将被重定向到icmp_packets,属于TCP 类的,
将被重定向到tcp_packets ,而来自eth0 的UDP 类包则定向到 
udpincoming_packets 链。 

TCP允许的链,允许TCP前的最后一次检查 
如果一个包来自eth0 是TCP 类的,它穿过tcp_packets 链,如果连接与一个允许
的端口相反,我们将要做一些最后的检查来看我们是否真的允许它。首先我们象以
前一样建立链。然后我们检查包是否是SYN 类的。如果是,它很可能是一个新连接
的第一个包,当然,我们允许它。然后我们检查包是否来自一个已建立的或相关的
连接,如果是,我们当然也允许它。一个已建立的连接(ESTABLISHED connection
 )是一个双向都有负载的连接,因为我们获取了一个SYN包和一个对SYN包的应答
,连接必为已建立(ESTABLISHED)状态。链中的最后一条规则将把剩下的所有东
西丢弃。在这种情况下意味着没有看到两个方向的负载,也就是没对SYN包做应答
,或者他们开始与一个不是SYN的包连接。不开始一个与SYN 包的连接没有什么实
际用途,除了对 那些进行端口扫描的人。当前没有可利用的TCP/IP 应用支持打开
一个除了SYN 包的TCP 连接,所以丢弃这些废物, 因为它99%是进行端口扫描。 

ICMP链 
这是我们决定ICMP 类允许什么的地方。如果一个ICMP类型的包在INPUT 链上来自
eth0,我们将使它重定向到icmp_packets 链。在这我们将检查什么种类的ICMP类
被允许。象现在我只允许传入的ICMP Echo Replies, Destination unreachable,
 Redirect 和 Time Exceeded。 
我允许这些ICMP 包的原因如下,Echo Replies是你ping 其他主机时获得的,如果
不允许这个,我们就不能ping 其他主机了。Destination Unreachable 在特定主
机无法到达时使用,所以比如我们发出一个HTTP 请求,主机不可到达,无法找到
主机路由的最后一个网关应答Destination Unreachable 告诉我们找不到它。这使
我们不用等到浏览器的60秒或更多的超时设定到达。Redirect,我允许它因为我可
能没有使用到达一个主机的最佳路径,比如我向Gateway 1(G1) 发送一个包,与
Gateway 2(G2)在同一个网段,G1 将包发给G2,G2可能告诉你使用G2而不是G1 来
节省一跳。这样我们有时可以传送的快一点,不是很多,但至少好一点。Time 
Exceeded被允许是因为我们可能想跟踪一些主机或一个包获得的生存期为0,我们
将得到关于这个的应答。比如当你跟踪某个人时,你从TTL = 1开始,在向外的第
一跳它减小到0,从第一个网关返回一个Time Exceeded 到我们跟踪的主机,则TTL
 = 2 ,第二个网关发送Time Exceeded,等等,直到我们从想到达的主机得到应答
。 
这是ICMP 类的一个总列表: 
Table 1. ICMP types 

Type Code Description 
0 0 Echo Reply 
3 0 Network Unreachable 
3 1 Host Unreachable 
3 2 Protocol Unreachable 
3 3 Port Unreachable 
3 4 Fragmentation needed but no frag bit set 
3 5 Source routing failed 
3 6 Destination network unknown 
3 7 Destination host unknown 
3 8 Source host isolated (obsolete) 
3 9 Destination network administratively prohibited 
3 10 Destination host administratively prohibited 
3 11 Network unreachable for TOS 
3 12 Host unreachable for TOS 
3 13 Communication administratively prohibited by filtering 
3 14 Host precedence violation 
3 15 Precedence cutoff in effect 
4 0 Source quelch 
5 0 Redirect for network 
5 1 Redirect for host 
5 2 Redirect for TOS and network 
5 3 Redirect for TOS and host 
8 0 Echo request 
9 0 Router advertisement 
10 0 Route sollicitation 
11 0 TTL equals 0 during transit 
11 1 TTL equals 0 during reassembly 
12 0 IP header bad (catchall error) 
12 1 Required options missing 
13 0 Timestamp request (obsolete) 
14 0 Timestamp reply (obsolete) 
15 0 Information request (obsolete) 
16 0 Information reply (obsolete) 
17 0 Address mask request 
18 0 Address mask reply ?/TD> 

如想获取更多的信息,我建议你阅读下面的网站和报告: 
The Internet Control Message Protocol ICMP 
RFC792 
又及,阻碍你想要做的某些事情可能是我的错误,但对我来说,阻碍其它我不允许
的ICMP 类型将会使我的一切东西都工作的很好。 
 
 
相关链接 
 
 
 
相关文章 
 
 
 
关键字 
 
IPtable, 防火墙,  
来自 
最后更新: 2001年10月16日 

--
十年生死两茫茫,不思量,自难忘。千里孤坟,无处话凄凉。
纵使相逢应不识,尘满面,鬓如霜。 

夜来幽梦忽还乡。小轩窗,正梳妆。相顾无言,惟有泪千行。
料得年年断肠处,明月夜,短松冈。
 

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 210.82.167.241]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:5.737毫秒