????????????????iptables?-t?表名?-R?链名?规则序号?-s?源地址?-j?处理动作
????????接着上面的例子,假如我们想把下面的规则中的动作从DROP改为ACCEPT
????????可以使用-R选项来修改指定的链中的规则,在修改规则时指定规则对应的编号即可,如图所示:
????????上例中,-R选项表示修改指定的链,使用?-R?INOUT?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有什么不同呢?从字面上理解,
????????我们分别从133主机上向132主机上发起ping请求,有不同的结果:
DROP的现象
REJECT的现象
????????当132主机中的iptables规则对应的动作为REJECT时,从133上进行ping操作时,直接就提示”目标端口不可达”,并没有像之前那样卡在那里,看来,REJECT比DROP更加”干脆”。
????????一般每个链都有默认规则,即该链没有任何规则或者没有任何一条规则被匹配的情况下,对数据的放行策略是怎么样的。
????????当报文没有被链中的任何规则匹配到时,或者,当链中没有任何规则时,防火墙会按照默认动作处理报文,我们可以修改指定链的默认策略,使用如下命令即可
????????????????iptables?-t?表名?-P?链名?处理动作
????????使用-t指定要操作的表,使用-P选项指定要修改的链,上例中,-P?FORWARD?DROP表示将表中FORWRD链的默认策略改为DROP。
????????在默认的情况下,我们对”防火墙”所做出的修改都是”临时的”,换句话说就是,当重启iptables服务或者重启服务器以后,我们平常添加的规则或者对规则所做出的修改都将消失,为了防止这种情况的发生,我们需要将规则”保存”。
????????在centos6中,直接使用“service?iptables?save”命令即可保持规则,规则默认保存在/etc/sysconfig/iptables文件中,我系统使用的是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规则了。
????????当我们添加一条如下规则时,
????????使用保持规则命令
????????????????service?iptables?save
????????可以看到,新规则已经被保存到?/etc/sysconfig/iptables?中。当我们重启设备的时候,再次看规则,可以发现刚刚新加的REJECT?133的规则已经存在。