【Iptables】03 Iptables规则管理

特别说明:此系列博文根据 朱双印博客-iptables系列博文,个人实践后总结,此为个人笔记精简版,更通俗易懂请参考 朱双印博客-iptables系列博文 原文内容,诸君必能有所收获

03 Iptables规则管理
  • 清空INPUT链的原有规则

    iptables -F INPUT

增加规则

例如,我们想增加一条规则,规则策略是拒绝192.168.200.115的所有报文访问本机,我们输入以下命令

iptables -t filter -I INPUT -s 192.168.200.115 -j DROP

查看一下规则是否添加成功,iptables -t filter -nvl INPUT
在这里插入图片描述
上图中,使用 -t 选项指定了我们要操作的表filter,不指定时,默认为filter;使用 -I 选项,指明规则插入到哪条链中,-I 表示insert,即插入,由此选项才能添加规则,并且,默认插入到链的头部(序号为1);使用 -s 选项,指明匹配条件中的源地址,匹配时,当报文中的IP地址和源地址相同,就会触发规则匹配成功后的动作,-s 表示source,即源;使用 -j 选项,指明当匹配条件成功后,所对应的动作(target),此处是DROP,即动作为丢弃,规则成功匹配192.168.200.115后,就直接丢弃来自此IP的报文;

创建成功,我们试试看能不能从192.168.200.115 ping通本机(192.168.200.221)
在这里插入图片描述
可以看到,ping不通,看来filter表中 INPUT 链的规则成功匹配并执行了DROP动作

我们再来看下,如果有规则相悖会怎样,比如,我们有规则动作是接受192.168.200.115的报文,有规则为直接丢弃,最终结果会怎样,首先在之前有一条丢弃报文的基础上,添加一个接受的规则,即

iptables -t filter -A INPUT -s 192.168.200.115 -j ACCEPT

使用了 -A 选项,表示 append,追加规则到链尾部(序号最大),与 -I 选项刚好相反;并且,动作更改为了ACCEPT

添加成功后,查看一下,iptables -nvL INPUT 不指明表则默认查看filter表,现在再从192.168.200.115 ping 本机(192.168.200.221),结果如下
在这里插入图片描述
在这里插入图片描述
可以看到,ping不通,并且第二条规则连报文都没有接收到,没有匹配一个报文,pkts和bytes字段都是为0,根本没有起任何作用,看来报文都被第一条规则全部拦下并丢弃了

如果顺序变一下呢?会不会就直接ping通了呢,我们试着添加一套ACCEPT动作的规则,并且使用 -I 选项,添加到链的头部,让这条规则作为第一条来匹配报文

iptables -t filter -I INPUT -s 192.168.200.115 -j ACCEPT

确保添加成功可以查看一下,没有问题,再来看看192.168.200.115能ping通本机吧,结果如下
在这里插入图片描述
在这里插入图片描述
可以看到,ping通了,并且第一条规则也接受到了我们的3条报文;由此,我们必须注意规则的顺序,如果你的规则很多,顺序便可能是一个坑,如果想在增加规则的时候就指定规则的序号,我们可以 -I INPUT 2,表示在INPUT链的序号2的位置插入此条规则,即

iptables -t filter -I INPUT 2 -s 192.168.200.115 -j ACCEPT

查看INPUT链的规则序号,使用 iptables --line-number -nvL INPUT

删除规则

如果我们不小心写错了规则,那应该怎么办?

方法一:根据规则的序号,删除指定序号的规则

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

使用方法一,我们需要知道规则的序号,使用 --line-number 选项查询,我们查询下之前增加的规则,并试着删除一条
在这里插入图片描述
上图中,我们在查看了序号后,使用了带有 -D 选项的命令删除了序号3的规则,-D 表示delete,删除,INPUT 3指定了INPUT链的序号为3的规则

使用方法二,根据具体的匹配条件和动作去删除规则,如删除源地址为192.168.200.115,动作为DROP的规则

iptables -t filter -D INPUT -s 192.168.200.115 -j ACCEPT ,结果如下
在这里插入图片描述
如果我们想删除整条链,整个表的规则呢,一般情况下并不会这样,但是如果想,也是可以做到的,具体是使用

-F 选项;清除链的所有规则,使用 iptables -t 表名 -F 链名 ,如 iptables -t filter -F INPUT 表示清除filter表上INPUT链的所有规则;清除表的所有规则,使用 iptables -t 表名 -F ,即不指定链名,删除所有链的规则,也就删除了表的所有规则;需要注意的是,使用 -F 选项清除规则,在没有保存规则的情况下,想要恢复原有状态将不可能

修改规则

同样的,我们可以增加、删除规则,我们也可以修改规则,修改规则需要使用到 -R 选项,类似以下格式

iptables -t 表名 -R 链名 序号 匹配条件 动作 ,比如,如果我们想把ACCEPT更改为DROP,使用以下命令

iptables -t filter -R INPUT 1 -s 192.168.200.115 -j DROP ,执行成功,来查看一下是否变化
在这里插入图片描述
可以看到,之前的ACCEPT变成了DROP,需要注意的是,修改命令需要序号,并且匹配条件必须和原条件相同才能更改动作成功,如果 -s 选项没有指定对应的源地址,修改后的源地址将变为0.0.0.0/0,即所有IP,如果此时恰巧你修改了规则动作不为ACCEPT(即DROP ,REJECT),那么所有IP的报文到会被拒绝或丢弃,此时你的远程ssh也会断开连接,想要恢复,则必须到主机实地的更改,云主机也只能在控制台登录更改;

这样想来,如果想要更改动作,需要在更改时把匹配条件都加上才能成功,并且需要注意一定要指定源地址,如果想更改匹配条件,就只能删除重新创建一条新的规则了

如果我们想更改一条链的默认策略呢?这样就可以一次全部拒绝、丢弃,接受报文了,此时我们会用到 -P 选项

iptables -t 表名 -P 链名 动作 ,如更改INPUT链为全部丢弃,首先,我们先为ssh的端口定义一条接受的规则,以免等下更改INPUT链的默认策略后断开连接,匹配条件可以更加需要定义,这里我接受所有IP 对ssh端口的访问,iptables -t filter -I INPUT -s 0.0.0.0/0 -j ACCEPT ,然后就可以更改链的默认策略了,你可以更改INPUT链,但保险起见,最后使用FORWARD链作为实验,即使使用INPUT链也没关系,前提是你已经给ssh端口添加了一条动作为ACCEPT,匹配条件为相应IP的规则

我们更改一下,iptables -t filter -P INPUT DROP ,该命令将INPUT链的默认策略更改成了DROP,查看一下
在这里插入图片描述

保存规则

在默认情况下,我们对iptables进行的修改都是暂时的,一旦重启iptables或者主机,所有的规则都将会清空,当然,我们不想看到这样的情况,所有需要保存iptables的规则

CentOS6中保存规则,使用 service iptables save 命令,规则默认保存在/etc/sysconfig/iptables文件中,如果我们误操作了规则,但是没有保存,可以重启iptables服务,这样又会回到上次规则保存时,iptables 文件那个状态

CentOS7中,由于不再使用init风格的脚本启动服务,而是使用unit风格文件,所以CentOS7不再默认使用service 启动相关的服务,在CentOS7中,使用firewall替代了原来的iptables service ,如果想使用service启动iptables服务,需要yum源安装iptables与iptables-service;安装后,规则保存同CentOS6的文件路径

默认情况下,启动,停止,重启iptables服务使用systemctl start/stop/restart firewalld,但是如果想使用service来保存iptables规则,需要systemctl 来停止firewalld,并且systemctl disable firewalld将其禁止自启动

此后,启动,停止,重启iptables服务可以使用systemctl start/stop/restart iptables,然后将iptables加入自启动,systemctl enable iptables,这样,就能使用service iptables save 保存iptables规则了

Ubuntu中保存规则,可以使用iptables-persistent工具 ,下载工具

sudo apt-get install iptables-persistent

执行命令,进行保存,持久化

sudo netfilter-persistent save   # 保存
sudo netfilter-persistent reload   # 重新加载

通用的保存方案:即使用iptables-save命令,iptables-save命令并不能保存规则,但是会把规则打印到屏幕,使用iptables-save命令保存规则,就是将此命令的输出重定向到文件中,必要时重新加载该文件即可完成iptables规则的创建,但需要注意的是,文件是进行覆盖的,现有规则可能会消失

在网卡中加入以下内容,实现iptables规则随网卡状态保存加载

pre-up iptables-restore < /home/user/iptables.rules # 网卡开启,iptables加载iptables.rules文件规则
post-down iptables-save > /home/user/iptables.rules # 网卡停止,iptables规则保存到iptables.rules

重定向到文件 iptables-save > /home/user/iptables.rules

加载规则文件 iptables-restore < /home/user/iptables.rules

用的的一些参数:
pre-up: 网卡启用前的动作
up: 启用时候的动作
post-up: 启用后的动作
pre-down: 关闭前的动作
down: 关闭时动作
post-down: 关闭后动作

【Iptables】iptables目录
【Iptables】04 Iptables匹配条件总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值