Iptables 防火墙实践
1.Iptables 基本介绍
1.1 防火墙的种类
- 从逻辑上讲,防火墙可以大体分为主机防火墙和网络防火墙.
- 主机防火墙 : 针对于单个主机进行防护,比如 windows
- 网络防火墙 : 往往处于网络入口,针对于网络入口进行防护,服务于防火墙背后的服务集群
- 从物理上讲,防火墙可以分为硬件防火墙和软件防火墙
- 硬件防火墙 : 在硬件级别实现部分防火墙功能,另一部分功能基于软件实现, 性能高. 成本高
- 软件防火墙 : 以软件的方式模拟防火墙功能,运行在操作系统上,性能不高,成本较低
1.2 什么是Iptables
Iptables
其实不是真正的防火墙,就是一个代理程序,用户通过iptables这个代理程序,将安全规则执行到对应的"安全框架"中,这个"安全框架"才是真正的防火墙,这个安全框架叫netfilter
,是内核代码中不可缺少的一部分- iptables 位于操作系统的用户空间, 我们后期是通过iptables 命令工具操作 netfilter 内核框架.
- 所以 iptables 的完整叫法应该是 netfilter/iptables ,它是linux平台下的"包过滤型防火墙",是免费的,它可以代替昂贵的商业防火墙解决方案,完成数据包的过滤,连接追踪,限速,网络地址替换(NAT)等功能.
1.3 什么是包过滤防火墙
- 包过滤防火墙它工作在OSI七层模型中的网络层,用来匹配网络数据包的(header):
- 1.将header 与预先定义好的防火墙规则进行比对
- 2.与规则相匹配的包会被放行
- 3.与规则不匹配的包则可能会被丢弃,也可能执行更复杂的动作
- 由于包过滤防火墙工作在网络层,故也称"网络防火墙" 它通过检查每个数据包的:
- 源地址,目标地址;
- 源端口,目的端口;
- 协议类型,(TCP,UDP,ICMP) 等状态信息来判断是否符合规则
1.4 包过滤防火墙如何实现
- 包过滤防火墙是由 netfilter 来实现的,他是内核一部分
- 如果我们想要防火墙能够达到"防火"的目的,则需要在内核中设置关卡,所有进出的报文都要经过这些关卡进行检查:
- 将符合条件的放行
- 不符合的阻止
- 而这些关卡在iptables中 称之为 “链”
2.Iptables中链的概念
2.1 什么是链
- 防火墙的作用就在于对经过的数据报文进行"规则"匹配,然后执行规则对应的"动作".所以当报文经过这些关卡的时候,则必须匹配这个关卡上的规则. 但是,这个关卡上可能不止有一条规则,而是有很多条.当我们把这些规则串到一起的时候,就形成了"链"
- 所以,每经过这个关卡的报文,都要将这条链上的所有规则匹配一遍,如果有符合条件的规则,则执行规则对应的动作,如果没有则执行默认链的动作
2.2 Iptables有哪些链
- 当我们启用了防火墙功能时,报文需要经过很多关卡,也就是说,根据实际情况不同,报文经过"链"可能不同,大体分为如下三类:
- 请求本机会经过哪些链 ( PREROUTING --> INPUT --> Local Process )
- 请求经过本机经过哪些链 ( PREROUTING --> FORWARD --> POSTROUTING )
- 从本机发出经过哪些链 ( Local Process --> OUTPU --> POSTROUTING )
- 了解 Iptables链的数据包流向,后期在设定规则时,能很清晰的知道将规则设定在哪个链上
3. Iptables 表的概念
3.1 什么是表
- 我们对每个"链" 上都放置了一串规则,但是这些规则都很相似.比如:
- A类规则都是对IP或端口的过滤
- B类规则都是对报文进行修改的
- C类规则都是进行地址替换的
- 那么这个时候,我们是不是能把实现相同功能的规则放在一起?
- 当我们把具有相同功能的规则集合在一起叫做"表",所以说,不同功能的规则,我们可以放置在不同的表中进行管理,而iptables已经为我们定义了4种表,每种表对应了不同的功能
3.2 表的功能
表名 | 作用 | 包含的链 |
---|---|---|
fileter | 负责过滤功能 | INPUT, OUTPUT, FORWARD |
nat | 负责网络地址转换功能 | PREROUTING , INPUT , OUTPUT , POSTROUTING |
mangle | 负责修改数据包内容 | INPUT , OUTPUT , FORWARD , POSTROUTING , PREROUTING |
raw | 关闭nat表上启用的连接追踪功能 | PREROUTING , OUTPUT |
3.3 表与链的关系
- raw --> mangle --> nat --> filter
4. Iptables 规则管理
4.1 什么是规则
-
数据包的过滤基于规则,而规则是由匹配 条件 + 动作组成,我们对规则的操作无非就是增删查改
-
操作规则的语法 : iptables [ -t 表名] 选项 [ -i 链名] [ 规则 ] [ 动作 ]
-
操作规则之前我们需要考量如下两个问题:
-
-
要实现什么功能 : 判断添加到哪个表上
-
报文流向的路径, 判断添加到哪条链上
iptables选项 含义 示例 -t | --table
-
-