Liunx命令之iptable命令
iptables是一个配置Linux内核防火墙的命令行工具, 功能十分强大。
# iptables组成
Tables -> Chains -> Rules
1
# 表(tables)
- filter
- nat
- mangle
- raw
我们实际中使用最多的是filter表,nat表。
# 链(chanins)
每个table有多个链(Chains)
# Filter表
Filter表示iptables的默认表,如果没有自定义表,那么就默认使用filter表,它具有以下三种内建链:
- INPUT链 – 处理来自外部的数据。
- OUTPUT链 – 处理向外发送的数据。
- FORWARD链 – 将数据转发到本机的其他网卡设备上。
# NAT表
NAT表有三种内建链:
- PREROUTING链 – 处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址(destination ip address),通常用于DNAT(destination NAT)。
- POSTROUTING链 – 处理即将离开本机的数据包。它会转换数据包中的源IP地址(source ip address),通常用于SNAT(source NAT)。
- OUTPUT链 – 处理本机产生的数据包。
# 数据包通过iptables流程
大概流程如下:
- 数据经由互联网到达nat表的 PREROUTING
- 数据到达filter表的INPUT
- 数据通过防火墙,进入数据处理逻辑,处理后数据发出
- 数据经由filter表的OUTPUT
- 数据经有nat表的POSTROUTING
- 数据传输到互联网
我们也可以在数据到达 nat 表的 PREROUTING后,使用 filter表的FORWARD进行转发。 理解数据包流向很重要,这样我们就能很清楚的知道在哪个表哪个链增加对应的规则。
# 命令
iptables命令参数非常多。我们分为:配置命令、匹配条件、动作选项、模块选项,这样便于记忆。
- 配置命令 指的
ACDIF
等命令,都是大写开头的简称,且一般不可省略,例如-A
新增规则、-D
删除规则。 - 匹配条件 一般是小写,例如
-t
指定table,-i
指定网卡接口,这些条件一般是可选的。 - 动作选项 指的是
-j
指定的动作,可选值有:DROP、ACCEPT等。 - 模块选项 指的是
-m
指定的参数。
iptables命令格式如下:
iptables [option] CHAIN_rule [-j target]
1
以下是一些常用iptables选项的列表:
–A, ––append
将规则添加到链中(最后)。–I, ––insert
将规则添加到给定位置的链中。–C, ––check
寻找符合链条要求的规则。–D, ––delete
从链中删除指定的规则。–F, ––flush
删除对应表的所有规则,慎重使用。–L, ––list
连锁显示所有规则。–v, ––verbose
使用列表选项时显示更多信息。-P, --policy
设置链的默认策略(policy)-N, --new
创建用户自定义链-X, --delete-chain
删除用户自定义链-E, --rename-chain
重命名用户自定义链
iptables区分大小写,因此请确保使用正确的选项。更多参数可以输入iptables --help
查看。
# 新增规则(-A)
-A <链名>
Append, 追加一条规则(放到最后)
1
2
2
Example:
# -i条件指定网卡接口
# -s条件指定数据包的源地址
# -j指定动作选项为DROP, 丢弃数据
iptables -A INPUT -i eth0 -s 172.18.0.3 -j DROP
1
2
3
4
2
3
4
上面的命令会在 filter 表的 INPUT 链里追加一条规则:对于来自172.18.0.3
经由 eth0
接口的数据,直接丢弃。
上次更新: 2022/12/01, 11:09:34