IPTABLES的详细介绍

iptables/ip6tables — IPv4/IPv6数据包过滤和NAT的管理工具

SYNOPSIS
```
iptables [-t 表] {-A|-C|-D} 链 规则说明

ip6tables [-t 表] {-A|-C|-D} 链 规则说明

iptables [-t 表] -I 链 [规则号] 规则说明

iptables [-t 表] -R 链 规则号 规则说明

iptables [-t 表] -D 链 规则号

iptables [-t 表] -S [链 [规则号]]

iptables [-t 表] {-F|-L|-Z} [链 [规则号]] [选项...]

iptables [-t 表] -N 链

iptables [-t 表] -X [链]

iptables [-t 表] -P 链 目标

iptables [-t 表] -E 旧链名 新链名

规则说明 = [匹配项...] [目标]

匹配项 = -m 匹配名 [每项匹配的选项]

目标 = -j 目标名 [每个目标的选项]
```

DESCRIPTION
```
Iptables和ip6tables用于在Linux内核中设置、维护和检查IPv4和IPv6数据包过滤规则的表。可以定义多个不同的表。每个表包含一些内置链,还可以包含用户定义的链。

每个链是一系列可以匹配一组数据包的规则。每个规则指定对匹配的数据包采取的操作。这被称为“目标”,它可以是跳转到同一表中的用户定义链。

TARGETS
防火墙规则指定数据包的条件和目标。如果数据包不匹配,将检查链中的下一个规则;如果匹配,则由目标的值指定下一个规则,该值可以是用户定义链的名称、iptables-extensions(8)中描述的目标之一,或者是特殊值ACCEPT、DROP或RETURN。

ACCEPT表示允许数据包通过。DROP表示将数据包丢弃。RETURN表示停止遍历此链,并在前一个(调用)链中的下一个规则处恢复。如果到达内置链的末尾或匹配带有RETURN目标的内置链的规则,则由链策略指定数据包的命运。

TABLES
目前有五个独立的表(任何时候存在哪些表取决于内核配置选项和哪些模块存在)。

-t, --table 表
此选项指定命令应在其上运行的数据包匹配表。如果内核配置为自动加载模块,则将尝试加载该表的适当模块(如果尚未加载)。

表如下:

filter:
这是默认表(如果没有-t选项传递)。它包含内置链INPUT(用于发送到本地套接字的数据包)、FORWARD(用于通过该盒进行路由的数据包)和OUTPUT(用于本地生成的数据包)。

nat:
当遇到创建新连接的数据包时,将查询此表。它由三个内置链组成:PREROUTING(用于尽快更改进入的数据包)、OUTPUT(用于在路由之前更改本地生成的数据包)和POSTROUTING(用于在数据包即将离开时更改数据包)。自内核3.7以来支持IPv6 NAT。

mangle:
此表用于专门的数据包更改。直到内核2.4.17,它有两个内置链:PREROUTING(用于在路由之前更改传入的数据包)和OUTPUT(用于在路由之前更改本地生成的数据包)。自内核2.4.18以来,还支持其他三个内置链:INPUT(用于传入该盒的数据包)、FORWARD(用于更改通过该盒进行路由的数据包)和POSTROUTING(用于在数据包即将离开时更改数据包)。

raw:
此表主要用于与NOTRACK目标结合配置对连接跟踪的豁免。它以更高的优先级注册在netfilter钩子上,因此在ip_conntrack或任何其他IP表之前调用。它提供以下内置链:PREROUTING(用于通过任何网络接口到达的数据包)OUTPUT(用于由本地进程生成的数据包)

security:
此表用于强制访问控制(MAC)网络规则,例如由SECMARK和CONNSECMARK目标启用的规则。强制访问控制由Linux安全模块(如SELinux)实现。安全表在filter表之后调用,允许filter表中的任何自主访问控制(DAC)规则在MAC规则之前生效。此表提供以下内置链:INPUT(用于传入该盒的数据包)、OUTPUT(用于在路由之前更改本地生成的数据包)和FORWARD(用于更改通过该盒进行路由的数据包)。
```

OPTIONS
```
iptables和ip6tables识别的选项可以分为几个不同的组。

COMMANDS
这些选项指定要执行的操作。除非另有说明,否则在命令行上只能指定其中一个。对于命令和选项名称的长版本,您只需使用足够的字母以确保iptables可以将其与所有其他选项区分开即可。

-A, --append chain 规则说明
向所选链的末尾添加一个或多个规则。当源和/或目标名称解析为多个地址时,将为每种可能的地址组合添加一个规则。

-C, --check chain 规则说明
检查所选链中是否存在与规范匹配的规则。此命令使用与-D相同的逻辑查找匹配项,但不更改现有的iptables配置,并使用其退出代码指示成功或失败。

-D

, --delete chain 规则说明
-D, --delete chain 规则号
从所选链中删除一个或多个规则。有两个版本的此命令:规则可以指定为链中的数字(从1开始,表示第一个规则),也可以指定要匹配的规则。

-I, --insert chain [规则号] 规则说明
在所选链中插入一个或多个规则,作为给定规则号的规则。因此,如果规则号为1,则规则或规则将插入到链的头部。如果未指定规则号,则这也是默认操作。

-R, --replace chain 规则号 规则说明
替换所选链中的规则。如果源和/或目标名称解析为多个地址,则该命令将失败。规则从1开始编号。

-L, --list [链]
列出所选链中的所有规则。如果没有选择链,则将列出所有链。与iptables命令的所有其他部分一样,它适用于指定的表(filter是默认值),因此NAT规则通过
iptables -t nat -n -L
请注意,通常与-n选项一起使用,以避免进行长时间的反向DNS查找。还可以合法地指定
-Z, --zero [链 [规则号]]
在所有链中或仅在给定链中或仅在给定规则中将包和字节计数器清零。也可以合法地指定-L, --list(列表)选项,以在清除之前立即查看计数器。 (见上文。)

-N, --new-chain chain
通过给定的名称创建新的用户定义链。该名称不得已存在相应的目标。

-X, --delete-chain [chain]
删除指定的可选用户定义链。链不能有引用。如果有引用,必须在删除链之前删除或替换引用规则。链必须为空,即不包含任何规则。如果未给出参数,则将尝试删除表中的每个非内置链。

-P, --policy chain 目标
将链的策略设置为给定的目标。请参阅TARGETS部分,了解合法的目标。只有内置(非用户定义)链可以有策略,既不能是内置链也不能是策略目标。

-E, --rename-chain old-chain new-chain
将用户指定的链重命名为用户提供的名称。这是一种美学处理,对表的结构没有影响。

-h     帮助。提供(当前非常简短的)命令语法描述。

PARAMETERS
以下参数构成规则说明(用于add、delete、insert、replace和append命令)。

-4, --ipv4
此选项在iptables和iptables-restore中无效。如果使用(仅使用)ip6tables-restore插入具有-4选项的规则,则将静默地忽略它。任何其他用途将引发错误。此选项允许在单个规则文件中放置适用于iptables-restore和ip6tables-restore的IPv4和IPv6规则。

-6, --ipv6
如果使用(仅使用)iptables-restore插入具有-6选项的规则,则将静默地忽略它。任何其他用途将引发错误。此选项允许在单个规则文件中放置适用于iptables-restore和ip6tables-restore的IPv4和IPv6规则。此选项在ip6tables和ip6tables-restore中无效。

[!] -p, --protocol 协议
规则或要检查的数据包的协议。指定的协议可以是tcp、udp、udplite、icmp、icmpv6、esp、ah、sctp、mh或特殊关键字“all”,也可以是一个数字值,表示这些协议之一或其他协议。也允许来自/etc/protocols的协议名称。在协议之前的“!”参数将反转测试的意义。数字零等同于所有。省略此选项时,“all”将与所有协议匹配,并且在省略此选项时将视为默认值。请注意,在ip6tables中,除了esp之外,不允许IPv6扩展头。esp和ipv6-nonext可以在内核版本2.6.11或更高版本中使用。数字零等同于所有,这意味着您不能直接测试值为0的协议字段。要匹配HBH标头,即使它是最后一个标头,您不能使用-p 0,而总是需要使用-m hbh。

[!] -s, --source 地址[/掩码][,...]
源规范。地址可以是网络名称、主机名、网络IP地址(带有/掩码)或纯粹的IP地址。主机名将仅解析一次,然后将规则提交给内核。请注意,指定要使用远程查询(例如DNS)解析的任何名称都是一个非常糟糕的主意。掩码可以是ipv4网络掩码(对于iptables)或纯数字,表示网络掩码左侧的1的数量。因此,iptables的掩码为24等同于255.255.255.0。在地址规范之前使用“!”参数将反转地址的含义。--src标志是此选项的别名。可以指定多个地址,但这将扩展为多个规则(在使用-A添加时),或将导致删除多个规则(在使用-D删除时)。

[!] -d, --destination 地址[/掩码][,...]
目标规范。有关语法的详细说明,请参见-s(源)标志的描述。--dst标志是此选项的别名。

**-m, --match match**
指定要使用的匹配条件,即测试特定属性的扩展模块。匹配条件是在命令行上按顺序评估的,并以短路方式工作,即如果一个扩展返回false,则停止评估。

**-j, --jump target**
指定规则的目标,即如果数据包与之匹配,则执行的操作。目标可以是用户定义的链(不同于此规则所在的链),特殊的内置目标之一,该目标立即决定数据包的命运,或者是一个扩展(见下面的EXTENSIONS)。如果在规则中省略了此选项(并且未使用-g),则匹配规则不会对数据包的命运产生影响,但规则上的计数器将增加。

**-g, --goto chain**
指定处理应该继续在用户指定的链中。与--jump选项不同,return不会继续在此链中进行处理,而是在通过--jump调用我们的链中进行处理。

**[!] -i, --in-interface name**
数据包接收时经过的接口的名称(仅适用于进入INPUT、FORWARD和PREROUTING链的数据包)。当在接口名称之前使用"!"参数时,其含义被反转。如果接口名称以"+"结尾,则以此名称开头的任何接口都将匹配。如果省略此选项,则任何接口名称都将匹配。

**[!] -o, --out-interface name**
数据包将要发送时经过的接口的名称(用于进入FORWARD、OUTPUT和POSTROUTING链的数据包)。当在接口名称之前使用"!"参数时,其含义被反转。如果接口名称以"+"结尾,则以此名称开头的任何接口都将匹配。如果省略此选项,则任何接口名称都将匹配。

**[!] -f, --fragment**
这意味着规则仅涉及分段数据包的第二个及更后面的IPv4分段。由于无法告知此类数据包的源或目标端口(或ICMP类型),因此此类数据包将不匹配指定了这些信息的任何规则。当"!"参数在"-f"标志之前时,规则仅匹配头分段或未分段的数据包。此选项仅适用于IPv4,不适用于ip6tables。

**-c, --set-counters packets bytes**
这使管理员能够初始化规则的数据包和字节计数器(在INSERT、APPEND、REPLACE操作期间)。

**其他选项**
以下是一些额外的选项:

**-v, --verbose**
详细输出。此选项使list命令显示接口名称、规则选项(如果有)和TOS掩码。还列出数据包和字节计数器,后缀为'K'、'M'或'G',表示1000、1,000,000和1,000,000,000的倍数,但请参见-x标志以更改此设置。对于追加、插入、删除和替换,这将导致打印规则或规则的详细信息。可以多次指定-v以可能发出更详细的调试语句。

**-w, --wait [seconds]**
等待xtables锁。为了防止程序的多个实例同时运行,程序将尝试在启动时获取独占锁。默认情况下,如果无法获取锁,则程序将退出。此选项将使程序等待(无限期或可选秒数),直到获取独占锁。

**-W, --wait-interval microseconds**
每次迭代的等待间隔。在运行对延迟敏感的应用程序时,等待xtables锁的时间可能不可接受。此选项将使每次迭代花费指定的时间量。默认间隔为1秒。此选项仅适用于-w。

**-n, --numeric**
数值输出。IP地址和端口号将以数值格式打印。默认情况下,程序将尝试将它们显示为主机名、网络名或服务(如果适用)。

**-x, --exact**
展开数字。显示数据包和字节计数器的确切值,而不仅仅是K(1000的倍数)、M(1000K的倍数)或G(1000M的倍数)的四舍五入值。此选项仅适用于-L命令。

**--line-numbers**
在列出规则时,在每个规则的开头添加行号,对应于链中的规则位置。

**--modprobe=command**
在向链中添加或插入规则时,使用command加载任何必要的模块(目标、匹配扩展等)。

**MATCH AND TARGET EXTENSIONS**
iptables可以使用扩展的数据包匹配和目标模块。这些模块的列表在iptables-extensions(8)手册页中可用。

**DIAGNOSTICS**
各种错误消息被打印到标准错误。正确运行的退出代码为0。由于无效或滥用的命令行参数引起的错误导致退出代码为2,其他错误导致退出代码为1。

**BUGS**
Bugs?这是什么?;-)好吧,你可能想看看 [http://bugzilla.netfilter.org/](http://bugzilla.netfilter.org/)。

**与IPCHAINS的兼容性**
此iptables与Rusty Russell的ipchains非常相似。主要区别在于INPUT和OUTPUT链仅用于分别进入本地主机的数据包和由本地主机发出的数据包。因此,每个数据包只通过三个链中的一个(除了

环回流量,涉及INPUT和OUTPUT链);以前,转发的数据包将通过所有三个链。

另一个主要区别是,-i指的是输入接口;-o指的是输出接口,两者都适用于进入FORWARD链的数据包。

各种形式的NAT已分开;使用默认的`filter`表时,iptables是一个纯粹的数据包过滤器,具有可选的扩展模块。这应该简化以前有关IP伪装和数据包过滤组合的混乱。因此,以下选项处理方式不同:
- -j MASQ
- -M -S
- -M -L
iptables中还有一些其他变化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值