6.3. Commands
在这一节里,我们将要介绍所有的command以及它们的用途。command指定iptables 对我们提交的规则要做什么样的操作。这些操作可能是在某个表里增加或删除一些东西,或做点儿其他什么。以下是iptables可用的command(要注意,如不做说明,默认表的是 filter表。):
Table 6-2. 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 |
Explanation | 显示所选链的所有规则。如果没有指定链,则显示指定表中的所有链。如果什么都没有指定,就显示默认表所有的链。精确输出受其它参数影响,如-n 和-v等参数,下面会介绍。 |
Command | -F, --flush |
Example | iptables -F INPUT |
Explanation | 清空所选的链。如果没有指定链,则清空指定表中的所有链。如果什么都没有指定,就清空默认表所有的链。当然,也可以一条一条地删,但用这个command会快些。 |
Command | -Z, --zero |
Example | iptables -Z INPUT |
Explanation | 把指定链(如未指定,则认为是所有链)的所有计数器归零。 |
Command | -N, --new-chain |
Example | iptables -N allowed |
Explanation | 根据用户指定的名字建立新的链。上面的例子建立了一个名为allowed的链。注意,所用的名字不能和已有的链、target同名。 |
Command | -X, --delete-chain |
Example | iptables -X allowed |
Explanation | 删除指定的用户自定义链。这个链必须没有被引用,如果被引用,在删除之前你必须删除或者替换与之有关的规则。如果没有给出参数,这条命令将会删除默认表所有非内建的链。 |
Command | -P, --policy |
Example | iptables -P INPUT DROP |
Explanation | 为链设置默认的target(可用的是DROP 和ACCEPT,如果还有其它的可用,请告诉我),这个target称作策略。所有不符合规则的包都被强制使用这个策略。只有内建的链才可以使用规则。但内建的链和用户自定义链都不能被作为策略使用,也就是说不能象这样使用:iptables -P INPUT allowed(或者是内建的链)。 |
Command | -E, --rename-chain |
Example | iptables -E allowed disallowed |
Explanation | 对自定义的链进行重命名,原来的名字在前,新名字在后。如上,就是把allowed改为disallowed。这仅仅是改变链的名字,对整个表的结构、工作没有任何影响。 |
在使用iptables时,如果必须的参数没有输入就按了回车,那么它就会给出一些提示信息:告诉你需要哪些参数等等。iptables的选项-v用来显示iptables的版本,-h给出语法的简短说明。。下面将要介绍的就是部分选项,还有它们的作用。
Table 6-3. Options
Option(选项) | -v, --verbose(详细的) |
可用此选项的命令 | --list, --append, --insert, --delete, --replace |
Explanation(说明) | 这个选项使输出详细化,常与--list 连用。与--list连用时,输出中包括网络接口的地址、规则的选项、TOS掩码、字节和包计数器,其中计数器是以K、M、G(这里用的是10的幂而不是2的幂哦)为单位的。如果想知道到底有多少个包、多少字节,还要用到选项-x,下面会介绍。如果-v 和--append、--insert、--delete 或--replace连用,iptables会输出详细的信息告诉你规则是如何被解释的、是否正确地插入等等。 |
Option | -x, --exact(精确的) |
Commands used with | --list |
Explanation | 使--list输出中的计数器显示准确的数值,而不用K、M、G等估值。注意此选项只能和--list连用。 |
Option | -n, --numeric(数值) |
Commands used with | --list |
Explanation | 使输出中的IP地址和端口以数值的形式显示,而不是默认的名字,比如主机名、网络名、程序名等。注意此选项也只能和--list连用。 |
Option | --line-numbers |
Commands used with | --list |
Explanation | 又是一个只能和--list连用的选项,作用是显示出每条规则在相应链中的序号。这样你可以知道序号了,这对插入新规则很有用哦。 |
Option | -c, --set-counters |
Commands used with | --insert, --append, --replace |
Explanation | 在创建或更改规则时设置计数器,语法如下:--set-counters 20 4000,意思是让内核把包计数器设为20,把字节计数器设为4000。 |
Option | --modprobe |
Commands used with | All |
Explanation | 此选项告诉iptables探测并装载要使用的模块。这是非常有用的一个选项,万一modprobe命令不在搜索路径中,就要用到了。有了这个选项,在装载模块时,即使有一个需要用到的模块没装载上,iptables也知道要去搜索。 |
----------------
出处:http://cert.sjtu.edu.cn/doc/linux/s1-fireall-ipt-act.html
使用 IPTables 的第一步是启动 IPTables 服务。这可以使用以下命令进行:
service iptables start |
警告 | ||
---|---|---|
你应该使用以下命令关闭 IP6Tables 服务才能使用 IPTables 服务:
|
要使 IPTables 在系统引导时默认启动,你必须使用 chkconfig 来改变服务的运行级别状态。
chkconfig --level 345 iptables on |
IPTables 的语法被分成几个层次。主要层次为“链”(chain)。“链”指定处理分组的状态。其用法为:
iptables -A chain -j target |
-A 在现存的规则集合内后补一条规则。chain 是规则所在“链”的名称。IPTables 中有三个内建的链(即影响每一个在网络中经过的分组的链):INPUT、OUTPUT、和 FORWARD。这些链是永久性的,不能被删除。
重要 | ||
---|---|---|
在创建 IPTables 规则集合时,记住规则的顺序是至关重要的。例如:如果某个链指定了来自本地子网 192.168.100.0/24 的任何分组都应放弃,然后一个允许来自 192.168.100.13(在前面要放弃分组的子网范围内)的分组的链被补在这个规则后面(-A),那么这个后补的规则就会被忽略。你必须首先设置允许 192.168.100.13 的规则,然后再设置放弃规则。 要在现存规则链的任意处插入一条规则,使用 -I,随后是你想插入规则的链的名称,然后是你想放置规则的位置号码(1,2,3,...,n)。例如:
这条规则被插入为 INPUT 链的第一条规则,它允许本地环回设备上的交通。 |
7.2.1. 基本防火墙策略
在一开始就建立的某些基本策略为建构更详细的用户定义的规则奠定了基础。IPTables 使用策略(policy, -P)来创建默认规则。对安全敏感的管理员通常想采取放弃所有分组、只逐一允许指定分组的策略。以下规则阻塞网络上所有的出入分组。
iptables -P INPUT DROP iptables -P OUTPUT DROP |
此外,还推荐你拒绝所有转发分组(forwarded packets) — 要从防火墙被选路发送到它的目标节点的网络交通 — 以便限制内部客户对互联网的无心暴露。要达到这个目的,使用以下规则:
iptables -P FORWARD DROP |
注记 | |
---|---|
在处理添加的规则时,REJECT(拒绝)目标和 DROP(放弃)目标这两种行动有所不同。REJECT 会拒绝目标分组的进入,并给企图连接服务的用户返回一个 connection refused 的错误消息。DROP 会放弃分组,而对 telnet 用户不发出任何警告;不过,为了避免导致用户由于迷惑不解而不停试图连接的情况的发生,推荐你使用 REJECT 目标。 |
设置了策略链后,为你的特定网络和安全需要创建新规则。以下各节概述了一些你在建构 IPTables 防火墙时可能要实现的规则。