iptables规则的查看、添加、删除和修改[教程]
By admin
- 3 minutes read - 452 words在 Linux 中 iptables 实际上只是一个操作 Linux 内核 Netfilter 子系统的“界面”。顾名思义,Netfilter 子系统的作用,就是 Linux 内核里挡在“网卡”和“用户态进程”之间的一道“防火墙”。 也就是说 iptables
工作在用户态,它和我们平时开发的应用程序完全一样的,只是它的作用是用来操作 NetFilter
的一个工具。而 NetFilter
工作在内核态,它们的关系,可以用如下的示意图来表示:图来自极客时间
在 iptables 中存在四表五链的概念。
表分别为 filter
、nat
、raw
、mangle
,当数据包抵达防火墙时,将依次应用 raw、mangle、nat、和 filter 表中对应链内的规则,其中表的应用顺序为:raw -> mangle -> nat -> filter,而表中链的规则自上向下依次执行,执行中有可能跳转到其它链中继续执行。 iptables Processing Flowchart
如果按七层网络协议的话,则 ipables 中的数据流向为(来自Netfilter 官方的原理图)Packet flow in Netfilter and General Networking
其中每一层又分为”INPUT PATH
“、“FORWARD PATH
” 和 “OUTPUT PATH
” 三种。对于”INPUT PATH
” 和 “OUTPUT PATH
“包含四个表,而对于” FORWARD PATH
“而言只包含两个表。
如果想查看指定类型的表通过 -t
参数指定,如
$ iptables -t nat -L
可以显示所有 nat 表的规则,如果不指定 -t 参数,则默认只显示 filter 表规则。
四表:
filter
**负责过滤功能。**对应 iptables_filter 模块
nat
**网络地址转换。**对应 iptable_nat 模块
mangle
**对数据报文拆解、修改、重新封装的功能;**对应 iptable_mangle 模块
raw
关闭nat表上启用的连接追踪机制;对应 iptable_raw 模块
五个链:
PREROUTING
是在包进入防火墙之后(入站)、路由决策之前做处理
POSTROUTING
是在路由决策之后(出站),做处理
INPUT
在包被路由到本地之后,但在出去用户控件之前做处理
OUTPUT
在去顶包的目的之前做处理
FORWARD
在最初的路由决策之后,做转发处理
详细的请查看man iptables,下面我们只对常用的 filter 介绍一下其用法,这里省略了参数 -t filter
1、查看
iptables -nvL –line-number
-L 查看当前表的所有规则,默认查看的是 filter
表,如果要查看 NAT
表,可以加上 -t NAT
参数
-n 不对ip地址进行反查,加上这个参数显示速度会快很多
-v 输出详细信息,包含通过该规则的数据包数量,总字节数及相应的网络接口
–line-number 显示规则的序列号,这个参数在删除或修改规则时会用到
2、添加
添加规则有两个参数:-A
和 -I
。其中 -A
是添加到规则的末尾;-I
可以插入到指定位置,没有指定位置的话默认插入到规则的首部。
当前规则:
[root@test ~]# iptables -nL --line-number
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 DROP all -- 192.168.1.1 0.0.0.0/0
2 DROP all -- 192.168.1.2 0.0.0.0/0
3 DROP all -- 192.168.1.4 0.0.0.0/0
添加一条规则到尾部:
[root@test ~]# iptables -A INPUT -s 192.168.1.5 -m comment --comment "comment info" -j DROP
再插入一条规则到第三行,将行数直接写到规则链的后面:
[root@test ~]# iptables -I INPUT 3 -s 192.168.1.3 -j DROP
查看:
[root@test ~]# iptables -nL --line-number
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 DROP all -- 192.168.1.1 0.0.0.0/0
2 DROP all -- 192.168.1.2 0.0.0.0/0
3 DROP all -- 192.168.1.3 0.0.0.0/0
4 DROP all -- 192.168.1.4 0.0.0.0/0
5 DROP all -- 192.168.1.5 0.0.0.0/0 /* comment info */
可以看到 192.168.1.3
插入到第三行,而原来的第三行 192.168.1.4
变成了第四行。
这时使用了注释功能, -m 表示启用注释功能 —comment 指定注释内容
3、删除 删除用-D参数
删除之前添加的规则(iptables -A INPUT -s 192.168.1.5 -j DROP):
[root@test ~]# iptables -D INPUT -s 192.168.1.5 -j DROP
有时候要删除的规则太长,删除时要写一大串,既浪费时间又容易写错,这时我们可以先使用–line-number找出该条规则的行号,再通过行号删除规则。
[root@test ~]# iptables -t filter -nL --line-number
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 DROP all -- 192.168.1.1 0.0.0.0/0
2 DROP all -- 192.168.1.2 0.0.0.0/0
3 DROP all -- 192.168.1.3 0.0.0.0/0
删除第二行规则
[root@test ~]# iptables -t filter -D INPUT 2
4、修改 修改使用-R参数
先看下当前规则:
[root@test ~]# iptables -nL --line-number
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 DROP all -- 192.168.1.1 0.0.0.0/0
2 DROP all -- 192.168.1.2 0.0.0.0/0
3 DROP all -- 192.168.1.5 0.0.0.0/0
将第三条规则改为ACCEPT:
[root@test ~]# iptables -R INPUT 3 -j ACCEPT
再查看下:
[root@test ~]# iptables -nL --line-number
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 DROP all -- 192.168.1.1 0.0.0.0/0
2 DROP all -- 192.168.1.2 0.0.0.0/0
3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
第三条规则的 target 已改为ACCEPT。
5、保存规则
# iptables-save > iptable.txt
如果直接执行 iptables-save 则会直接在终端屏幕中输出当前的规则
6、恢复规则
上面我们已经实现了规则备份,如果要想恢复,则可以通过 ipables-restore 命令
# iptables-restore iptable.txt
7、删除链 chain 下面的所有规则
# iptables -t filter -F
会删除 filter 表中所有链的规则,如果要删除chain 链,则需要使用 -X
参数
8、创建用户自定义链 chain
# iptables -t filter -N TEST_REDIRECT
9、删除链 chain
# iptables -t filter -X TEST_REDIRECT
此命令只允许删除用户自定义的链,且无法删除包含规则的链,只能删除空链
参考:
- https://www.cnblogs.com/fanweisheng/p/11130208.html
- http://blog.itpub.net/29270124/viewspace-2611838/
- https://time.geekbang.org/column/article/68316
推荐阅读: Iptables之nf_conntrack模块