TMPFS
时间:2010-08-19 来源:BinChengfei
tmpfs:可以动态的调节大小:mount -o remount ...。ramfs是创建tmpfs的模板,但是tmpfs可以利用swap空间和做限制检查。tmpfs和ramdisk(/dev/ram*)相似, 但是ramdisk不能swap并且不能动态改变大小。
用途:
1. 内核内部通常会挂载一个tmpfs用来共享匿名映射和SYSV共享内存。挂载不依赖于CONFIG_TMPFS,如果没有配置CONFIG_TMPFS,tmpfs的用户可见部分不会编译,但是内部机制总是存在的。
2. glibc 2.0默认tmpfs挂载在/dev/shm,方便posix共享内存,所以在fstab中加入
tmpfs /dev/shm tmpfs defaults 0 0
3. tmpfs有三个优选参数,size: 缺省值是内存的一半;nr_blocks:和size相同,但是以块(PAGE_CACHE_SIZE)为单位,nr_inodes:最大inode数 目,缺省值是物理页面数目的一般,如果有highmem时为lowmem页面数目。参数后缀 k, m or g for kilo, mega and giga。size可用%后缀来限制tmpfs的百分比,缺省50%。
4. numa支持,可以选择分配策略;
IPTABLES
1. 处理流程
数据包接收
Step(步骤) | Table(表) | Chain(链) | Comment(注释) |
---|---|---|---|
1 |
|
|
在线路上传输(比如,Internet) |
2 |
|
|
进入接口 (比如, eth0) |
3 | mangle | PREROUTING | 这个链用来mangle数据包,比如改变TOS等 |
4 | nat | PREROUTING | 这个链主要用来做DNAT。不要在这个链做过虑操作,因为某 些情况下包会溜过去。 |
5 |
|
|
路由判断,比如,包是发往本地的,还是要转发的。 |
6 | mangle | INPUT | 在路由之后,被送往本地程序之前,mangle数据包。 |
7 | filter | INPUT | 所有以本地为目的的包都要经过这个链,不管它们从哪儿 来,对这些包的过滤条件就设在这里。 |
8 |
|
|
到达本地程序了(比如,服务程序或客户程序) |
注意,相比以前(译者注:就是指ipchain)现在数据包是由INPUT链过,而不是FORWARD链。这样更符合 逻辑。刚看上去可能不太好理解,但仔细想想就会恍然大悟的。
Table 3-2. 以本地为源的包Step | Table | Chain | Comment |
---|---|---|---|
1 |
|
|
本地程序(比如,服务程序或客户程序) |
2 |
|
|
路由判断,要使用源地址,外出接口,还有其他一些信息。 |
3 | mangle | OUTPUT | 在这儿可以mangle包。建议不要在这儿做过滤,可能有副作 用哦。 |
4 | nat | OUTPUT | 这个链对从防火墙本身发出的包进行DNAT操作。 |
5 | filter | OUTPUT | 对本地发出的包过滤。 |
6 | mangle | POSTROUTING | 这条链主要在包DNAT之后(译者注: 作者把这一次DNAT称作 实际的路由,虽然在前面有一次路由。对于本地的包,一旦它被生成,就必须经过路由代码的处理,但这个 包具体到哪儿去,要由NAT代码处理之后才能确定。所以把这称作实际的路由。),离开本地之前,对包 mangle。有两种包会经过这里,防火墙所在机子本身产生的包,还有被转发的包。 |
7 | nat | POSTROUTING | 在这里做SNAT。但不要在这里做过滤,因为有副作用,而且 有些包是会溜过去的,即使你用了DROP策略。 |
8 |
|
|
离开接口(比如: eth0) |
9 |
|
|
在线路上传输(比如,Internet) |
在这个例子中,我们假设一个包的目的是另一个网络中的一台机子。让我们来看看这个包的旅程:
Table 3-3. 被转发的包
Step | Table | Chain | Comment |
---|---|---|---|
1 |
|
|
在线路上传输(比如,Internet) |
2 |
|
|
进入接口(比如, eth0) |
3 | mangle | PREROUTING | mangle数据包,,比如改变TOS等。 |
4 | nat | PREROUTING | 这个链主要用来做DNAT。不要在这个链做过虑操作,因为某 些情况下包会溜过去。稍后会做SNAT。 |
5 |
|
|
路由判断,比如,包是发往本地的,还是要转发的。 |
6 | mangle | FORWARD | 包继续被发送至mangle表的 FORWARD链,这是非常特殊的情 况才会用到的。在这里,包被mangle(还记得mangle的意思吗)。这次mangle发生在最初的路由判断之后, 在最后一次更改包的目的之前(译者注:就是下面的FORWARD链所做的,因其过滤功能,可能会改变一些包 的目的地,如丢弃包)。 |
7 | filter | FORWARD | 包继续被发送至这条FORWARD链。只有需要转发的包才会走 到这里,并且针对这些包的所有过滤也在这里进行。注意,所有要转发的包都要经过这里,不管是外网到内 网的还是内网到外网的。在你自己书写规则时,要考虑到这一点。 |
8 | mangle | POSTROUTING | 这个链也是针对一些特殊类型的包(译者注:参考第6步, 我们可以发现,在转发包时,mangle表的两个链都用在特殊的应用上)。这一步mangle是在所有更改包的目 的地址的操作完成之后做的,但这时包还在本地上。 |
9 | nat | POSTROUTING | 这个链就是用来做SNAT的,当然也包括Masquerade(伪 装)。但不要在这儿做过滤,因为某些包即使不满足条件也会通过。 |
10 |
|
|
离开接口(比如: eth0) |
11 |
|
|
又在线路上传输了(比如,LAN) |
就如你所见的,包要经历很多步骤,而且它们可以被阻拦在任何一条链上,或者是任何有问题的地方。 我们的主要兴趣是iptables的概貌。注意,对不同的接口,是没有什么特殊的链和表的。所有要经防火墙/ 路由器转发的包都要经过FORWARD链。
mangle表
TOS:不要设置发往Internet的包,除非你打算依靠TOS来路由,比如用iproute2。
TTL:操作用来改变数据包的生存时间域,我们可以让所有数据包只有一个特殊的TTL。它的存在有 一个很好的理由,那就是我们可以欺骗一些ISP。为什么要欺骗他们呢?因为他们不愿意让我们共享 一个连接。那些ISP会查找一台单独的计算机是否使用不同的TTL,并且以此作为判断连接是否被共享 的标志。
MARK:用来给包设置特殊的标记。iproute2能识别这些标记,并根据不同的标记(或没有标记) 决定不同的路由。用这些标记我们可以做带宽限制和基于请求的分类。MARK没有改变包数据,而是在内核打了个标识。
filter表
filter 表用来过滤数据包,我们可以在任何时候匹配包并过滤它们。 我们就是在这里根据包的内容对包做DROP或ACCEPT的。当然,我们也可以预先在其他地方做些过滤,但是这 个表才是设计用来过滤的。几乎所有的target都可以在这儿使用。大量具体的介绍在后面,现在你只要知道 过滤工作主要是在这儿完成的就行了。
状态机制在iptables里,包是和被跟踪连接的四种不同状态有关的。它们是NEW,ESTABLISHED,RELATED和INVALID。 后面我们会深入地讨论每一个状态。使用--state匹配操作,我们能很容易地控制 “谁或什么能发起新的会话”。
iptables和Netfilter,因为没有包的重组,连接跟踪就不能正常工作。现在重组已经整合入 conntrack,并且在conntrack启动时自动启动。不要关闭重组功能,除非你要关闭连接跟踪。
除了本地产生的包由OUTPUT链处理外,所有连接跟踪都是在PREROUTING链里进行处理的,意思就是, iptables会在PREROUTING链里从新计算所有的状态。如果我们发送一个流的初始化包,状态就会在OUTPUT链 里被设置为NEW,当我们收到回应的包时,状态就会在PREROUTING链里被设置为ESTABLISHED。如果第一个包不是本地产生的,那就会在PREROUTING链里被设置为NEW状 态。综上,所有状态的改变和计算都是在nat表中的PREROUTING链和OUTPUT链里完成的。
连接跟踪表能容纳多少记录是被一个变量控制的,它可由内核中的ip- sysctl函数设置。默认值取决于你的内存大小,128MB可以包含8192条目录,256MB是16376条。你也可以在 /proc/sys/net/ipv4/ip_conntrack_max里查看、设置。
IPTABLE规则的保存和恢复
iptables-save和iptables-restore.