iptables 命令速查
在实际操作 iptables 的过程中,是以表作为操作入口的
iptables 指令基本格式(参考 man 文档)
-
指令语法概览
iptables [-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] -
Target
- ACCEPT means to let the packet through.
- DROP means to drop the packet on the floor.
- RETURN means stop traversing this chain and resume at the next rule in the previous (calling) chain. (有点像函数中的返回)
-
Table
-
-t, --table tablefilter (default) nat mangle raw security -
此选项指定命令应操作的数据包匹配表。如果没有指定,默认为 filter 表
-
-
选项
-
指令
指令 解析 -A, --append chain rule-specification在 chain 的末尾添加一条或多条规则 -C, --check chain rule-specification 检查所选链中是否存在与规范匹配的规则。此命令使用与-D相同的逻辑来查找匹配的条目,但不更改现有iptables配置,并使用其退出代码来指示成功或失败。-D, --delete chain rule-specification
-D, --delete chain rulenum从所选链中删除一个或多个规则。此命令有两个版本:可以将规则指定为链中的第几条(第一个规则从1开始)或要匹配的规则。-I, --insert chain [rulenum] rule-specification 在所选链中的指定位置插入一个或多个规则。如果 rulenum 为1,则在链的开头插入一条或多条规则。默认头部插入。 -R, --replace chain rulenum rule-specification 替换链中第 rulenum 条规则 -L, --list [chain] 列出所选链中的所有规则,如果不指定 chain,则默认列出当前表所有 chain 中的规则,可以搭配-t 表名,默认是filter表.它也经常与-n选项一起使用,以避免长时间反向DNS查找。-S, --list-rules [chain] 打印所选链中的所有规则。如果未选择任何链,则所有链都将像 iptables save 一样打印。与其他所有 iptables 命令一样,可以用-t 表名指定的表(默认是 filter 表)。-F, --flush [chain] 删除所选链中的所有规则(如果未给出任何链,则刷新表中的所有链)。这相当于逐个删除所有规则。 -Z, --zero [chain [rulenum]] 将所有链中的数据包和字节计数器归零,或仅将给定链或链中的给定规则归零。也可以搭配-L,--list(list)选项,以便在计数器被清除之前立即查看它们。-N, --new-chain chain 按给定名称创建新的用户自定义链。新链的名称不能是已存在的名称。 -X, --delete-chain [chain] 删除指定的用户定义链。被删除的链不能被引用链。如果存在,则必须先删除或替换引用规则,然后才能删除链。链必须为空,即不包含任何规则。如果没有指定要删除的链名,它将尝试删除表中的每个非内置链。(内置链有:prerouting, input, output, forward, postrouting)-P, --policy chain target 为链设置默认的 target(可用的是 DROP 和 ACCEPT),这个target 称作策略。所有不符合规则的包都被强制使用这个策略。只有内建的链才可以使用策略。但内建的链和用户自定义链都不能被作为策略使用,也就是说不能象这样使用:iptables -P INPUT allowed(或者是内建的链)。-E, --rename-chain old-chain new-chain 将用户指定的链重命名为用户提供的名称。这是装饰性的,对 table 的结构没有影响。 -
参数,以下参数构成规则规范(在add、delete、insert、replace和append命令中使用)
参数 解析 -4, --ipv4 参考 man 文档 -6, --ipv6 参考 man 文档 [!] -p, --protocol protocol 规则或要检查的数据包的协议。指定的协议可以是tcp、udp、udplite、icmp、icmpv6、esp、ah、sctp、mh或特殊关键字“all”。也可以是 /etc/protocols 中定义的协议。协议前如果有!表示非,即反向匹配的意思。数字 0 或者是all表示所有协议(这也是默认值)[!] -s, --source address[/mask][,…] 指定源地址,地址可以是网络名称、主机名、网络IP地址(带/mask)或普通IP地址。主机名规则被提交到内核前只会解析一次。请注意,指定任何要用远程查询(如DNS)解析的名称是一个非常糟糕的主意。mask指定,若为 24 等于是 255.255.255.0。地址前的!符号表示非该地址。--src是该选项的别名。可以同时指定多个地址,但是规则最终会以 append 的方式展开,同理删除时(-D)也会删除多个规则[!] -d, --destination address[/mask][,…] 指定目的地址,使用方式同 -s,别名是--dst-m, --match match 指定要使用的匹配项,即测试特定属性的扩展模块。匹配集构成了调用 target 的条件。匹配项将按照命令行上指定的顺序从头到尾进行评估,并以短路方式工作,即如果一个扩展产生 false,评估将停止。-j, --jump target 这指定了规则的 target ;即,如果数据包与之匹配,该怎么办。target 可以是用户定义的链(此规则所在的链除外)、能立即决定数据包命运的特殊内置 target 之一,或扩展(请参阅 man)。如果在规则中省略了这个选项(并且没有使用-g),那么匹配规则对数据包的命运没有影响,但是规则上的计数器将递增。-g, --goto chain -g 选项将规则重定向到一个用户自定义链中,与 -j 选项不同,从自定义链中返回时,是返回到调用 -g 选项上层的那一个 -j 链中 [!] -i, --in-interface name接收数据包的接口的名称(仅适用于进入INPUT, FORWARD 和 PREROUTING 链的数据包)。若接口名称之前使用!,其意义相反,若省略该参数,则可以匹配任何的接口。如果接口名后跟了+操作符,表示通配所有以该名开头的网络接口[!] -o, --out-interface name 将要发送数据包的接口的名称(对于进入了 FORWARD, OUTPUT 和 POSTROUTING 链的数据包),若接口名称之前使用!,其意义相反,若省略该参数,则可以匹配任何的接口。如果接口名后跟了+操作符,表示通配所有以该名开头的网络接口[!] -f, --fragment 参考 man 文档 -c, --set-counters packets bytes 这个选项可以让我们在创建或者修改规则(INSERT, APPEND, REPLACE)的时候,设置字节或者报文的计数值。语法大致是这个样子的,--set-counters 20 4000,这个命令设置报文计数值为 20 而字节计数值为 4000. -
其他
参数 解析 -v, --verbose 这个选项主要和—list一起使用。假如两个一起用的话,输出信息就包含接口地址/规则选项以及TOS的标记。--list命令还会列出字节和报文统计。其中计数器是以K、M、G(这里用的是 10 的幂而不是 2 的幂)为单位的。如果想知道到底有多少个包、多少字节,还要用到选项-x,下面会介绍。如果-v和--append、--insert、--delete 或--replace连用,iptables 会输出详细的信息告诉你规则是如何被解释的、是否正确地插入等等-w, --wait [seconds] 等待 xtables 锁。为了防止程序的多个实例同时运行,将尝试在启动时获取独占锁。默认情况下,如果无法获得锁,程序将退出。此选项将使程序等待(无限期或(可选秒),直到可以获得独占锁-W, --wait-interval microseconds每次迭代等待的时间间隔(微秒级)。在运行对延迟敏感的应用程序时,等待 xtables 锁的时间过长可能是不可以接受。此选项将为每次迭代指定占用的时间量。默认间隔为1秒。此选项只能和 -w 合用-n, --numeric iptables 默认为我们进行了名称解析,但是在规则非常多的情况下如果进行名称解析,效率会比较低,所以,在没有此需求的情况下,我们可以使用-n选项,表示不对IP地址进行名称反解,直接显示IP地址-x, --exact 使--list输出中的计数器显示准确的数值,而不用K、M、G等估值。注意此选项只能和--list连用–line-numbers --line-number命令和—list一起合用,他们用来控制输出数字。用了这个选项后,每一条规则都带有序号,这样我们就很方便的知道每条规则的位置。这条命令只能和—list合用–modprobe=command 此选项告诉 iptables 探测并装载要使用的模块。这是非常有用的一个选项,万一modprobe命令不在搜索路径中,就要用到了。有了这个选项,在装载模块时,即使有一个需要用到的模块没装载上,iptables 也知道要去搜索。
-
常用指令
查看规则
-
查看 raw 表中 OUTPUT 链 的规则
iptables -t raw -L OUTPUT -nv 输出结果: Chain OUTPUT (policy ACCEPT 1566 packets, 185K bytes) pkts bytes target prot opt in out source destination 因为没有启用所以没有数据 -
结果解析
列名 意义 pkts 对应规则匹配到的报文的个数。 bytes 对应匹配到的报文包的大小总和。 target 规则对应的target,往往表示规则对应的”动作”,即规则匹配成功后需要采取的措施。 prot 表示规则对应的协议,是否只针对某些协议应用此规则。 opt 表示规则对应的选项。 in 表示数据包由哪个接口(网卡)流入,我们可以设置通过哪块网卡流入的报文需要匹配当前规则。 out 表示数据包由哪个接口(网卡)流出,我们可以设置通过哪块网卡流出的报文需要匹配当前规则。 source 表示规则对应的源头地址,可以是一个IP,也可以是一个网段。 destination 表示规则对应的目标地址。可以是一个IP,也可以是一个网段。
删除已有规则
- 删除默认 filter 表中的所有链中的规则
iptables -F 或 iptables –flush
设置链的默认策略
- 设置默认表中链的默认策略
链的默认政策设置为”ACCEPT”(接受),若要将INPUT,FORWARD,OUTPUT链设置成”DROP”(拒绝),命令如下: iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP
精确增删改
增加
注意点:添加规则时,规则的顺序非常重要
- 头部添加
在指定表的指定链的首部添加一条规则,-I 选型表示在对应链的开头添加规则 命令语法:iptables -t 表名 -I 链名 匹配条件 -j target ,示例: iptables -t filter -I INPUT -s 192.168.0.100 -j DROP - 指定位置添加
在指定表的指定链的指定位置添加一条规则 命令语法:iptables -t 表名 -I 链名 规则序号 匹配条件 -j 动作 ,示例: 在第 3 条位置添加 iptables -t filter -I INPUT 3 -s 192.168.0.100 -j REJECT - 尾部添加
在指定表的指定链的尾部添加一条规则,-A 选项表示在对应链的末尾添加规则,省略 -t 选项时,表示默认操作 filter 表中的规则 命令语法:iptables -t 表名 -A 链名 匹配条件 -j target ,示例: iptables -t filter -A INPUT -s 192.168.0.100 -j ACCEPT
删除
注意点:如果没有保存规则,删除规则时请慎重
-
按照规则序号删除规则,删除指定表的指定链的指定规则,-D选项表示删除对应链中的规则。
命令语法:iptables -t 表名 -D 链名 规则序号,示例: iptables -t filter -D INPUT 3 示例表示删除 filter 表中 INPUT 链中序号为3的规则。 -
按照具体的匹配条件与动作删除规则,删除指定表的指定链的指定规则。
命令语法:iptables -t 表名 -D 链名 匹配条件 -j 动作,示例: iptables -t filter -D INPUT -s 192.168.1.100 -j DROP 示例表示删除 filter 表中 INPUT 链中源地址为 192.168.1.100 并且动作为 DROP 的规则。 -
删除指定表的指定链中的所有规则,
-F选项表示清空对应链中的规则,执行时需三思。命令语法:iptables -t 表名 -F 链名,示例: iptables -t filter -F INPUT -
删除指定表中的所有规则,执行时需三思
命令语法:iptables -t 表名 -F,示例: iptables -t filter -F
修改
注意点:如果使用 -R 选项修改规则中的动作,那么必须指明原规则中的原匹配条件,例如源 IP,目标 IP 等。
-
修改指定表中指定链的指定规则,
-R选项表示修改对应链中的规则,使用-R选项时要同时指定对应的链以及规则对应的序号,
并且规则中原本的匹配条件不可省略。命令语法:iptables -t 表名 -R 链名 规则序号 规则原本的匹配条件 -j 动作,示例: iptables -t filter -R INPUT 3 -s 192.168.1.100 -j ACCEPT 上述示例表示修改 filter 表中 INPUT 链的第 3 条规则,将这条规则的动作修改为 ACCEPT, -s 192.168.1.100 为这条规则中原本的匹配条件, 如果省略此匹配条件,修改后的规则中的源地址可能会变为 0.0.0.0/0。 -
其他修改规则的方法:先通过编号删除规则,再在原编号位置添加一条规则。
-
修改指定表的指定链的默认策略(默认动作),并非修改规则,可以使用如下命令
命令语法:iptables -t 表名 -P 链名 动作,示例: iptables -t filter -P FORWARD ACCEPT 表示将 filter 表中 FORWARD 链的默认策略修改为 ACCEPT
保存规则
方法一
-
CentOS6 中保存规则命令如下,表示将 iptables 规则保存至
/etc/sysconfig/iptables文件中,如果对应的操作没有保存,那么当重启 iptables 服务以后service iptables save -
CentOS7 中保存
CentOS7 已经不再使用 init 风格的脚本启动服务,而是使用 unit 文件,所以,在 centos7 中已经不能再使用类似 service iptables start 这样的命令了,所以 service iptables save也无法执行,同时,在centos7中,使用firewall替代了原来的iptables service,不过不用担心, 我们只要通过yum源安装iptables与iptables-services即可(iptables一般会被默认安装,但是iptables-services在centos7中一般不会被默认安装), 在centos7中安装完iptables-services后,即可像centos6中一样,通过service iptables save命令保存规则了,规则同样保存在 /etc/sysconfig/iptables文件中。 此处给出 centos7 中配置 iptables-service 的步骤 # 配置好 yum 源以后安装 iptables-service yum install -y iptables-services # 停止firewalld systemctl stop firewalld # 禁止firewalld自动启动 systemctl disable firewalld # 启动iptables systemctl start iptables # 将iptables设置为开机自动启动,以后即可通过 iptables-service 控制 iptables 服务 systemctl enable iptables 上述配置过程只需一次,以后即可在 centos7 中愉快的使用 service iptables save 命令保存 iptables 规则了。
方法二
-
保存
iptables-save > /etc/sysconfig/iptables -
重载
使用如下命令从指定的文件载入规则,注意:重载规则时,文件中的规则将会覆盖现有规则: iptables-restore < /etc/sysconfig/iptables
1767

被折叠的 条评论
为什么被折叠?



