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

参考 http://www.zsythink.net/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链中的规则

iptables详解(3):iptables规则管理

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

1. 增加规则

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

iptables详解(3):iptables规则管理

上图中,使用 -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通。

iptables详解(3):iptables规则管理

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

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

iptables详解(3):iptables规则管理

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

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

iptables详解(3):iptables规则管理

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

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

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

iptables详解(3):iptables规则管理

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

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

iptables详解(3):iptables规则管理

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

2. 删除规则

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

iptables详解(3):iptables规则管理

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

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

iptables详解(3):iptables规则管理

上图中,删除对应规则时,仍然使用-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选项修改指定的链中的规则,在修改规则时指定规则对应的编号即可(有坑,慎行),示例命令如下

iptables详解(3):iptables规则管理

上例中,-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时有什么不同。

iptables详解(3):iptables规则管理

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

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

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

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

iptables详解(3):iptables规则管理

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

正文

转载参考网址: http://www.zsythink.net/archives/1199

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

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

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

iptables详解(2):iptables实际操作之规则查询

上例中,我们使用-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 链名,比如: iptables详解(2):iptables实际操作之规则查询

我们可以使用-v选项,查看出更多的、更详细的信息,示例如下。 iptables详解(2):iptables实际操作之规则查询

可以看到,使用-v选项后,iptables为我们展示的信息更多了,那么,这些字段都是什么意思呢?
其实,这些字段就是规则对应的属性,说白了就是规则的各种信息,那么我们来总结一下这些字段的含义。
pkts:  对应规则匹配到的报文的个数。
bytes:对应匹配到的报文包的大小总和。
target:规则对应的target,往往表示规则对应的"动作",即规则匹配成功后需要采取的措施。
prot:表示规则对应的协议,是否只针对某些协议应用此规则。
opt:表示规则对应的选项。
in:表示数据包由哪个接口(网卡)流入,我们可以设置通过哪块网卡流入的报文需要匹配当前规则。
out:表示数据包由哪个接口(网卡)流出,我们可以设置通过哪块网卡流出的报文需要匹配当前规则。
source:表示规则对应的源头地址,可以是一个IP,也可以是一个网段。
destination:表示规则对应的目标地址。可以是一个IP,也可以是一个网段。

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

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

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

如果你习惯了查看有序号的列表,你在查看iptables表中的规则时肯定会很不爽,没有关系,满足你,使用--line-numbers即可显示规则的编号,示例如下。 iptables详解(2):iptables实际操作之规则查询

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

如上图,表中的每个链的后面都有一个括号,括号里面有一些信息,如下图红色标注位置,那么这些信息都代表了什么呢? iptables详解(2):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选项时,才会显示出来。
当被匹配到的包达到一定数量时,计数器会自动将匹配到的包的大小转换为可读性较高的单位,如下图所示。 iptables详解(2):iptables实际操作之规则查询
如果你想要查看精确的计数值,而不是经过可读性优化过的计数值,那么你可以使用-x选项,表示显示精确的计数值,示例如下。 iptables详解(2):iptables实际操作之规则查询
每张表中的每条链都有自己的计数器,链中的每个规则也都有自己的计数器,没错,就是每条规则对应的pkts字段与bytes字段的信息。

  • 3
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
删除iptables防火墙规则,可以使用以下命令: iptables -D \[链名称\] \[规则编号\] 其中,\[链名称\]是要删除规则的链的名称,可以是INPUT、FORWARD或OUTPUT等。\[规则编号\]是要删除规则在链中的编号。 例如,如果要删除INPUT链中的第一条规则,可以使用以下命令: iptables -D INPUT 1 请注意,删除规则后,iptables防火墙的配置文件不会自动更新。如果希望永久删除规则,需要手动编辑配置文件并保存。 引用\[2\]中的命令示例展示了如何添加删除规则,可以根据需要进行参考和修改。 #### 引用[.reference_title] - *1* [iptables基本管理的删除、清空指定的防火墙规则](https://blog.csdn.net/Z_xiao_feng/article/details/90649008)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [iptables防火墙规则添加删除修改、保存](https://blog.csdn.net/smh821025/article/details/43957111)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [linux的iptable规则配置-删除规则](https://blog.csdn.net/qq_35488367/article/details/129381176)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值