Liunx命令之iptable命令

iptables是一个配置Linux内核防火墙的命令行工具, 功能十分强大。

iptables组成

1
Tables -> Chains -> Rules

表(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命令格式如下:

1
iptables [option] CHAIN_rule [-j target]

以下是一些常用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)

1
2
-A <链名>
Append, 追加一条规则(放到最后)

Example:

1
2
3
4
# -i条件指定网卡接口
# -s条件指定数据包的源地址
# -j指定动作选项为DROP, 丢弃数据
iptables -A INPUT -i eth0 -s 172.18.0.3 -j DROP

上面的命令会在 filter 表的 INPUT 链里追加一条规则:对于来自172.18.0.3经由 eth0接口的数据,直接丢弃。

有用就打赏一下作者吧!