iptables-防火墙介绍【理论知识】
1、防火墙基本概述
1.1、按逻辑分类
1.1.1、主机防火墙
主机防火墙:针对于单个主机进行防护,比如Windows。
1.1.2、网络防火墙
网络防火墙:往往处于网络入口或边缘,针对于网络入口进行防护,服务于防火墙背后的服务器集群。
1.2、按物理分类
1.2.1、硬件防火墙
硬件防火墙:在硬件级别实现部分防火墙功能,另一部分功能基于软件实现,性能高,成本高。
1.2.2、软件防火墙
软件防火墙:以软件的方式模拟防火墙功能,运行在操作系统上,性能不高,成本较低。
2、iptables基本介绍
2.1、什么是iptables
iptables 其实不是真正的防火墙,我们可以把它理解成是一个代理程序,用户通过 iptables 这个代理程序,将安全规则执行到对应的"安全框架"中,这个"安全框架"才是真正的防火墙;这个安全框架叫 netfilter netfilter 位于操作系统的内核空间。 iptables 位于操作系统的用户空间,我们后期是通过 iptables 命令工具操作 netfilter 内核框架。
2.2、netfilter与iptables关系图
2.3、netfilter/iptables功能
netfilter/iptables 是 linux 平台下的 “包过滤型防火墙”,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成数据包的过滤、网络地址转换(NAT) 等功能。
2.4、什么是包过滤防火墙
包过滤防火墙它在网络层截获网络数据包的包头 (header) ,它针对数据包的包头,根据预先定义好的防火墙过滤规则进行比对,与规则相匹配的包会被放行,与规则不匹配的包则可能会被丢弃、也可能执行更复杂的动作。
包过滤防火墙一般作用在网络层,故也称"网络层防火墙",通过检查数据流中每一个数据包的源IP地址、目的IP地址、源端口、目的端口、协议类型 (TCP、UDP、ICMP) 、状态等信息来判断是否符合规则。
2.5、包过滤防火墙如何实现
包过滤防火墙是由 Netfilter 来实现的,它是内核的一部分,所以,如果我们想要防火墙能够达到"防火"的目的,则需要在内核中设置关卡,所有进出的报文都要经过这些关卡,进行检查,将符合条件的放行,不符合条件的阻止,而这些 关卡在iptables中不被称为"关卡",而被称为"链"。
3、iptables链的概念
3.1、什么是链
我们知道,防火墙的作用就在于对经过的数据报文进行"规则"匹配,然后执行规则对应的"动作",所以当报文经过这些关卡的时候,则必须匹配这个关卡上的规则,但是,这个关卡上可能不止有一条规则,
而是有很多条规则,当我们把这些规则串到一起的时候,就形成了"链"所以,每个经过这个"关卡"的报文,都要将这条"链"上的所有规则匹配一遍,如果有符合条件的规则,则执行规则对应的动作,如果没有则执行默认链的动作。
3.2、链与rule关系图
3.3、iptables有哪些链
当我们启用了防火墙功能时,报文需要经过很多关卡,也就是说,根据实际情况的不同,报文经过"链"可能不同。
3.3.1、入站【请求本机】
PREROUTING --> INPUT --> Local Process
3.3.2、转站【经过本机】
PREROUTING --> FORWARD --> POSTROUTING
3.3.3、出站【本机发出】
Local Process --> OUTPUT --> POSTROUTING
3.4、iptables链的数据包流向
3.4.1、数据包流向图
3.4.2、小结
通过上图我们总结了 iptables 总共有五个链,分别是 PREROUTING、FORWARD、INPUT、OUTPUT、POSTROUTTING。
4、iptables表的概念
4.1、什么是表
我们对每个"链"上都放置了一串规则,但是这些规则有些很相似,比如,A类规则都是对IP或者端口的过滤,B类规则是修改报文,那么这个时候,我们是不是能把实现相同功能的规则放在一起呢? 我们把具有相同功能规则的集合叫做"表",所以说,不同功能的规则,我们可以放置在不同的表中进行管理,而 iptables 已经为我们定义了4种表,每种表对应了不同的功能。
4.2、表filter、nat、mangle、raw的功能
4.2.1、功能介绍
表名 作用 包含的链
filter 负责过滤功能 INPUT、OUTPUT、FORWARD
nat 负责网络地址转换功能 PREROUTING、INPUT、OUTPUT、POSTROUTING
mangle 负责修改数据包内容 INPUT,OUTPUT、 FORWARD、POSTROUTING、PREROUTING
raw 关闭nat表上启用的连接追踪机制 PREROUTING、OUTPUT
4.2.2、表与链的流程图
4.3、表与链相关问题
4.3.1、来自于 10.0.0.1 的地址,访问本机的 web 服务请求都不允许,应该在哪个表的哪个链上设定规则?
很多人会觉得是 PREROUTING 链,但其实是INPUT链。因为我们要做的是过滤,而 PREROUTING 不能做过滤,所以是 INPUT 。
4.3.2、所有由本机发往 10.0.0.0/24 网段的 TCP 服务都不允许?
由本地发出会经过 OUTPUT、POSTROUTING 、但由于 POSTROUTING 不支持做过滤,所以应该在 OUTPUT 规则链上配置。
4.3.3、所有来自己本地内部网络的主机,像互联网发送 web 服务器请求都允许?
本地内部主机发送互联网经过 PREROUTING、FORWARD、POSTROUTING 而能做过滤的只有 FORWARD 。