防火墙概述
- 防火墙概述
- 1. 防火墙的分类
- 2. Linux 防火墙的基本认识
- 3. netfilter 中五个勾子函数和报文流向
防火墙概述
防火墙( FireWall ):隔离功能,工作在网络或主机边缘,对进出网络或主机的数据包基于一定的 规则检查,并在匹配某规则时由规则定义的行为进行处理的一组功能的组件,基本上的实现都是默 认情况下关闭所有的通过型访问,只开放允许访问的策略,会将希望外网访问的主机放在 DMZ ( demilitarized zone )网络中。
1. 防火墙的分类
按保护范围划分:
- 主机防火墙:服务范围为当前一台主机。
- 网络防火墙:服务范围为防火墙一侧的局域网。
按实现方式划分:
- 硬件防火墙:在专用硬件级别实现部分功能的防火墙;另一个部分功能基于软件实现,如:华为, 山石 hillstone,天融信,启明星辰,绿盟,深信服, PaloAlto , fortinet 飞塔, Cisco, Checkpoint, NetScreen ( 2004 年被 Juniper 用 40 亿美元收购)等。
- 软件防火墙:运行于通用硬件平台之上的防火墙的应用软件,Windows 防火墙 ISA ——> Forefront TMG。
按网络协议划分:
- 网络层防火墙:OSI 模型下四层,又称为包过滤防火墙。
- 应用层防火墙 / 代理服务器:proxy 代理网关,OSI 模型七层。
包过滤防火墙
网络层对数据包进行选择,选择的依据是系统内设置的过滤逻辑,被称为访问控制列表( ACL ),通过 检查数据流中每个数据的源地址,目的地址,所用端口号和协议状态等因素,或他们的组合来确定是否允许该数据包通过。
- 优点:对用户来说透明,处理速度快且易于维护。
- 缺点:无法检查应用层数据,如病毒等。
应用层防火墙
应用层防火墙/代理服务型防火墙,也称为代理服务器(Proxy Server ) 将所有跨越防火墙的网络通信链路分为两段 内外网用户的访问都是通过代理服务器上的“链接”来实现。
- 优点:在应用层对数据进行检查,比较安全。
- 缺点:增加防火墙的负载。
提示:现实生产环境中所使用的防火墙一般都是二者结合体,即先检查网络数据,通过之后再送到应用 层去检查。
2. Linux 防火墙的基本认识
Linux 防火墙是由 Netfilter 组件提供的,Netfilter 工作在内核空间,集成在 linux 内核中。Netfilter 是 Linux 2.4.x 之后新一代的 Linux防火墙机制,是 linux 内核的一个子系统。Netfilter 采用模块 化设计,具有良好的可扩充性,提供扩展各种网络服务的结构化底层框架。Netfilter 与 IP 协议栈是无缝契合,并允许对数据报进行过滤、地址转换、处理等操作。
Netfilter官网文档: https://netfilter.org/documentation/
[root@Ubuntu2204 ~]#grep -m 10 NETFILTER /boot/config-5.15.0-124-generic
CONFIG_NETFILTER=y
CONFIG_NETFILTER_ADVANCED=y
CONFIG_BRIDGE_NETFILTER=m
CONFIG_NETFILTER_INGRESS=y
CONFIG_NETFILTER_NETLINK=m
CONFIG_NETFILTER_FAMILY_BRIDGE=y
CONFIG_NETFILTER_FAMILY_ARP=y
CONFIG_NETFILTER_NETLINK_HOOK=m
CONFIG_NETFILTER_NETLINK_ACCT=m
CONFIG_NETFILTER_NETLINK_QUEUE=m# y 表示该功能编译进内核。
# m 表示该功能编译成模块,可以在需要时加载。
3. netfilter 中五个勾子函数和报文流向
Netfilter 在内核中选取五个位置放了五个 hook ( 勾子 ) function( INPUT、OUTPUT、FORWARD、 PREROUTING、POSTROUTING ),而这五个 hook function 向用户开放,用户可以通过一个命令工具 ( iptables )向其写入规则。
由信息过滤表(table)组成,包含控制IP包处理的规则集(rules),规则被分组放在链( chain )上。
提示:从 Linux kernel 4.2 版以后,Netfilter 在 prerouting 前加了一个 ingress 勾子函数。可以使用这 个新的入口挂钩来过滤来自第2层的流量,这个新挂钩比预路由要早,基本上是 tc 命令(流量控制工 具)的替代品。
三种报文流向
- 流入本机:PREROUTING --> INPUT–>用户空间进程。
- 流出本机:用户空间进程 -->OUTPUT–> POSTROUTING。
- 转发:PREROUTING --> FORWARD --> POSTROUTING。