2008年6月21日星期六

iptables学习笔记2

1.iptables规则书写的语法是:

iptables [-t table] command [match] [target/jump]
  • 如果你不想用标准的表,就要在[table]处指定表名。一般情况下没有必要指定使用的表,因为iptables 默认使用filter表来执行所有的命令。
  • command告诉程序该做什么,比如:插入一个规则,还是在链的末尾增加一个规则,还是删除一个规则。
  • match细致地描述了包的某个特点,以使这个包区别于其它所有的包。在这里,我们可以指定包的来源IP 地址,网络接口,端口,协议类型,或者其他什么。
  • 最后是数据包的目标所在。若数据包符合所有的match,内核就用target来处理它,或者说把包发往 target。比如,我们可以让内核把包发送到当前表中的其他链(可能是我们自己建立的),或者只是丢弃这个包而没有什么处理,或者向发送者返回某个特殊的应答。

2008年6月20日星期五

iptables学习笔记1

1.开启linux内核的包转发功能。
echo "1" > /proc/sys/net/ipv4/ip_forward
2.iptables默认自带的三个表分别为mangle表、nat表和filter表。
  • mangle表包含以下链
    • PREROUTING
    • INPUT
    • OUTPUT
    • POSTROUTING
  • 总之该表不常用,几乎不用。
  • nat表主要用于来源地与目的地的ip或port转换,与linux本机无关主要于内网计算机有关。包含以下链
    • PREROUTING:在进行路由之前进行规则(DNAT/REDIRECT)
    • POSTROUTING:在进行路由判断后执行规则(SNAT/MASQUERADE)
    • OUTPUT:与发送出去的数据包有关
  • 关于POSTROUTING,固定ip的时候选择SNAT,非固定IP比如拨号上网的时候选择MASQUERADE链,修改目的ip地址的DNAT操作PREROUTING链
  • filter表主要跟linux本机有关,是默认的table,也是最重要的表。包含以下链
    • INPUT:主要与数据包想要进入Linux主机有关
    • OUTPUT:主要于Linux本机所要送出的数据包有关
    • FORWARD:与Linux本机没有关系,他可以将数据包转发到后段的计算机中,于nat这个table相关性很高
3.数据包在各表链中的流向,以下分为三种:分别为发往本机,本机发出,本机转发。(本机意指安装iptables的计算机)

以本地为目标(就是我们自己的机子了)的包
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

到达本地程序了(比如,服务程序或客户程序)

以本地为源的包
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)

被转发的包
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)

4.基于状态防火墙,几种状态
State(状态) Explanation(注释)
NEW NEW说明这个包是我们看到的第一个包。意思就是,这是conntrack模块看到的某个连接第一个包,它即将被匹配了。比如,我们看到一个SYN 包,是我们所留意的连接的第一个包,就要匹配它。第一个包也可能不是SYN包,但它仍会被认为是NEW状态。这样做有时会导致一些问题,但对某些情况是有非常大的帮助的。例如,在我们想恢复某条从其他的防火墙丢失的连接时,或者某个连接已经超时,但实际上并未关闭时。
ESTABLISHED ESTABLISHED已经注意到两个方向上的数据传输,而且会继续匹配这个连接的包。处于ESTABLISHED状态的连接是非常容易理解的。只要发送并接到应答,连接就是ESTABLISHED的了。一个连接要从NEW变为ESTABLISHED,只需要接到应答包即可,不管这个包是发往防火墙的,还是要由防火墙转发的。ICMP的错误和重定向等信息包也被看作是ESTABLISHED,只要它们是我们所发出的信息的应答。
RELATED RELATED是 个比较麻烦的状态。当一个连接和某个已处于ESTABLISHED状态的连接有关系时,就被认为是RELATED的了。换句话说,一个连接要想是 RELATED的,首先要有一个ESTABLISHED的连接。这个ESTABLISHED连接再产生一个主连接之外的连接,这个新的连接就是 RELATED的了,当然前提是conntrack模块要能理解RELATED。ftp是个很好的例子,FTP-data 连接就是和FTP-control有RELATED的。还有其他的例子,比如,通过IRC的DCC连接。有了这个状态,ICMP应答、FTP传输、DCC 等才能穿过防火墙正常工作。注意,大部分还有一些UDP协议都依赖这个机制。这些协议是很复杂的,它们把连接信息放在数据包里,并且要求这些信息能被正确 理解。
INVALID INVALID说明数据包不能被识别属于哪个连接或没有任何状态。有几个原因可以产生这种情况,比如,内存溢出,收到不知属于哪个连接的ICMP 错误信息。一般地,我们DROP这个状态的任何东西。

    2008年6月6日星期五

    如何删除blogger的文章

    http://help.blogger.com/bin/answer.py?answer=41383&query=%E5%88%AA%E9%99%A4&topic=&type=f

    终于能用了

    google的blogger终于可以使用了,过去都还要使用代理。哎,等了n久了。可惜现在吧blog落户在baidu了阿。遗憾,google速度如果能更快一些就好了。