Iptable的处理机制
IPTable是一种封包过滤机制,版本在2.4.xx以上的Linux内核都支持并预装iptable,而在此之前以2.2.xx为核心的linux主要以ipchains作为过滤机制。IPTable具有过滤指定的数据封包、IP伪装、达成 NAT 的主机等功能。
IPTables与Netfilter
IPTables和Netfilter的关系有时容易使人混淆不清。这里首先做一说明,IPTables是基于Netfilter基本架构实现的一个可扩展的数据报高级管理系统或核外配置工具,像防火墙(Firewall)、网址转换(NAT)、数据包(package)记录、流量统计,这样的功能全是Linux内核中的Netfilter子系统所提供的,而IPTables是控管Netfilter的唯一工具程序。
IPTables的结构
IPTable采用表(table)与链(chain)的分层结构。
表(Tables)
一般来说IPTables有三张表,每张表中会预先设置多条链(chain),具体如下:
表(Table) | 表中预设的链(Chain) | 作用 | 内核模块 |
Filter | INPUT FORWARD OUTPUT | 过滤数据包 | iptables_filter |
Nat | PREROUTING POSTROUTING OUTPUT | 用于网络地址转换 | iptable_nat |
Mangle | PREROUTING POSTROUTING INPUT OUTPUT FORWARD | 修改数据包的传输特性 | iptable_mangle |
各表的查看命令:
1
2
3
|
# iptables –L –n (查看filter表)
# iptables –t nat –L (查看Nat表)
# iptables –t mangle –L (查看Mangle表)
|
Linux内核数据包处理流程中,共设置了五个(鱼钩)拦截点(hook points),这五个拦截点在IPTables中被作为链(chain)来呈现,并且每条链(chain)中会有相应的策略规则(rule)。
INPUT | 【进来的数据包应用此规则链中的策略】 |
OUTPUT | 【外出的数据包应用此规则链中的策略】 |
FORWARD | 【转发数据包时应用此规则链中的策略】 |
PREROUTING | 【对数据包作路由选择前应用此链中的规则】 |
POSTROUTING | 【对数据包作路由选择后应用此链中的规则】 |
IPtable结构图
常见命令及参数说明
Iptable命令基本格式:
iptable 【-t 表】 命令选项 【连名】 匹配条件 【-j 动作】
常用命令选项如下:
-A | 【--append】 | 在指定的连的结尾添加规则 |
-D | 【--delete】 | 删除指定链中的规则,可以按规则号或规则内容匹配 |
-I | 【--insert】 | 插入一条新规则,默认是在最前面 |
-R | 【--replace】 | 替换某一条规则 |
-L | 【--list】 | 列出所有规则 |
-F | 【--flush】 | 清空所有规则 |
-Z | 【--zero】 | 将所有的 chain 的计数与流量统计都归零 |
-N | 【--new】 | 自定义一条规则连 |
-X | 【--delete-chain】 | 删除用户自定义规则链 |
-P | 【--policy】 | 设置默认策略 |
-E | 【--rename-chain】 | 改变链名称 |
-p | 【--proto】 | 设置传输协议 |
-s | 【--source】 | 设置源地址 |
-d | 【--destination】 | 设置目标地址 |
-i | 【--in-interface】 | 设置输入网口名 |
-j | 【--jump】 | 设置规则的目标 |
-n | 【--numeric】 | 以数字方式显示,如:显示ip,但不显示主机名 |
-o | 【--out-interface】 | 设置输出网口名 |
-t | 【--table】 | 设置待操作的表 |
-v | 【--verbose】 | 详细模式 |
-V | 【--version】 | 查看iptable的版本信息 |
--line-number | 打印显示列表号 |
表(Tables)与链(Chains)
在许多关于IPTables的说明文档中,我们常见到一种说法“filter表中的INPUT链”,这种说法虽然便于描述但其实并不准确,我们可能因此会误认为链(Chains)属于表(Tables)。然而,链与表两者之间其实并没有统属关系,最多只有隐讳的关联性而已。