Linux防火墙与iptables介绍(以及4表5链概念)

date: 2016.06.23; modification:2016.06.23

目录:

1 防火墙的概述

1.1 什么是防火墙

防火墙是指设置在不同网络或网络安全域之间的一系列部件的组合, 它能增强机构内部网络的安全性.

防火墙通过访问控制机制, 从而决定:

它可以根据网络传输的类型决定IP包是否可以传进或传出内部网.

通过使用防火墙可以实现以下功能:

1.2 防火墙的分类

防火墙技术根据防范的方式和侧重点的不同而分为很多种类型, 但总体来讲可分为:

1.3 防火墙的基本工作原理

防火墙通过审查经过的每一个数据包, 判断它是否有相匹配的过滤规则, 根据规则的先后顺序进行一一比较, 直到满足其中的一条规则为止, 然后依据控制机制做出相应的动作. 如果都不满足, 则将数据包丢弃, 从而保护网络的安全.

1.3.1 包过滤防火墙工作原理

  1. 数据包从外网传送到防火墙后, 防火墙抢在IP层向TCP层传送前, 将数据包转发给包检查模块进行处理.
  2. 首先与第一个过滤规则比较.
  3. 如果与第一个模块相同, 则对它进行审核, 判断是否转发该数据包, 这时审核结果是转发数据包, 则将数据包发送到TCP层进行处理, 否则就将它丢弃.
  4. 如果与第一个过滤规则不同, 则接着与第二个规则相比较, 如果相同则对它进行审核, 过程与(3)相同.
  5. 如果与第二个过滤规则不同, 则继续与下一个过滤规则比较, 直到与所有过滤规则比较完成. 要是所有过滤规则都不满足, 就将数据包丢弃.

1.3.2 代理服务型防火墙工作原理

代理服务型防火墙是在应用层上实现防火墙功能的. 它能提供部分与传输有关的状态, 能完全提供与应用相关的状态和部分传输的信息, 它还能处理和管理信息.

2 netfilter/iptables简介

netfilter/iptables(下文简称为iptables)组成Linux平台下的包过滤防火墙, 与大多数的Linux软件一样, 这个包过滤防火墙是免费的, 它可以代替昂贵的商业防火墙解决方案, 完成封包过滤, 封包重定向和网络地址转换NAT等功能.

虽然 netfilter/iptables IP 信息包过滤系统被称为单个实体, 但它实际上由两个组件 netfilter 和 iptables 组成.

netfilter/iptables 可用于添加, 编辑和除去规则, 这些规则是在做信息包过滤决定时, 防火墙所遵循和组成的 规则. 这些规则存储在专用的信息包 过滤表 中, 而这些表集成在 Linux 内核中. 在信息包过滤表中, 规则被分组放在我们所谓的 链(chain) 中.

2.1 iptables基本概念:

2.1.1 规则

规则(rules)其实就是网络管理员预定义的条件, 规则一般的定义为: "我要对哪些包, 在什么时候, 进行哪些操作(接受/拒绝/丢弃等).".

这里的

配置防火墙的主要工作就是添加, 修改和删除这些规则.

2.2 链(chain)

上述规则一般都是有很多条, 将很多条规则串起来, 即形成了(规则)链. 内核检查的时候, 按照链中的顺序, 一条条的进行check.

iptables区分了哪些链呢? 这个是按照数据包作为数据流的不同阶段来区分的, 具体一看下文的5链就明白了.

2.3 (过滤)表

可以简单理解为链的进一步分类. 具体一些的解释见下文.

2.4 4表与5链

iptables包含4个表, 5个链. 其中表是按照对数据包的操作区分的, 链是按照不同的Hook点来区分的, 表和链实际上是netfilter的两个维度.

4个表为:

默认表是filter(没有指定表的时候就是filter表). 表的处理优先级: raw > mangle > nat > filter.

5个链为: PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING.

如果上述表达还不是很明白的话, 可以看两个相对直观的图:

关于4表5链的对应关系图:

4表5链

4表5链

上表只是一个表与链的对应关系, 具体数据包在进出Linux时候的数据流图为:

数据流图

数据流图

具体到某个链(chain)的处理流程为:

链的流程

链的流程

3 参考

http://os.51cto.com/art/201103/249234.htm

http://www.linuxidc.com/Linux/2012-08/67505.htm