Linux 防火墙介绍
1. 一. 防火墙概念
1.1. 安全技术概念
计算机领域的安全技术多种多样,广义上来说,一般有:入侵检测系统(Intrusion
Detection System)、入侵检测与防御系统(Intrusion Detection and Prevention
System)和防火墙技术(Firewall)。
1.1.1. 入侵检测系统
- 入侵检测与管理系统(Intrusion Detection Systems): 入侵检测系统(IDS)一般
是一种硬件设备或软件应用程序,用于监控网络或系统中的恶意活动或违规行为。任何
入侵活动或违规通常都会报告给管理员,或者使用安全信息和事件管理(SIEM)系统集中收集。 - IDS 特点是不阻断任何网络访问,只是量化、定位来自内外网络的威胁情况,主要
以提供报告和事后监督为主,提供有针对性的指导措施和安全决策依据。一般采用旁路部署
方式,即其部署不影响系统的运行和数据流量来往。 - IDS 可以用于单台计算机或大型网络。最常见的分类是:网络入侵检测系统(network
intrusion detection systems (NIDS))和基于主机的入侵检测系统( host-based
intrusion detection systems (HIDS))。例如: 用来监控操作系统的系统文件的 IDS
就属于 HIDS;用来监测和分析网络流量的 IDS 就属于 NIDS。
1.1.2. 入侵防御系统
- 入侵预防系统(Intrusion Prevention System(IPS)),也称为入侵检测和预防系统(IDPS),
是监控网络或系统中可能出现的恶意活动的网络安全设备。入侵防御系统的主要功能是识别
恶意活动,记录有关该活动的信息,报告并试图阻止或停止它。入侵防御系统被认为是入侵
检测系统的扩展,因为它们同时监视网络流量和(或)系统活动的恶意活动。主要的区别在于,
与入侵检测系统不同,入侵预防系统是在线放置的,能够主动防止或阻止被检测到的入侵。
IPS 可以采取以下行动:发送警报、丢弃检测到的恶意数据包、重置连接或阻止来自违规
IP 地址的流量。IPS 还可以纠正循环冗余校验(CRC)错误,整理数据包流,缓解 TCP 排序
问题,清理不需要的传输层和网络层选项。 - 其特点是以透明模式工作,分析数据包的内容如:溢 攻击、拒绝服务攻击、木马、蠕虫、
系统漏洞等进行准确的分析判断,在判定为攻击行为后立即予以阻断,主动而有效的保护网络
的安全,一般采用在线部署方式。
1.1.3. 防火墙
1.1.3.1. 防火墙概念
-
在计算机领域,防火墙(FireWall)就是基于预先定义的安全规则来监视和控制来往的
网络流量的网络安全系统。防火墙的核心是隔离,其将受信任的内部网络和不受信任的
外部网络隔离开。内部网络一般是公司的内部局域网,外部网络一般是 Internet。 -
一般防火墙工作在网络或主机边缘,对进出网络或主机的数据包基于一定的规则检查,
并在匹配某规则时由规则定义的行为进行处理的一组功能的组件,基本上的实现都是默认
情况下关闭所有的通过型访问,只开放允许访问的策略。
1.1.3.2. 防火墙分类
-
按照防火墙的保护范围,防火墙通常被分为:
-
网络防火墙: 网络防火墙在两个或更多的网络间监控和过滤流量,运行在网络设备上。
网络防火墙保护的是防火墙某一侧的网络(一般是局域网络)。 -
主机防火墙: 主机防火墙运行在一般的电脑主机,并控制进出这些电脑的网络流量,
主机防火墙保护的范围是当前主机。 从实现方式上看,防火墙被分为:
-
硬件防火墙: 在专用硬件级别实现部分功能的防火墙;另一个部分功能基于软件实现,
如:华为,天融信 Checkpoint,NetScreen 等 - 软件防火墙: 运行于通用硬件平台上的防火墙应用软件,ISA --> Forefront TMG 从工作交互的网络协议层及划分:
- 网络层防火墙: 只可以和 OSI 模型下四层的协议交互
-
应用层防火墙: 运行应用层防火墙的设备可以叫代理服务器或代理网关,可以与 OSI
的七层协议交互。
- 在实际应用中,网络层防火墙具有包过滤功能,可以称其为包过滤防火墙,如下图
防火墙在网络层对数据包进行选择,选择的依据是系统内设置的过滤逻辑,被称为访问
控制列表(ACL),通过检查数据流中每个数据的源地址,目的地址,所用端口号和协议
状态等因素,或他们的组合来确定是否允许该数据包通过
优点:对用户来说透明,处理速度快且易于维护
缺点:无法检查应用层数据,如病毒等 - 应用层防火墙可以检测并识别应用层协议,如下图:
应用层防火墙/代理服务型防火墙,也称为代理服务器(Proxy Server)将所有跨越防火墙
的网络通信链路分为两段内外网用户的访问都是通过代理服务器上的“链接”来实现
优点:在应用层对数据进行检查,比较安全
缺点:增加防火墙的负载
提示:现实生产环境中所使用的防火墙一般都是二者结合体,即先检查网络数据,
通过之后再送到应用层去检查
2. 二. Linux 防火墙基础
2.1. Linux 防火墙核心 Netfilter
- Netfilter 是 Linux 集成在内核的一个框架,它允许以自定义处理程序的形式实现
各种与网络相关的操作(允许、丢弃或者修改数据包)。Netfilter 提供了包过滤(
packet filtering)、网络地址转换(network address translation(NAT))和端口
转换(port translation)等各种功能和操作,这些功能提供了在网络中重定向数据包
和禁止数据包到达网络中的敏感位置所需的功能。 - Netfilter 代表了 Linux 内核中的一组
hooks
,其允许特定的内核模块向内核的
网络堆栈注册回调函数。这些回调函数通常以过滤和修改规则的形式应用于流量,对
于每个在网络堆栈中通过相应钩子的数据包都要调用这些回调函数1。
-
Netfilter 比较重要的模块
- ip_tables
- ip6_tables
- arp_tables
- ebtables
- Netfilter 的组成
2.1.1. Netfilter 中的 hook 函数
- Netfilter 在内核中选取五个位置放了五个 hook(“勾子”) function(INPUT、OUTPUT、
FORWARD、PREROUTING、POSTROUTING),而这五个 hook function 向用户开放,
用户可以通过一个命令工具(iptables)向其写入规则,规则由信息过滤表(table)组成,
信息过滤表包含控制 IP 包处理的规则集(ruleset),规则被分组放在(chain)上。
2.1.2. Netfilter 中的数据包流动
- PREROUTING: Packets will enter this chain before a routing decision is made.
- INPUT: Packet is going to be locally delivered. It does not have anything to
do with processes having an opened socket; local delivery is controlled by
the “local-delivery” routing table: ip route show table local. - FORWARD: All packets that have been routed and were not for local delivery will
traverse this chain. - OUTPUT: Packets sent from the machine itself will be visiting this chain.
- POSTROUTING: Routing decision has been made. Packets enter this chain just
before handing them off to the hardware.
-
三种数据包流动方向
- 流入本机:PREROUTING --> INPUT–>用户空间进程
- 流出本机:用户空间进程 -->OUTPUT–> POSTROUTING
- 转发:PREROUTING --> FORWARD --> POSTROUTING
2.1.3. Netfilter 小结
- 表(filter,nat,mangle,raw,security)定义规则(rules),规则被组织在
chain
(链)中,预先
定义的chain
有五个(PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING),
管理员可以使用工具如 iptables 来新增自定义的链。
2.2. Linux 防火墙工具
2.2.1. iptables
- iptables 是由软件包 iptables 提供的命令行工具
[root@centos7 ~]# rpm -qi iptables
Name : iptables
Version : 1.4.21
Release : 33.el7
Architecture: x86_64
Install Date: Sun 15 Dec 2019 07:16:07 PM CST
Group : System Environment/Base
Size : 1555528
License : GPLv2
Signature : RSA/SHA256, Fri 23 Aug 2019 05:26:19 AM CST, Key ID 24c6a8a7f4a80eb5
Source RPM : iptables-1.4.21-33.el7.src.rpm
Build Date : Thu 08 Aug 2019 07:42:19 PM CST
Build Host : x86-02.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : http://www.netfilter.org/
Summary : Tools for managing Linux kernel packet filtering capabilities
Description :
The iptables utility controls the network packet filtering code in the
Linux kernel. If you need to set up firewalls and/or IP masquerading,
you should install this package.
-
iptables 是个工作在用户空间的工具软件,其允许系统管理员配置由 linux 内核防火墙
(由多个 Netfilter 内核模块实现)提供的表
,表中存有多个链
和规则
。也可以使用
iptables 编写规则,写好的规则被送往 netfilter 内核模块,告诉内核如何去处理信息包。 -
iptables 被用来处理 IPv4 协议,除了 iptables,还有处理其他协议的不同工具,每个工具
对应内核中的一个模块,不同的内核模块和软件被用来处理不同的网络协议:
用户空间工具 | 内核模块 | 处理的协议 |
---|---|---|
iptables | ip_tables | IPv4 |
ip6tables | ip6_tables | IPv6 |
arptables | arp_tables | ARP 地址解析协议 |
ebtables | ebtables | Ethernet frames 以太网帧 |
以上四个模块是 Netfilter hook system 比较重要的模块 |
[root@centos7 ~]# ip6tables --version
ip6tables v1.4.21
[root@centos7 ~]# arptables --version
arptables v0.0.4
[root@centos7 ~]# ebtables --version
ebtables v2.0.10-4 (December 2011)
- 需要注意的是:工具和内核模块可能同名,注意区分
2.2.2. firewalld
从 CentOS 7 版开始引入了新的前端管理工具
-
软件包:
- firewalld
- firewalld-config 管理工具:
- firewall-cmd 命令行工具
- firewall-config 图形工作
2.2.3. nftables
- 此软件是 CentOS 8 新特性,Nftables 最初在法国巴黎的 Netfilter Workshop 2008
上发表,然后由长期的 netfilter 核心团队成员和项目负责人 Patrick McHardy 于 2009
年 3 月发布。它在 2013 年末合并到 Linux 内核中,自 2014 年以来已在内核 3.13 中可用。
它重用了 netfilter 框架的许多部分,例如连接跟踪和 NAT 功能。它还保留了命名法和基本
iptables 设计的几个部分,例如表,链和规则。就像 iptables 一样,表充当链的容器,并且
链包含单独的规则,这些规则可以执行操作,例如丢弃数据包,移至下一个规则或跳至新链。 - 从用户的角度来看,nftables 添加了一个名为 nft 的新工具,该工具替代了 iptables,
arptables 和 ebtables 中的所有其他工具。从体系结构的角度来看,它还替换了内核中处理数据
包过滤规则集运行时评估的那些部分。
3. 三. iptables 工具
3.1. iptables 组成
- 在 iptables 之前的 linux 防火墙管理工具为
ipchains
,同为一个作者开发Rusty_Russell;
在 centos8 中又引入了新的管理工具来代替 iptables,叫 nftables,三者和 linux 内核的关系
及发行日期如下表:
用户空间工具 | 合并进 linux 时内核版本 | 发行日期 | 作者 |
---|---|---|---|
ipfwadm | Linux kernel 2.0.x | 没查到,based on BSD’s ipfw | FreeBSD volunteer staff members |
ipchains | Linux kernel 2.2 series | pre-1998 | Rusty Russell |
iptables | Linux kernel 3.13 | 1998 | Rusty Russell |
nftables | Linux kernel 3.13 | March 2009 | The Netfilter Project |
数据来源2 | |||
实际上在 ipchains 出现之前也有相关的防火墙管理工具,ipchains 之前使用的工具为ipfwadm |
-
iptables 也用来专指内核中的模块名,x_tables 就表示在内核中包含被四个模块(ip_tables,
ip6_tables,arp_tables,ebtables)引用的共享代码和提供给其他扩展程序的 API 的模块。
后来 Xtables 被用来代表整个 linux 的防火墙架构。在 centos 下可以看出 iptables 工具
实际上是xtables-multi
的软连接。[root@centos7 ~]# iptables --version iptables v1.4.21 [root@centos7 ~]# ll `which iptables` lrwxrwxrwx. 1 root root 13 Dec 15 19:16 /usr/sbin/iptables -> xtables-multi [root@centos8 ~]# iptables --version iptables v1.8.2 (nf_tables) [root@centos8 ~]# ll `which iptables` lrwxrwxrwx. 1 root root 17 May 11 2019 /usr/sbin/iptables -> xtables-nft-multi
-
iptables 由五个表和五个链以及一些规则组成,每个表的实现在内核中对应一个模块
表 | 内核模块 | 功能 |
---|---|---|
raw | iptable_raw module | 关闭启用的连接跟踪机制(更消耗内存和时间),加快封包穿越防火墙速度 |
mangle | iptable_mangle module | 修改数据标记位规则表,该操作使得后面的如 nat 和包过滤等动作可行 |
nat | iptable_nat module | network address translation 实现网络地址转换规则,用来评估是否以及如何修改数据包的原地址和目标地址,一般在无法直接访问某网络时用到,用来转发数据包到目的网络 |
filter | iptable_filter module | 过滤规则表,根据预定义的规则过滤符合条件的数据包,即让该数据包继续到达其预定的目的地还是拒绝其请求 |
security | security_filter module | 用于强制访问控制(MAC)网络规则 |
在数据包经过 Netfilter 的过程中,某些表会被首先执行,并对数据包做相应处理,使得接下
来的表能够正常处理和过滤包。因此表的调用和执行是由前后优先级关系的,一般的优先级
如下:
security --> raw --> mangle --> nat --> filter
security 最先,filter 最后执行。
-
五个内置的链
chain:
- INPUT
- OUTPUT
- FORWARD
- PREROUTING
- POSTROUTING
表和链的对引关系
-
数据包过滤匹配流程
- 黄色处理框–security 表
- 橙色处理框–raw 表
- 青色处理框–mangle 表
- 紫色处理框–nat 表
-
绿色处理框–filter 表
数据包大致传输过程
- 当一个网络数据包进入网卡时,数据包首先进入 PREROUTING 链,内核根据数据包目的 IP 判断是否需
要转送出去 - 如果数据包就是进入本机的,数据包就会沿着图向下移动,到达 INPUT 链。数据包到达 INPUT 链
后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包经过 OUTPUT 链,然后
到达 POSTROUTING 链输出 - 如果数据包是要转发出去的,且内核允许转发,数据包就会向右移动,经过 FORWARD 链,然后到
达 POSTROUTING 链输出
3.2. iptables 规则
-
规则 rule:
根据规则的匹配条件尝试匹配报文,对匹配成功的报文根据规则定义的处理动作作出处理,
规则在链接上的次序即为其检查时的生效次序 -
匹配条件:默认为
与
条件,即同时满足
基本匹配
:IP,端口,TCP 的 Flags(SYN,ACK 等)
扩展匹配
:通过复杂高级功能匹配,需要指定特定的模块 -
规则要添加在链上,才生效;添加在自定义上不会自动生效
-
链 chain 有内置链和自定义链:
内置链
:每个内置链对应于一个钩子函数
自定义链
:用于对内置链进行扩展或补充,可实现更灵活的规则组织管理机制;只有
Hook 钩子调用自定义链时,才生效
-
iptables 规则添加时需要考量的点
- 要实现哪种功能:判断添加在哪张表上
- 报文流经的路径:判断添加在哪个链上
- 报文的流向:判断源和目的
- 匹配规则:根据业务需要
3.3. iptables 用法说明
- 用法
iptables [-t table] {
-A|-C|-D} chain rule-specification
ip6tables [-t table] {
-A|-C|-D} chain rule-specification
iptables [-t table] -I chain [rulenum] rule-specification
iptables [-t table] -R chain rulenum rule-specification
iptables [-t table] -D chain rulenum
iptables [-t table] -S [chain [rulenum]]
iptables [-t table] {
-F|-L|-Z}