2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > iptables 2: 规则的查看 添加 删除 修改

iptables 2: 规则的查看 添加 删除 修改

时间:2019-01-01 20:31:43

相关推荐

iptables 2: 规则的查看 添加 删除 修改

参考 /archives/1517

命令小结

1. 规则查看

查看对应表的所有规则

iptables -t 表名 -nvL

查看指定链的所有规则

iptables -t 表名 -nvL 链名

参数含义

-t选项指定要操作的表,省略"-t 表名"时,默认表示操作filter表

-L表示列出规则,即查看规则

-v显示更多信息

-n不对地址进行名称反解,直接显示ip地址

--line-numbers 或--line,显示规则的序号

-x计数器中的信息显示为精确的计数值,而不是经过可读优化的计数值。

iptalbes -t nat -nvL

iptables -t nat -nvL INPUT

1. 添加规则

注意点:添加规则时,规则的顺序非常重要

(1) -A尾部添加

在指定表的指定链的尾部添加一条规则,-A选项表示在对应链的末尾添加规则

示例:iptables -t filter -A IPUT -s 192.168.1.146 -j DROP

语法:iptables -t 表名 -A 链名 匹配条件 -j 动作

(2) -I 头部添加

在指定表的指定链的首部添加一条规则,-I选型表示在对应链的开头添加规则 示例:iptables -t filter -I IPUT -s 192.168.1.146 -j DROP

语法:iptables -t 表名 -I 链名 匹配条件 -j 动作

(3) 指定位置添加

示例:iptables -t filter -I IPUT 3 -s 192.168.1.146 -j DROP

语法:iptables -t 表名 -I 链名 规则序号 匹配条件 -j 动作

(4) 设置指定表的指定链的默认策略(默认动作),并非添加规则。

示例: iptables -t filter -P FORWARD ACCEPT

语法:iptables -t 表名 -P 链名 动作

2. 删除规则

(1) 按照规则序号删除规则

iptables -t filter -D INPUT 3

语法: iptables -t 表名 -D 链名 规则序号

(2) 按照具体的匹配条件与动作删除规则

iptables -t filter -D INPUT -s 192.168.1.146 -j DROP

语法: iptables -t 表名 -D 链名 匹配条件 -j 动作

(3) 删除指定表的指定链中的所有规则,-F选项表示清空对应链中的规则。

iptables -t filter -F INPUT

语法: iptables -t 表名 -F 链名

(4) 删除指定表中的所有规则,执行时需三思。

iptables -t filter -F

语法: iptables -t 表名 -F

3. 修改规则

注意点:如果使用-R选项修改规则中的动作,那么必须指明原规则中的原匹配条件,例如源IP,目标IP等。

iptables -t filter -R INPUT 3 -s 192.168.1.146 -j ACCEPT

语法: iptables -t 表名 -R 链名 规则序号 匹配条件 -j 动作

其他修改规则的方法:先通过编号删除规则,再在原编号位置添加一条规则。

single-content

正文

使用iptables -F INPUT命令清空filter表INPUT链中的规则

清空INPUT链以后,filter表中的INPUT链已经不存在任何的规则,但是可以看出,INPUT链的默认策略是ACCEPT,也就是说,INPUT链默认"放行"所有发往本机的报文,当没有任何规则时,会接受所有报文,当报文没有被任何规则匹配到时,也会默认放行报文。

1. 增加规则

那么此处,我们就在156上配置一条规则,拒绝192.168.1.146上的所有报文访问当前机器

上图中,使用 -t选项指定了要操作的表,此处指定了操作filter表,与之前的查看命令一样,不使用-t选项指定表时,默认为操作filter表。

使用-I选项,指明将"规则"插入至哪个链中,-I表示insert,即插入的意思,所以-I INPUT表示将规则插入于INPUT链中,即添加规则之意。

使用-s选项,指明"匹配条件"中的"源地址",即如果报文的源地址属于-s对应的地址,那么报文则满足匹配条件,-s为source之意,表示源地址。

使用-j选项,指明当"匹配条件"被满足时,所对应的动作,上例中指定的动作为DROP,在上例中,当报文的源地址为192.168.1.146时,报文则被DROP(丢弃)。

再次查看filter表中的INPUT链,发现规则已经被添加了,在iptables中,动作被称之为"target",所以,上图中taget字段对应的动作为DROP。

那么此时,我们再通过192.168.1.146去ping主机156,看看能否ping通。

如上图所示,ping 156主机时,PING命令一直没有得到回应,看来我们的iptables规则已经生效了,ping发送的报文压根没有被156主机接受,而是被丢弃了,所以更不要说什么回应了。

此时,我们再次查看iptables中的规则,可以看到,已经有24个包被对应的规则匹配到,总计大小bytes。

现在INPUT链中已经存在了一条规则,它拒绝了所有来自192.168.1.146主机中的报文,如果此时,我们在这条规则之后再配置一条规则,后面这条规则规定,接受所有来自192.168.1.146主机中的报文,那么,iptables是否会接受来自146主机的报文呢?我们动手试试。

使用如下命令在filter表的INPUT链中追加一条规则,这条规则表示接受所有来自192.168.1.146的发往本机的报文。

上图中,使用-A选项,表示在对应的链中"追加规则",-A为append之意,所以,-A INPUT则表示在INPUT链中追加规则,而之前示例中使用的-I选项则表示在链中"插入规则",聪明如你一定明白了,它们的本意都是添加一条规则,只是-A表示在链的尾部追加规则,-I表示在链的首部插入规则而已。

使用-j选项,指定当前规则对应的动作为ACCEPT。

在146主机上再次使用ping命令向156主机发送报文,发现仍然是ping不通的,看来第二条规则并没有生效。而且从上图中第二条规则的计数器可以看到,根本没有任何报文被第二条规则匹配到。

如果报文已经被前面的规则匹配到,iptables则会对报文执行对应的动作,即使后面的规则也能匹配到当前报文,很有可能也没有机会再对报文执行相应的动作了,就以上图为例,报文先被第一条规则匹配到了,于是当前报文被"放行"了,因为报文已经被放行了,所以,即使上图中的第二条规则即使能够匹配到刚才"放行"的报文,也没有机会再对刚才的报文进行丢弃操作了。这就是iptables的工作机制。

我们也可以在添加规则时,指定新增规则的编号,这样我们就能在任意位置插入规则了,我们只要把刚才的命令稍作修改即可,如下。

仍然使用-I选项进行插入规则操作,-I INPUT 2表示在INPUT链中新增规则,新增的规则的编号为2

2. 删除规则

假如我们想要删除上图中的第3条规则,则可以使用如下命令。

上例中,使用了-t选项指定了要操作的表(没错,省略-t默认表示操作filter表),使用-D选项表示删除指定链中的某条规则,-D INPUT 3表示删除INPUT链中的第3条规则。

当然,我们也可以根据具体的匹配条件与动作去删除规则,比如,删除下图中源地址为192.168.1.146,动作为ACCEPT的规则,于是,删除规则的命令如下。

上图中,删除对应规则时,仍然使用-D选项,-D INPUT表示删除INPUT链中的规则,剩下的选项与我们添加规则时一毛一样,-s表示以对应的源地址作为匹配条件,-j ACCEPT表示对应的动作为接受,所以,上述命令表示删除INPUT链中源地址为192.168.1.146,动作为ACCEPT的规则。

而删除指定表中某条链中的所有规则的命令,我们在一开始就使用到了,就是"iptables -t 表名 -F 链名"

-F选项为flush之意,即冲刷指定的链,即删除指定链中的所有规则,但是注意,此操作相当于删除操作,在没有保存iptables规则的情况下,请慎用。

其实,-F选项不仅仅能清空指定链上的规则,其实它还能清空整个表中所有链上的规则,不指定链名,只指定表名即可删除表中的所有规则,命令如下

iptables -t 表名 -F

3. 修改规则

我们可以使用-R选项修改指定的链中的规则,在修改规则时指定规则对应的编号即可(有坑,慎行),示例命令如下

上例中,-R选项表示修改指定的链,使用-R INPUT 1表示修改INPUT链的第1条规则,使用-j REJECT表示将INPUT链中的第一条规则的动作修改为REJECT,注意:上例中, -s选项以及对应的源地址不可省略,即使我们已经指定了规则对应的编号,但是在使用-R选项修改某个规则时,必须指定规则对应的原本的匹配条件(如果有多个匹配条件,都需要指定)。

如果上例中的命令没有使用-s指定对应规则中原本的源地址,那么在修改完成后,你修改的规则中的源地址会自动变为0.0.0.0/0(此IP表示匹配所有网段的IP地址),而此时,-j对应的动作又为REJECT,所以在执行上述命令时如果没有指明规则原本的源地址,那么所有IP的请求都被拒绝了(因为没有指定原本的源地址,当前规则的源地址自动变为0.0.0.0/0),如果你正在使用ssh远程到服务器上进行iptables设置,那么你的ssh请求也将会被阻断。

既然使用-R选项修改规则时,必须指明规则原本的匹配条件,那么我们则可以理解为,只能通过-R选项修改规则对应的动作了,所以我觉得,如果你想要修改某条规则,还不如先将这条规则删除,然后在同样位置再插入一条新规则,这样更好,当然,如果你只是为了修改某条规则的动作,那么使用-R选项时,不要忘了指明规则原本对应的匹配条件。

DROP与REJECT有什么不同呢?从字面上理解,DROP表示丢弃,REJECT表示拒绝,REJECT表达的意思好像更坚决一点,我们再次从146主机上向156主机上发起ping请求,看看与之前动作为DROP时有什么不同。

如上图所示,当156主机中的iptables规则对应的动作为REJECT时,从146上进行ping操作时,直接就提示"目标不可达",并没有像之前那样卡在那里,看来,REJECT比DROP更加"干脆"。

修改指定链的"默认策略"

每张表的每条链中,都有自己的默认策略,我们也可以理解为默认"动作"。

当报文没有被链中的任何规则匹配到时,或者,当链中没有任何规则时,防火墙会按照默认动作处理报文,我们可以修改指定链的默认策略,使用如下命令即可。

使用-t指定要操作的表,使用-P选项指定要修改的链,上例中,-P FORWARD DROP表示将表中FORWRD链的默认策略改为DROP。

正文

转载参考网址: /archives/1199

在之前的文章中,我们已经总结过,iptables为我们预定义了4张表,它们分别是raw表、mangle表、nat表、filter表,不同的表拥有不同的功能。

filter负责过滤功能,比如允许哪些IP地址访问,拒绝哪些IP地址访问,允许访问哪些端口,禁止访问哪些端口,filter表会根据我们定义的规则进行过滤,filter表应该是我们最常用到的表了,所以此处,我们以filter表为例,开始学习怎样实际操作iptables。

怎样查看filter表中的规则呢?使用如下命令即可查看。

上例中,我们使用-t选项,指定要操作的表,使用-L选项,查看-t选项对应的表的规则,-L选项的意思是,列出规则,所以,上述命令的含义为列出filter表的所有规则,注意,上图中显示的规则(绿色标注的部分为规则)是Centos6启动iptables以后默认设置的规则,我们暂且不用在意它们,上图中,显示出了3条链(蓝色标注部分为链),INPUT链、FORWARD链、OUTPUT链,每条链中都有自己的规则,前文中,我们打过一个比方,把"链"比作"关卡",不同的"关卡"拥有不同的能力,所以,从上图中可以看出,INPUT链、FORWARD链、OUTPUT链都拥有"过滤"的能力,所以,当我们要定义某条"过滤"的规则时,我们会在filter表中定义,但是具体在哪条"链"上定义规则呢?这取决于我们的工作场景。比如,我们需要禁止某个IP地址访问我们的主机,我们则需要在INPUT链上定义规则。因为,我们在理论总结中已经提到过,报文发往本机时,会经过PREROUTING链与INPUT链(如果你没有明白,请回顾前文),所以,如果我们想要禁止某些报文发往本机,我们只能在PREROUTING链和INPUT链中定义规则,但是PREROUTING链并不存在于filter表中,换句话说就是,PREROUTING关卡天生就没有过滤的能力,所以,我们只能在INPUT链中定义,当然,如果是其他工作场景,可能需要在FORWARD链或者OUTPUT链中定义过滤规则。

话说回来,我们继续聊怎样查看某张表中的规则。

我们可以使用iptables -t 表名 -L命令列出filter表中的所有规则,示例如下。

iptables -t raw -L

iptables -t mangle -L

iptables -t nat -L

其实,我们可以省略-t filter,当没有使用-t选项指定表时,默认为操作filter表,即iptables -L表示列出filter表中的所有规则。

我们还可以只查看指定表中的指定链的规则,使用-L 链名,比如:

我们可以使用-v选项,查看出更多的、更详细的信息,示例如下。

可以看到,使用-v选项后,iptables为我们展示的信息更多了,那么,这些字段都是什么意思呢?

其实,这些字段就是规则对应的属性,说白了就是规则的各种信息,那么我们来总结一下这些字段的含义。

pkts:对应规则匹配到的报文的个数。

bytes:对应匹配到的报文包的大小总和。

target:规则对应的target,往往表示规则对应的"动作",即规则匹配成功后需要采取的措施。

prot:表示规则对应的协议,是否只针对某些协议应用此规则。

opt:表示规则对应的选项。

in:表示数据包由哪个接口(网卡)流入,我们可以设置通过哪块网卡流入的报文需要匹配当前规则。

out:表示数据包由哪个接口(网卡)流出,我们可以设置通过哪块网卡流出的报文需要匹配当前规则。

source:表示规则对应的源头地址,可以是一个IP,也可以是一个网段。

destination:表示规则对应的目标地址。可以是一个IP,也可以是一个网段。

细心如你一定发现了,上图中的源地址与目标地址都为anywhere,看来,iptables默认为我们进行了名称解析,但是在规则非常多的情况下如果进行名称解析,效率会比较低,所以,在没有此需求的情况下,我们可以使用-n选项,表示不对IP地址进行名称反解,直接显示IP地址,示例如下。

如上图所示,规则中的源地址与目标地址已经显示为IP,而非转换后的名称。

当然,我们也可以只查看某个链的规则,并且不让IP进行反解,这样更清晰一些,比如 iptables -nvL INPUT

如果你习惯了查看有序号的列表,你在查看iptables表中的规则时肯定会很不爽,没有关系,满足你,使用--line-numbers即可显示规则的编号,示例如下。

–line-numbers选项并没有对应的短选项,不过我们缩写成–line时,centos中的iptables也可以识别。

如上图,表中的每个链的后面都有一个括号,括号里面有一些信息,如下图红色标注位置,那么这些信息都代表了什么呢?

上图中INPUT链后面的括号中包含policy ACCEPT ,0 packets,0bytes 三部分。

policy表示当前链的默认策略,policy ACCEPT表示上图中INPUT的链的默认动作为ACCEPT,换句话说就是,默认接受通过INPUT关卡的所有请求,所以我们在配置INPUT链的具体规则时,应该将需要拒绝的请求配置到规则中,说白了就是"黑名单"机制,默认所有人都能通过,只有指定的人不能通过,当我们把INPUT链默认动作设置为接受(ACCEPT),就表示所有人都能通过这个关卡,此时就应该在具体的规则中指定需要拒绝的请求,就表示只有指定的人不能通过这个关卡,这就是黑名单机制,但是,你一定发现了,上图中所显示出的规则,大部分都是接受请求(ACCEPT),并不是想象中的拒绝请求(DROP或者REJECT),这与我们所描述的黑名单机制不符啊,按照道理来说,默认动作为接受,就应该在具体的规则中配置需要拒绝的人,但是上图中并不是这样的,之所以出现上图中的情况,是因为IPTABLES的工作机制导致到,上例其实是利用了这些"机制",完成了所谓的"白名单"机制,并不是我们所描述的"黑名单"机制,我们此处暂时不用关注这一点,之后会进行详细的举例并解释,此处我们只要明白policy对应的动作为链的默认动作即可,或者换句话说,我们只要理解,policy为链的默认策略即可。

packets表示当前链(上例为INPUT链)默认策略匹配到的包的数量,0 packets表示默认策略匹配到0个包。

bytes表示当前链默认策略匹配到的所有包的大小总和。

其实,我们可以把packets与bytes称作"计数器",上图中的计数器记录了默认策略匹配到的报文数量与总大小,"计数器"只会在使用-v选项时,才会显示出来。

当被匹配到的包达到一定数量时,计数器会自动将匹配到的包的大小转换为可读性较高的单位,如下图所示。

如果你想要查看精确的计数值,而不是经过可读性优化过的计数值,那么你可以使用-x选项,表示显示精确的计数值,示例如下。

每张表中的每条链都有自己的计数器,链中的每个规则也都有自己的计数器,没错,就是每条规则对应的pkts字段与bytes字段的信息。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。