iptables怎么编写规则

    规则可以这么描述,它能够指导防火墙何时阻塞或者允许链上的连接或者报文通行。你所书写的每一行就被认为是一个规则,我们将会讨论基本的matches/target以及如何使用他们,另外我们如何构建自定义的链。

    iptables命令格式如下,假如所有的判定条件或者matches被匹配上,那么我们执行target或者jump指令

iptables [-t table] command [match] [target/jump]

具体表示如下

SYNOPSIS
       iptables [-t table] {-A|-C|-D} chain rule-specification

       ip6tables [-t table] {-A|-C|-D} chain rule-specification

       iptables [-t table] -I chain [rulenum] rule-specification

       iptables [-t table] -R chain rulenum rule-specification

       iptables [-t table] -D chain rulenum

       iptables [-t table] -S [chain [rulenum]]

       iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]

       iptables [-t table] -N chain

       iptables [-t table] -X [chain]

       iptables [-t table] -P chain target

       iptables [-t table] -E old-chain-name new-chain-name

       rule-specification = [matches...] [target]

       match = -m matchname [per-match-options]

       target = -j targetname [per-target-options]

表(Tables)

-t选项指明你准备操作哪个表,默认情况下,filter表会被使用。

Table

Explanation

raw

Raw表和它的链都在netfilter的模块之前,他主要就是用来完成NOTRACK功能,如果我们想使用这个功能,需要2.6以及之后的内核。Raw表里面有PREROUTINGOUTPUT两条链,在这两条链上他们早于netfilter处理报文。PREROUTING用于到本机的所有报文,而OUTPUT链用于本机发送的所有报文。

mangle

这个表主要用来mangle数据包。我们可以改变不同的包及包头的内容,比如 TTLTOSMARK。注意MARK并没有真正地改动数据包,它只是在内核空间为包设了一个标记。防火墙内的其他的规则或程序(如tc)可以使用这种标记对包进行过滤或高级路由。这个表有五个内建的链: PREROUTINGPOSTROUTING OUTPUTINPUT FORWARDPREROUTING在包进入防火墙之后、路由判断之前改变包,POSTROUTING是在所有路由判断之后。 OUTPUT在确定包的目的之前更改数据包。INPUT在包被路由到本地之后,但在用户空间的程序看到它之前改变包。FORWARD在最初的路由判断之后、最后一次更改包的目的之前mangle包。注意,mangle表不能做任何NAT,它只是改变数据包的 TTLTOSMARK,而不是其源目地址。NAT是在nat表中操作的。

filter

Filter明确的就是用来完成报文过滤的,和操作其他表一样,我们在filter里面可以丢弃/记录/接受/拒绝报文。FORWARD链主要用来处理非本机报文,INPUT链处理所有目的地址为本机的报文,而OUTPUT则处理所有本机发送的报文。

nat

nat表的主要用处是网络地址转换,即Network Address
Translation
,缩写为NAT。做过NAT操作的数据包的地址就被改变了,当然这种改变是根据我们的规则进行的。属于一个流的包只会经过这个表一次。如果第一个包被允许做NATMasqueraded,那么余下的包都会自动地被做相同的操作。也就是说,余下的包不会再通过这个表,一个一个的被NAT,而是自动地完成。这就是我们为什么不应该在这个表中做任何过滤的主要原因,对这一点,后面会有更加详细的讨论。PREROUTING 链的作用是在包刚刚到达防火墙时改变它的目的地址,如果需要的话。OUTPUT链改变本地产生的包的目的地址。POSTROUTING链在包就要离开防火墙之前改变其源地址。

命令(Commands)

本节我们会覆盖所有不同的命令(Commands)以及用他们能够做什么。命令(Commands)告诉Iptables要对我们的规则做什么,通常情况下,我们也许是增加或则删除一些信息,下列命令(Commands)我们可以使用。

Commands

Command

-A, –append

Example

iptables -A INPUT

Explanation

这个命令在链尾追加一条规则,换句话讲这条规则会被放置在规则集的尾部,也就是最后才被检查,除非你后来又追加了另一条规则。

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

这条命令替换指定位置的旧规则,它和delete工作方式一样的,但是不同在于它不完全删除这条规则,而是替换上一条新的规则。这个主要用于你做一些测试,实际工作中很少使用。

Command

-I, –insert

Example

iptables -I INPUT 1
–dport 80 -j ACCEPT

Explanation

在链里面插入一条规则,这条规则会在我们指定的地方插入。换句话讲,上面的这条命令会把这条规则插入到第一个位置,所有它就是第一条规则。

Command

-L, –list

Example

iptables -L INPUT

Explanation

这条命令列出指定链的所有规则,在上面的例子里面,我们会列出INPUT链里面的所有规则。如果你不指定链名称,那么就列出这张表里面所有的链上规则,上面没有指定表名称,默认就是filter表,如果想查看特定表用-t参数。他的输出还受到其他参数的影响,例如-n-v

Command

-F, –flush

Example

iptables -F INPUT

Explanation

这个命令清除链上的所有规则,它等同于逐条删除所有规则,只是它更快。没有指定参数的话,他会把指定表上面所有链的规则删除干净。

Command

-Z, –zero

Example

iptables -Z INPUT

Explanation

这个命令告诉应用程序情况链上的所有计数器值,没有指定链就是所有链。假如你用-v参数加上-L查看,你就会在开头看到统计值。清空这个计数你可以用-Z参数。-Z参数的使用和-L一个样,除了-Z没有输出。当然-L-Z可以合用,这样首先列出规则,但是报文的计数都被清空。

Command

-N, –new-chain

Example

iptables -N allowed

Explanation

这个命令让我们在指定的表上面创建一条新的用户自定义链,在上面的例子里面,我们创建了一条叫做allowed的用户自定义链。请注意,名字不能和系统内建的重合。

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。注意我们所修改的仅仅是名称罢了,所有的规则都不会有任何变化。

 

Options

Option

-v, –verbose

Commands used with

–list, –append,
–insert, –delete, –replace

Explanation

这个选项主要和list一起使用。假如两个一起用的话,输出信息就包含接口地址/规则选项以及TOS的标记。 –list命令还会列出字节和报文统计。其中计数器是以KMG(这里用的是10的幂而不是2的幂哦)为单位的。如果想知道到底有多少个包、多少字节,还要用到选项-x,下面会介绍。如果-v –append–insert–delete –replace连用,iptables会输出详细的信息告诉你规则是如何被解释的、是否正确地插入等等

Option

-x, –exact

Commands used with

–list

Explanation

使–list输出中的计数器显示准确的数值,而不用KMG等估值。注意此选项只能和–list连用。

Option

-n, –numeric

Commands used with

–list

Explanation

使输出中的IP地址和端口以数值的形式显示,而不是默认的名字,比如主机名、网络名、程序名等。注意此选项也只能和–list连用

Option

–line-numbers

Commands used with

–list

Explanation

–line-number命令和list一起合用,他们用来控制输出数字。用了这个选项后,每一条规则都带有序号,这样我们就很方便的知道每条规则的位置。这条命令只能和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命令不在搜索路径中,就要用到

 

Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
永久连接: http://www.nfvschool.cn/?p=288
标签:

发表评论