iptables命令详解_共进电子
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Iptables规则是如何练成的
本章将详细地讨论如何构建Iptables规则。Iptables 包含三个表(filter、nat 、mangle),默认使用filter表,每个表包含若干条链(PREROUTING,POSTROUTING,OUTPUT,INPUT和FORWARD),每条规则就添加到相应的链上。规则就是指向标,在一条链上,对不同的连接和数据包阻塞或允许它们去向何处。插入链的每一行都是一条规则。我们也会讨论基本的matche及其用法,还有各种各样的target。
流程图
1. 基础
我们已经解释了什么是规则,在内核看来,规则就是决定如何处理一个包的语句。如果一个包符合所有的条件(就是符合matche语句),我们就运行target 或jump指令。书写规则的语法格式是:
iptables [-t table] command [chain] [match] [-j target/jump]
注意target指令必须在最后。如果你不想用标准的表,就要在[table]处指定表名。一般情况下没有必要指定使用的表,因为iptables 默认使用filter表来执行所有的命令。也没有必要非得在这里指定表名,实际上几乎可在规则的任何地
方。当然,把表名在开始处已经是约定俗成的标准。
尽管命令总是放在开头,或者是直接放在表名后面,我们也要考虑考虑到底放在哪儿易读。command告诉程序该做什么,比如:插入一个规则,还是在链的末尾增加一个规则,还是删除一个规则,下面会仔细地介绍。
Chain 指定表的哪条规则链。
match细致地描述了包的某个特点,以使这个包区别于其它所有的包。在这里,我们可以指定包的来源IP 地址,网络接口,端口,协议类型,或者其他什么。下面我们将会看到许多不同的match。
最后是数据包的目标所在。若数据包符合所有的match,内核就用target来处理它,或者说把包发往target。比如,我们可以让内核把包发送到当前表中的其他链(可能是我们自己建立的),或者只是丢弃这个包而没有什么处理,或者向发送者返回某个特殊的应答。下面有详细的讨论。
2. Tables
选项-t用来指定使用哪个表,它可以是下面介绍的表中的任何一个,默认的是filter表。
Table 2-1. Tables
Table(表名)Explanation (注释)
nat nat表的主要用处是网络地址转换,即Network Address Translation,缩写为NA T。做过NAT操作的数据包的地址就被改变了,当然这种改变是根据我们
的规则进行的。属于一个流的包只会经过这个表一次。如果第一个包被允许做
NA T或Masqueraded,那么余下的包都会自动地被做相同的操作。也就是说,
余下的包不会再通过这个表,一个一个的被NA T,而是自动地完成。这就是
我们为什么不应该在这个表中做任何过滤的主要原因。PREROUTING 链的作
用是在包刚刚到达防火墙时改变它的目的地址,如果需要的话。OUTPUT链
改变本地产生的包的目的地址。POSTROUTING链在包就要离开防火墙之前
改变其源地址。
mangle这个表主要用来mangle数据包。我们可以改变不同的包及包头的内容,比如TTL,TOS(服务类型)或MARK。注意MARK并没有真正地改动数据包,
它只是为包设了一个标记。防火墙内的其他的规则或程序(如tc)可以使用这
种标记对包进行过滤或高级路由。注意,mangle表不能做任何NAT,它只是
改变数据包的TTL,TOS或MARK,而不是其源目地址。NAT是在nat表中
操作的。
filter filter表是专门过滤包的,内建三个链,可以毫无问题地对包进行DROP、LOG、ACCEPT和REJECT等操作。FORW ARD链过滤所有不是本地产生的并且目
的地不是本地的包,而INPUT恰恰针对那些目的地是本地的包。OUTPUT是
用来过滤所有本地生成的包的。
上面介绍了三个不同的表的最基本的内容。应该知道它们的使用目的完全不同,还要清楚每一条链的使用。
3. Commands
在这一节里,我们将要介绍所有的command以及它们的用途。command指定iptables对我们提交的规则要做什么样的操作。这些操作可能是在某个表里增加或删除一些东西,或做点儿其他什么。以下是iptables可用的command(要注意,如不做说明,默认表的是filter表。):
Table 3-1. Commands
Command
-A, --append
Example iptables -A INPUT ...
Explanation 在所选择的链末添加规则。当源地址或目的地址是以名字而不是ip地址的形式出现时,若这些名字可以被解析为多个地址,则这条规则会和所有可用的地
址结合。
Command
-D, --delete
Example iptables -D INPUT --dport 80 -j DROP或iptables -D INPUT 1
Explanation 从所选链中删除规则。有两种方法指定要删除的规则:一是把规则完完整整地写出来,再就是指定规则在所选链中的序号(每条链的规则都各自从1被编号)。
Command
-R, --replace
Example iptables -R INPUT 1 -s 192.168.0.1 -j DROP
Explanation 在所选中的链里指定的行上(每条链的规则都各自从1被编号)替换规则。当源地址或目的地址是以名字而不是ip地址的形式出现时,若这些名字可以被
解析为多个地址,则这条command会失败。
Command
-I, --insert
Example iptables -I INPUT 1 --dport 80 -j ACCEPT
Explanation 根据给出的规则序号向所选链中插入规则。如果序号为1,规则会被插入链的头部,其实默认序号就是1。
Command
-L, --list
Example iptables -L INPUT