iptables

0 目录

1 netfilter机制

为实现报文的安全传输,屏蔽某些攻击;或是转换报文的源、目标地址,内核开发者在5个精心选择的位置开发了钩子函数(即netfilter功能模块),用于实现在不同位置检查、处理流经的网络报文。相当于路上的卡点。

iptables称这些钩子函数为“链”(chain)。iptables就是在这些链上定义规则的工具

5个链的位置:

这里写图片描述

说明:
1、为叙述方便,把网卡设备也使用图形表示出来,虽然它们并不是进程;以网卡1作为报文流入的接口,网卡2作为报文流出的接口;
2、其他如各链、路由选择、各应用进程,都是在主机上运行的进程。前者由内核实现,后者由各应用程序实现。
3、因为网卡1、2分别作为流入和流出报文的接口,所以将PREROUTING和POSTROUTING分别放在了两网卡边。实际上不论是哪个网卡,只要是流入的报文,都会立即经过PREROUTING链“检查”;流出的报文流出前,都会经过POSTROUTING链“检查”

下面也是以此模型展开。

1.1 各链的生效时机(重要)

要在不同的链上定义切实能起作用的规则,就要理解各链上规则的生效时机:

生效时机
PREROUTING 报文到达主机网卡的一刹那,就会被主机的PREROUTING链上的规则检查
INPUT 经过PREROUTING的报文,之后进行路由选择1。如果是要发给主机某进程的报文,则经过INPUT链上定义的规则检查
FORWARD 经过PREROUTING的报文,进行路由选择。如果是要发给其他主机的报文,则经过FORWARD链上定义的规则检查2
OUTPUT 主机要发送给其他主机的报文(不论是响应对方还是向对方主动发),首先经过OUTPUT链
POSTROUTING 在本机报文发送出主机前一刹那,经过POSTROUTING链上的规则检查

下面分别说明流入、流出、转发的报文所经流程:

1.2 流入报文的流程

这里仅列出与流入报文有关的链,其他忽略,下同。
其他主机向当前主机某进程通信,流入报文:

这里写图片描述

1.3 转发报文的流程

一主机发送报文,经当前主机转发给另一主机:

这里写图片描述

注意,PREROUTING和POSTROUTING和具体网卡没有关系,这里只是为了方便展示,使用了两网卡,一个用来接一个用来发。
而实际上,即便是仅有一个网卡(或多个网卡),PREROUTING链总数第一时间检查流入报文;POSTROUTING也会在报文流出前检查即将流出的报文。

1.4 流出报文的流程

当前主机某进程与其他主机通信,发出报文:

这里写图片描述

2 iptables表、链

2.1 iptables各表

本文仅讨论支持ipv4的iptables命令,支持ipv6的为ip6tables。

iptables各功能称为“表”:

作用
raw 用于关闭连接追踪机制3
mangle 用于修改报文中的部分信息
nat 用于地址转换
filter 用于按规则过滤报文

各表是独立的。为完成各自功能,各表对报文的处理动作不一样。
各表就是iptables的各功能,之所以称为“表”,是因为它们可以各自在不同的链上实现各自定义的规则,一种功能在各链定义的规则组合起来就像一张表。

2.2 iptables各表定义规则的链

iptables各表(即各功能)实现,是依靠在不同的链上定义规则,各表的规则所能定义在的链:

可定义规则的链
raw PEROUTING、OUTPUT
mangle PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING
nat PREROUTING、INPUT4、OUTPUT、POSTROUTING
filter INPUT、FORWARD、OUTPUT

2.3 各表、各链规则生效的优先级

如标题2.2所示,有的链上可定义多个表的规则。
如果多个表的规则出现在同一链上,生效次序:

raw > mangle > nat > filter

在同一链上可定义多条同一表的规则(比如filter表),这些规则是自上而下依次匹配,如果找到匹配到的规则,则按此规则处理,后续规则不再匹配

2.4 自定义链

上述的5个链,PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING,称为内置链。

还可根据需要自定义链,自定义链上的规则无法直接生效,要被某个内置链引用才可以。

创建自定义链:iptables -N CHAIN_NAME
调用格式(以INPUT链调用为例):iptables …… -j CHAIN_NAME

这样做的目的,就是可以把某一类规则定义于一个自定义链中,从而可以一并引用或一并删除,而不用逐条规则处理。

3 iptables格式及子命令

由于最常用的是filter表和nat表,本文仅讨论这两种表的规则。
这里仅列出各表的通用的格式。具体的匹配条件、处理动作,在标题4中说明。

常用格式:

iptables [-t table] subcommand chain rule-specification		# 参数也可能是指定链的命令号,而不是具体的rulespecification
rule-specification = [matches...] [target]					# 指定匹配条件,处理动作
match = -m matchname [per-match-options]					# 加载额外模块,使用该模块的匹配条件,从而使匹配条件更丰富
target = -j targetname [per-target-options]

其中:
1、subcommand是子命令,实际就是用各选项(选项字母大写)来实现,之所以称为子命令,是因为它们有的使用格式和上述不同,且还有各自选项。
2、chain,指定链
3、rule-specification,指定匹配条件(matches)和处理动作(target)
4、匹配条件有的是iptables自带的(如匹配源IP、目标IP等),有的需要指定额外模块,使匹配条件更丰富
5、-j target,对匹配到的报文的执行动作。有的动作也有自己的选项
6、-t table,用于指定是对哪个表进行操作,若省略表示操作的表是filter

3.1 子命令

这些都比较容易理解,不再专门示例。在下文的规则定义、管理等,会体现到各选项作用。

类似选项,不过都是大写字母:

选项 意义
-N 新建一自定义链
-X 删除自定义的空链,如上面定义了规则是无法删除的
-F 清空规则。可清空所有链上的规则,也可清空指定链的所有规则,也可清空指定链的指定规则(这就和-D一样了)
-P 定义默认策略。即如果一个报文不符合所有规则的匹配条件,应采取的动作
-E 重命名未被内置链引用的自定义链(reference为0)
-L 列出规则
-A 追加(append)添加规则。即添加的规则会在原有规则的最后
-I 插入规则。默认插入原有规则的第一个,也可指定插入第几个
-D 删除指定规则。参数可以是数字,表示删除第几条
-R 用一个新规则替换指定规则
-Z 每个规则都有两计数器:一个用于该规则匹配到的报文总个数,另一个用于记录匹配到的报文总大小。-Z的意义是把这两数归零
-S 输出定义当前所有规则所使用的命令。可把这些命令重定向至某文件,这样运行这个文件中的命令,就能恢复之前定义的规则5

3.1.1 列出各规则

列出规则-L子命令,格式为:

iptables [-t table] -L [chain [rulenum]] [options...]

有一些专门用于列出规则的-L的子选项,常用的有:

选项 意义
-n 以数字格式显示IP和端口。否则会尝试根据IP、端口反解主机名、服务名
-v,-vv,-vvv 显示详细信息
-x 每个规则的两计数器(分别用于记录匹配到报文的总数和总大小),数过大时会使用其他单位(比如MB)从而四舍五入。此选项表示显示精确数值,不换算、四舍五入
–line-number 显示链上的规则的编号,方便引用。比如-D进行删除指定规则时,可指定规则内容也可指定编号

这些子选项要写在-L的左侧,否则会报错

4 常见匹配条件

只有根据一定条件匹配报文,才能对之做出相应处理。
下面列出常见匹配条件,有的条件并不适用于所有的链,所以不是所有的表都能使用下述各匹配条件,具体情况要具体分析。

大部分匹配条件,均可在其前面加“!”表示取反

4.1 基本匹配

iptables自带的匹配条件:

匹配条件 意义
-s 匹配源地址是指定IP(也可以是IP段)的报文。0/0或省略此选项均表示匹配所有源IP
-d
  • 21
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值