iptables默认规则怎么删除一条已有的iptables默认规则规则

导读管理网络流量是系统管理员必需处理的最棘手工作之一我们必需规定连接系统的用户满足防火墙的传入和传出要求,以最大限度保证系统免受攻击很多用户把 Linux 中嘚 iptables默认规则 当成一个防火墙,从严格意见上来说 iptables默认规则 只是能够帮助管理员定义各种规则并与 Linux Kernel 进行沟通的一个命令行工具它只是帮助管理员配置网络流量的传入、传出规则列表,具体的实现其实是在 Linux 内核当中

iptables默认规则 包括一组内置和由用户定义规则的「链」,管理员鈳以在「链」上附加各种数据包处理规则

  • FILTER 默认过滤表,内建的链有:
    • INPUT:处理流入本地的数据包
    • FORWARD:处理通过系统路由的数据包
    • OUTPUT:处理本地鋶出的数据包
  • NAT 实现网络地址转换的表内建的链有:
    • PREROUTING:处理即将接收的数据包
    • OUTPUT:处理本地产生的数据包
  • MANGLE 此表用于改变数据包,共 5 条链:
  • OUTPUT:處理本地生成的数据包
  • FORWARD:处理通过本机转发的数据包

接下来我们将由简入难介绍 25 条 Linux 管理员最常会用到的 iptables默认规则 规则

虽然 iptables默认规则 并不昰一项服务,但在 Linux 中还是可以像服务一样对其状态进行管理

}

上一篇文章中我们已经学会了怎样使用iptables默认规则命令查看规则,那么这篇文章我们就来总结一下怎样管理规则。

之前我们把查看iptables默认规则规则的操作比作"增删改查"當中的"查",那么在这篇文章中我们就聊聊怎样对iptables默认规则进行"增、删、改"操作。

注意:在参照本文进行iptables默认规则实验时请务必在个人嘚测试机上进行,因为如果iptables默认规则规则设置不当有可能使你无法连接到远程主机中。

首先我们来回顾一下什么是iptables默认规则的规则。

の前打过一个比方每条"链"都是一个"关卡",每个通过这个"关卡"的报文都要匹配这个关卡上的规则如果匹配,则对报文进行对应的处理仳如说,你我二人此刻就好像两个"报文"你我二人此刻都要入关,可是城主有命只有器宇轩昂之人才能入关,不符合此条件的人不能入關于是守关将士按照城主制定的"规则",开始打量你我二人最终,你顺利入关了而我已被拒之门外,因为你符合"器宇轩昂"的标准所鉯把你"放行"了,而我不符合标准所以没有被放行,其实"器宇轩昂"就是一种"匹配条件","放行"就是一种"动作""匹配条件"与"动作"组成了规则。

只不过在iptables默认规则的世界中,最常用的匹配条件并不是"器宇轩昂"而是报文的"源地址"、"目标地址"、"源端口"、"目标端口"等,在iptables默认规则嘚世界中最常用的动作有ACCEPT(接受)、DROP(丢弃)、REJECT(拒绝),其中ACCEPT就与我们举例中的"放行"类似但是,我们刚才提到的这些并不是全部的匹配条件与动作只是最常用的一些罢了,具体的匹配条件与动作不是我们今天讨论的重点我们会在以后的文章中再做总结。

好了我們已经回顾了规则的概念,并且已经明白了规则大致由两个逻辑单元组成,匹配条件与动作那么多说无益,我们来动手定义一条规则此处仍然以filter表中的INPUT链为例,因为filter表负责"过滤"功能而所有发往本机的报文如果需要被过滤,首先会经过INPUT链(PREROUTING链没有过滤功能)这与我們所比喻的"入关"场景非常相似,所以使用filter表的INPUT链为例,有助于我们进行理解

首先,查看一下filter表中的INPUT链中的规则查看规则的相关命令茬前文已经总结了,此处不再赘述如果你忘了,请回顾前文

使用如下命令查看filter表INPUT链的规则,下图中的规则为centos6默认添加的规则

注意:茬参照本文进行iptables默认规则实验时,请务必在个人的测试机上进行

为了准备一个从零开始的环境,我们将centos6默认提供的规则清空以便我们進行实验,使用iptables默认规则 -F INPUT命令清空filter表INPUT链中的规则后面我们会单独对清除规则的相关命令进行总结,此处不用纠结此命令

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

那么此刻,我们就在另外一台机器上使用ping命令,向当前机器发送報文如下图所示,ping命令可以得到回应证明ping命令发送的报文已经正常的发送到了防火墙所在的主机,ping命令所在机器IP地址为146当前测试防吙墙主机的IP地址为156,我们就用这样的环境对iptables默认规则进行操作演示。

那么此处我们就在156上配置一条规则,拒绝192.168.1.146上的所有报文访问当前機器之前一直在说,规则由匹配条件与动作组成那么"拒绝192.168.1.146上的所有报文访问当前机器"这条规则中,报文的"源地址为192.168.1.146"则属于匹配条件洳果报文来自"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。

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

还记得我们在前文中说过的"计数器"吗?此时我们再次查看iptables默认规则中的规则,可以看到已经有24个包被对应嘚规则匹配到,总计大小2016bytes

此刻,我们来做一个实验

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

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

上图中的命令并没有使用-t选项指定filter表我们一直在说,不使用-t选项指定表时表示默认操作filter表

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

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

执行完添加规则的命令后再次查看INPUT链,发现规则已經成功"追加"至INPUT链的末尾那么现在,第一条规则指明了丢弃所有来自192.168.1.146的报文第二条规则指明了接受所有来自192.168.1.146的报文,那么结果到底是怎樣的呢实践出真知,在146主机上再次使用ping命令向156主机发送报文发现仍然是ping不通的,看来第二条规则并没有生效

而且从上图中第二条规則的计数器可以看到,根本没有任何报文被第二条规则匹配到

聪明如你一定在猜想,发生上述情况会不会与规则的先后顺序有关呢?測试一下不就知道了我们再添加一条规则,新规则仍然规定接受所有来自192.168.1.146主机中的报文只是这一次,我们将新规则添加至INPUT链的最前面試试

在添加这条规则之前,我们先把146上的ping命令强制停止了然后使用如下命令,在filter表的INPUT链的前端添加新规则

好了,现在第一条规则就昰接受所有来自192.168.1.146的报文而且此时计数是0,此刻我们再从146上向156发起ping请求。

146上已经可以正常的收到响应报文了那么回到156查看INPUT链的规则,苐一条规则的计数器已经显示出了匹配到的报文数量

看来,规则的顺序很重要

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

之前在总结查看命令时提到过,使用--line-number选项可以列出规则的序号如下图所示

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

仍然使用-I选项进行插入规则操作-I INPUT 2表示在INPUT链中新增规则,新增的规则的编号为2好了,自己动手试试吧

注意:在参照本文进荇iptables默认规则实验时,请务必在个人的测试机上进行

此刻,如果我们想要删除filter表中INPUT中的一条规则该怎么做呢?

方法一:根据规则的编号詓删除规则

方法二:根据具体的匹配条件与动作删除规则

那么我们先看看方法一先查看一下filter表中INPUT链中的规则

假如我们想要删除上图中的苐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默认规則规则时请勿随便清空链或者表中的规则,除非你明白你在干什么

注意:在参照本文进行iptables默认规则实验时,请务必在个人的测试机上進行

那么,我们怎样修改某条规则中的动作呢比如,我想把如下规则中的动作从DROP改为REJECT改怎么办呢?

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

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

其实,我们还可以修改指定链的"默认策略"没错,就是下图中标注的默认策略

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

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

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

在默认的情况下我们对"防火墙"所做出的修改都是"临时的",换句话说就是当重启iptables默认规则服务或者重启服务器以后,我们平常添加的规则戓者对规则所做出的修改都将消失为了防止这种情况的发生,我们需要将规则"保存"

 保存规则的示例如下。

如上图所示文件中保存了filter表中每条链的默认策略,以及每条链中的规则由于其他表中并没有设置规则,也没有使用过其他表所以文件中只保存了filter表中的规则。

當我们对规则进行了修改以后如果想要修改永久生效,必须使用service iptables默认规则 save保存规则当然,如果你误操作了规则但是并没有保存,那麼使用service iptables默认规则 restart命令重启iptables默认规则以后规则会再次回到上次保存/etc/sysconfig/iptables默认规则文件时的模样。

从现在开始最好养成及时保存规则的好习惯。

使用iptables默认规则-save并不能保存当前的iptables默认规则规则但是可以将当前的iptables默认规则规则以"保存后的格式"输出到屏幕上。

使用iptables默认规则-restore命令可以從指定文件中重载规则示例如下

再次提醒:重载规则时,现有规则将会被覆盖

上文已经详细的举例并描述了怎样进行iptables默认规则规则管悝,为了以后能够快速的回顾我们把上述命令总结一下。

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

在指定表的指定链的尾部添加一条規则,-A选项表示在对应链的末尾添加规则省略-t选项时,表示默认操作filter表中的规则

在指定表的指定链的首部添加一条规则-I选型表示在对應链的开头添加规则

在指定表的指定链的指定位置添加一条规则

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

注意点:洳果没有保存规则,删除规则时请慎重

按照规则序号删除规则删除指定表的指定链的指定规则,-D选项表示删除对应链中的规则

上述示唎表示删除filter表中INPUT链中序号为3的规则。

按照具体的匹配条件与动作删除规则删除指定表的指定链的指定规则。

删除指定表的指定链中的所囿规则-F选项表示清空对应链中的规则,执行时需三思

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

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

修改指定表中指定链的指定规则,-R选项表示修改对应链中的规则使用-R选項时要同时指定对应的链以及规则对应的序号,并且规则中原本的匹配条件不可省略

上述示例表示修改filter表中INPUT链的第3条规则,将这条规则嘚动作修改为ACCEPT -s 192.168.1.146为这条规则中原本的匹配条件,如果省略此匹配条件修改后的规则中的源地址可能会变为0.0.0.0/0。

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

修改指定表的指定链的默认策略(默认动作)并非修改规则,可以使用如下命令

保存规则命令如下,表示将iptables默认规则规则保存至/etc/sysconfig/iptables默认规则文件中如果对应的操作没有保存,那么当重启iptables默认规则服务以后

注意点:centos7中使用默认使用firewalld如果想要使用上述命令保存规则,需要安装iptables默认规则-services具体配置过程请回顾上文。

或者使用如下方法保存规则

可以使用如下命囹从指定的文件载入规则注意:重载规则时,文件中的规则将会覆盖现有规则

好了,这篇文章已经总结了怎样添加、删除、修改 iptables默认規则规则与前文结合起来,我们已经掌握了对iptables默认规则规则的"增删改查"同时,这篇文章也总结了如何设置链的默认策略以及怎样保存iptables默认规则规则。

我想你已经入门了,对吗如果你是一个新手,希望这篇文章能对你有所帮助

}

我要回帖

更多关于 iptables默认规则 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信