iptables详解(2)表中规则管理(增删改查)
我们定义了四张表:raw表、mangle表、nat表、filter表,不同的表有不同的功能
filter表用来过滤,允许哪些ip、端口访问,禁止哪些ip、端口访问,表中会有很多链
①禁止ip地址访问我们主机------>发往本机的经过PREROUTING,但是PREROUTING不在filter表中,因此PREROUTING没有过滤能力,只能定义在INPUT链
②转发到另一个地方 则需要在FORWARD链或者OUTPUT链中定义
一、基本操作
1、查看
iptables -t表名 -nvL –line-number
1 | iptables --line -t filter -nvxL INPUT |
-t 加表名-L加链名
-L 查看当前表的所有规则,默认查看的是filter表,如果要查看NAT表,可以加上-t NAT参数 -L加上链名
-n 不对ip地址进行反查,直接显示ip地址,加上这个参数显示速度会快很多
-v 输出详细信息,verbose显示详细信息,包含通过该规则的数据包数量,总字节数及相应的网络接口
–line-number 显示规则的序列号,这个参数在删除或修改规则时会用到
-x精确计算
参数解释:
1 2 3 4 5 | root@ROUTER:~# iptables --line -nvL INPUT Chain INPUT (policy ACCEPT 6177 packets, 579K bytes) num pkts bytes target prot opt in out source destination 1 14778 1394K wan_input_chain all -- * * 0.0.0.0/0 0.0.0.0/0 2 14778 1394K lan_input_chain all -- * * 0.0.0.0/0 0.0.0.0/0 |
policy 表示链的默认策略,默认是ACCEPT,该策略收到了6177个包,iptables -nvxL 可以将省略的k信息显示出来
2、添加
添加规则有两个参数:-A和-I。其中-A是添加到规则的末尾;-I可以插入到指定位置,没有指定位置的话默认插入到规则的首部。
1 Append
在指定表的指定链的指定尾部添加一条规则,-A表示在对应链的末尾添加规则,省略-t选项,表示默认操作filter表
1 2 | 命令语法:iptables -t 表名 -A 链名 匹配条件 -j 动作 示例:iptables -t filter -A INPUT -s 192.168.1.146 -j DROP |
2 Insert
在指定链的指定首部添加一条规则,-I默认是表示在对应链的开头添加规则,加上序号后则表示为在当前的序号位置添加一条规则,则底下的规则会往下移一位
1 2 | 命令语法:iptables -t 表名 -I 链名 规则序号 匹配条件 -j 动作 示例:iptables -t filter -I INPUT 5 -s 192.168.1.146 -j ACCEPT |
示例操作:
步骤①加入append
1 | iptables -A INPUT -s 192.168.23.242 -j DROP |
步骤② 插入insert
1 | iptables -I INPUT 2 -s 192.168.23.242 -j ACCEPT |
3、删除
1 具体匹配规则删除
1 2 | 命令语法:iptables -t 表名 -D 链名 匹配条件 -j 动作 示例:iptables -t filter -D INPUT -s 192.168.1.146 -j DROP |
2 按--line按删除规则,-D表示删除对应链中的规则
1 2 | 命令语法:iptables -t 表名 -D 链名 规则序号 示例:iptables -t filter -D INPUT 3 |
3 清空指定表和链中的所有规则
1 2 | 命令语法:iptables -t 表名 -F 链名 示例:iptables -t filter -F INPUT |
4 清空表中的所有规则
1 2 | 命令语法:iptables -t 表名 -F 示例:iptables -t filter -F<br><br>或者iptables –flush |
示例操作:
步骤① 删除匹配条件的规则
1 | iptables -D INPUT -s 192.168.23.242 -j ACCEPT |
步骤② 按照 --line 的行号去删除(省去写一大串规则的时间)
1 | iptables -D INPUT 3 |
4、修改
1 修改指定表中指定链的指定规则,-R要指定对应的链和规则对应的序号和原本匹配的条件
1 2 | 命令语法:iptables -t 表名 -R 链名 规则序号 规则原本的匹配条件 -j 动作 示例:iptables -t filter -R INPUT 3 -s 192.168.1.146 -j ACCEPT<br> |
注意:如果省略-s 等条件则当前的规则的源地址会变成0.0.0.0/0
也可先删掉当前规则,再在同样的位置再 添加同不一样的规则
2 修改指定表的指定链的默认策略(默认动作),并非修改规则
1 2 | 命令语法:iptables -t 表名 -P 链名 动作 示例:iptables -t filter -P FORWARD ACCEPT |
示例操作
步骤① 修改规则
1 | iptables -R INPUT 3 -j ACCEPT |
注意 如果要进行更改规则一定要指定-s 源地址 ,如果有多个匹配规则 则都需要指定
因为在前面的-R 没有指定对应的地址,所以当前的修改地址都变成0.0.0.0/0
DROP动作直接是卡住没有响应,然后REJECT则会给出Destination Port Unreachable的回应
②修改默认规则
每张表的每条链中都有自己的默认策略,当报文没有被链中任何规则匹配,或者链中没有任何规则,则当前按照默认动作处理报文
1 | iptables -t filter -P FORWARD DROP |
-t 加表名 -P加链名
DROP(丢弃) 和 REJECT(拒绝) 有什么不同的呢?REJECT的时候会显示Destination Port Unreachable 但是DROP则会直接卡在那边不动
5、保存规则-----永久生效
在默认的情况下我们对防火墙所做的修改都是临时的,当服务器重启或者iptables服务重启后,所有的规则操作都会消失。
① CentOS6, RedHat
# 保存iptables规则
service iptables save
# 重启iptables服务
service iptables stop
service iptables start/restart
查看当前规则:
cat /etc/sysconfig/iptables
② Centos7
不使用init风格的脚本启动服务,使用unit文件,yum源安装iptables和iptables-services
#配置好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规则
============通用方法=============
iptables-save 可以把之前修改的命令输出到屏幕但是并不能保存命令
所以要使用 iptables-save > /etc/sysconfig/iptables 将修改的规则重定向到这个文件中
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具