1.iptables/netfilter介绍
1.什么是防火墙
计算机网络隔离技术,可以过滤网络数据包!把无效的数据隔离出来,保证计算机的安全。我们把这种功能的“硬件或软件”称为“防火墙”
防火墙的分类
- 逻辑上分类
- 计算机防火墙:针对单个主机进行防护 例如windows
- 网络防火墙: 处于网络入口,针对网络入口进行防护,保护网络后面的集群
- 物理上分类
- 硬件防火墙: 在硬件级别实现防火墙的功能 优点:性能好 并发高 缺点:成本高
- 软件防火墙: 以软件的方式模拟防火墙的功能 优点:成本低 缺点:性能不高
2.什么是iptables
iptables其实不是真正的防火墙,我们可以把它理解成一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应的”安全框架”中,这个”安全框架”才是真正的防火墙,这个框架的名字叫netfilter
netfilter才是防火墙真正的安全框架(framework),netfilter位于内核空间。
netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。它可以对数据包过滤,连接追踪,限速,网络地址转换nat等功能
iptables其实是一个命令行工具,位于用户空间,我们用这个工具操作真正的框架
3.什么是“包过滤防火墙”
包过滤防火墙是用一个软件查看所流经的数据包的包头(header),由此决定整个包的命运。它可能会决定丢弃(DROP)这个包,可能会接受(ACCEPT)这个包(让这个包通过),也可能执行其它更复杂的动作。
包过滤防火墙将对每一个接收到的包做出允许或拒绝的决定。具体地讲,它针对每一个数据包的包头,按照包过滤规则进行判定,与规则相匹配的包依据路由信息继续转发,否则就丢弃。包过滤是在IP层实现的,包过滤根据数据包的源IP地址、目的IP地址、协议类型(TCP包、UDP包、ICMP包)、源端口、目的端口等包头信息及数据包传输方向等信息来判断是否允许数据包通过。 包过滤也包括与服务相关的过滤,这是指基于特定的服务进行包过滤,由于绝大多数服务的监听都驻留在特定TCP/UDP端口,因此,为阻断所有进入特定服务的链接,防火墙只需将所有包含特定TCP/UDP目的端口的包丢弃即可。
4.“netfilter包过滤防火墙是如何工作的”
一个请求从宏观上看,就是先通过网卡,再通过内核空间,再到用户空间的应用,netfilter就是在内核网络协议栈中,也就是在网络层和传输层。
怎么过滤呢?
netfilter网络协议栈上设立了一个个检测点(HOOK)。就是下面的五个监测点。
NF_IP_PRE_ROUTING
刚刚进入网络层的数据包通过此点
NF_IP_LOCAL_IN
经路由查找后,送往本机的通过此检查点
NF_IP_FORWARD
要转发的包通过此检测点
NF_IP_POST_ROUTING
通过网络设备出去的包通过此检测点
NF_IP_LOCAL_OUT
本机进程发出的包通过此检测点
简称为prerouting、input、forword、output、postrouting,过滤的是网络层和传输层的数据包
5.iptables有那些链
当启动iptables防火墙时,报文需要经过很多关卡,根据报文经过链的情况可分为以下三种情况:
- 请求本机 (PREROUTING --> INPUT --> local process)
- 请求经过本机 (PREROUTING --> FORWARD --> POSTROUTING)
- 请求从本机发出 (local process --> OUTPUT --> POSTROUTING)
iptables的表与链
iptables服务把用于处理或过滤流量的策略条目称之为规则,多条规则可以组成一个规则链,而规则链则依据数据包处理位置的不同进行分类,iptables具有Filter, NAT, Mangle, Raw四种内建表:
5.1. Filter表
Filter表示iptables的默认表,因此如果你没有自定义表,那么就默认使用filter表,它具有以下三种内建链:
链名称 | 链作用 |
---|---|
INPUT链 | 处理来自外部的数据 |
OUTPUT链 | 处理向外发送的数据 |
FORWARD链 | 将数据转发到本机的其他网卡设备上 |
5.2. NAT表
NAT表有四种内建链:
链名称 | 链作用 |
---|---|
PREROUTING链 | 处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址(destination ip address),通常用于DNAT(destination NAT) |
INPUT链 | 处理来自外部的数据 |
POSTROUTING链 | 处理即将离开本机的数据包。它会转换数据包中的源IP地址(source ip address),通常用于SNAT(source NAT) |
OUTPUT链 | 处理本机产生的数据包 |
5.3. Mangle表
Mangle表用于指定如何处理数据包。它能改变TCP头中的QoS位。Mangle表具有5个内建链:
链名称 |
---|
PREROUTING |
OUTPUT |
FORWARD |
INPUT |
POSTROUTING |
5.4. Raw表
Raw表用于处理异常,它具有2个内建链:
链名称 |
---|
PREROUTING chain |
OUTPUT chain |