学习网址:
一个关于转发的教程:
iptables:
- 用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种。无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘。
工作机制
iptables
是工作在用户空间中,定义规则的工具,本身并不算是防火墙。
它定义的规则,可以让在内核空间当中的 netfilter
来读取,并且实现让防火墙工作。所以这些规则放入内核的地方必须要是特定的位置,必须是 tcp/ip
的协议栈经过的地方,这个 tcp/ip
协议栈必须经过且可以实现读取规则的地方就叫做 netfilter
(网络过滤器)。这些特定的位置包括:
- 内核空间中:从一个网络接口进来,到另一个网络接口去的位置
- 数据包从内核流入用户空间的位置
- 数据包从用户空间流出的位置
- 进入/离开本机的外网接口
- 进入/离开本机的内网接口
由上我们知道了 iptables
选择了 5 个位置来作为控制的地方。
但是你有没有发现,其实前三个位置已经基本上能将路径彻底封锁了,但是为什么已经在进出的口设置了关卡之后还要在内部卡呢? 由于数据包尚未进行路由决策,还不知道数据要走向哪里,所以在进出口是没办法实现数据过滤的。所以要在内核空间里设置转发的关卡,进入用户空间的关卡,从用户空间出去的关卡。
那么,既然他们没什么用,那我们为什么还要放置他们呢?因为我们在做 NAT 和 DNAT 的时候,目标地址转换必须在路由之前转换。所以我们必须在外网而后内网的接口处进行设置关卡。
这五个位置放置了五个钩子函数(hook functions),也叫五个规则链:
PREROUTING (路由前)
INPUT (数据包流入口)
FORWARD (转发管卡)
OUTPUT(数据包流出口)
POSTROUTING(路由后)
这是 netfilter
规定的五个规则链,任何一个数据包,只要经过本机,必将经过这五个链中的其中一个链。
策略
防火墙策略一般分为两种:
- 一种叫“通”策略,认门是关着的,必须要定义谁能进。
- 一种叫“堵”策略,大门是洞开的,但是你必须有身份认证,否则不能进。
当我们定义策略时,要分别定义多条功能:定义数据包 → 允许或不允许;filter
→ 过滤的功能;地址转化 → NAT 选项。为了让这些功能交替工作,我们制定出 “表” 的概念,来定义、区分各种不同的工作功能和处理方式。
我们现在用的比较多个功能有3个:
filter
定义允许或者不允许的 → 一般只能做在3个链上:INPUT ,FORWARD ,OUTPUT。nat
定义地址转换的 → 一般也只能做在3个链上:PREROUTING ,OUTPUT ,POSTROUTING。mangle
功能:修改报文原数据 → 5 个链都可以做。
PostScript:iptables/netfilter
这款软件是工作在用户空间的,它的规则立即生效,不是一种服务。而我们 iptables
现在被做成了一个服务,可以进行启动,停止的。启动,则将规则直接生效,停止,则将规则撤销。
注意:规则的次序非常关键,谁的规则越严格,应该放的越靠前,而检查规则的时候,是按照从上往下的方式进行检查的。
规则的写法
iptables
定义规则的方式:
|
|
table
:filter
,nat
,mangle
COMMAND
: 定义如何对规则进行管理chain
: 定义接下来的规则是在哪个链上,当定义策略时,是可以省略的。CRETERIA
: 指定匹配的标准。ANCTION
: 指定如何进行处理或称处理的方式。
可以使用以下的命令查看定义规则的详细信息:
|
|