文章目录
防火墙的作用:保障数据的安全性
1. 防火墙概述
为什么要有防火墙:
相较于企业内网,外部的公网环境更加恶劣,罪恶丛生。为了保障数据的安全性,需要在公网与企业内网
之间构建一道保护屏障–防火墙。这种防火墙可以是硬件也可以是软件。
实现方式:
虽然有软件或硬件之分,但主要功能都是依据策略对穿越防火墙自身的流量进行过滤。防火墙策略可以基于流量的源目地址、端口号、协议、应用等信息来定制,然后防火墙使用预先定制的策略规则监控出入的流量,若流量与某一条策略规则相匹配,则执行相应的处理,反之则丢弃。
因为暂时没有接触到硬件类的防火墙,所以这里只记录软件类的防火墙的管理工具。
在RHEL(Red Hat Enterprise Linux)7中,firewalld取代了iptables,成为了新的防火墙管理工具。是的,这两个都不是真正的防火墙,它们都只是用来定义防火墙策略的防火墙管理工具而已,或者说,它们只是一种服务。在这一点上,有点类似于MySQL,MySQL并不是真正的数据库,而是一种数据库的管理工具,一种服务。
iptables服务会把配置好的防火墙策略交由内核层面的 netfilter 网络过滤器来处理,而 firewalld 服务则是把配置好的防火墙策略交由内核层面的 nftables 包过滤框架来处理。换句话说,当前在Linux 系统中其实存在多个防火墙管理工具,旨在方便运维人员管理 Linux 系统中的防火墙策略,我们只需要配置妥当其中的一个就足够了。
2. iptables
在早期的 Linux 系统中,默认使用的是 iptables 防火墙管理服务来配置防火墙。尽管新型的 firewalld 防火墙管理服务已经被投入使用多年,但是大量的企业在生产环境中依然出于各种原因而继续使用 iptables。同时,各个防火墙管理工具的配置思路是一致的,在掌握了 iptables 后再学习其他防火墙管理工具时,也有借鉴意义。
2.1 策略与规则链
防火墙会从上至下的顺序来读取配置的策略规则,在找到匹配项后就立即结束匹配工作并去执行匹配项中定义的行为(即放行或阻止)。如果在读取完所有的策略规则之后没有匹配项,就去执行默认的策略。
一般而言,防火墙策略规则的设置有两种:一种是“通”(即放行),一种是“堵”(即阻止)。当防火墙的默认策略为拒绝时(堵),就要设置允许规则(通),否则谁都进不来;如果防火墙的默认策略为允许时,就要设置拒绝规则,否则谁都能进来,防火墙也就失去了防范的作用。
iptables 服务把用于处理或过滤流量
的策略条目称之为规则,多条规则可以组成一个规则链,而规则链则依据数据包处理位置的不同进行分类,具体如下:
- 在进行路由选择前处理数据包(PREROUTING)
- 处理流入的数据包(INPUT)
- 处理流出的数据包(OUTPUT)
- 处理转发的数据包(FORWARD)
- 在进行路由选择后处理数据包(POSTROUTING)
一般来说,从内网向外网发送的流量一般都是可控且良性的,因此我们使用最多的就是INPUT 规则链。
对于从外网到内网的流量该如何处理?一般有两步
- 辨别来的流量属于哪种(过滤)
- 对不同的请求做不同的动作(处理)
对于辨别流量,举个栗子,
我们现在居住的社区内,物业管理公司有两条规定:1. 禁止小商小贩进入社区;2. 各种车辆在进入社区时都要登记。显而易见,这两条规定应该是用于社区的正门的(流量必须经过的地方),而不是每家每户的防盗门上。根据前面提到的防火墙策略的匹配顺序,可能会存在多种情况。比如,、
- 来访人员是小商小贩,则直接会被物业公司的保安拒之门外,也就无需再对车辆进行登记。
- 如果来访人员乘坐一辆汽车进入社区正门,则“禁止小商小贩进入社区”的第一条规则就没有被匹配到,因此按照顺序匹配第二条策略,即需要对车辆进行登记。
- 如果是社区居民要进入正门,则这两条规定都不会匹配到,因此会执行默认的放行策略。
正如上面例子中所说的,保安在辨来访人员是输入哪种(小商贩,其他人员,居民)外,还需要对其作出处理(拒绝、登记、允许入内)。这些动作对应了 iptables 服务中的ACCEPT(允许流量通过)、LOG(记录日志信息)、REJECT(拒绝流量通过并告知允许)、DROP(拒绝流量通过)。
其中拒绝有两种,REJECT和DROP,它们的共同点都是拒绝通过,不同点是REJECT拒绝后并回复发送方“您的信息已经收到,但是被扔掉了”信息。而DROP则只是拒绝。
2.2 iptables中基本的命令参数
iptables 命令可以根据流量的源地址、目的地址、传输协议、服务类型等信息进行匹配,一旦匹配成功,iptables 就会根据策略规则所预设的动作来处理这些流量。且
3. firewalld
RHEL 7 系统中集成了多款防火墙管理工具,其中firewalld(Dynamic Firewall Manager of Linux systems,Linux系统的动态防火墙管理器)服务是默认的防火墙配置管理工具,它拥有基于CLI(命令行界面)和基于GUI(图形用户界面)的两种管理方式。
相较于传统的防火墙管理配置工具,firewalld 支持动态更新技术并加入了区域(zone)的概念。简单来说,区域就是 firewalld 预先准备了几套防火墙策略集合(策略模板),用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。
例如,我们有一台笔记本电脑,每天都要在办公室、咖啡厅和家里使用。按常理来讲,这三者的安全性按照由高到低的顺序来排列,应该是家庭、公司办公室、咖啡厅。当前,我们希望为这台笔记本电脑指定如下防火墙策略规则:在家中允许访问所有服务;在办公室内仅允许访问文件共享服务;在咖啡厅仅允许上网浏览。在以往,我们需要频繁地手动设置防火墙策略规则,而现在只需要预设好区域集合,然后只需轻点鼠标就可以自动切换了,从而极大地提升了防火墙策略的应用效率。简而言之,就是定义多个防火墙情景
3.1 firewalld区域以及相关设置
firewalld中常用的区域名称及策略规则
区域 | 默认策略规则 |
---|---|
trusted | 允许所有的数据包 |
home | 拒绝流入的流量,除非与流出的流量相关;而如果流量与 ssh、mdns、ipp-client、amba-client 与 dhcpv6-client 服务相关,则允许流量 |
internal | 等同于 home 区域 |
work | 拒绝流入的流量,除非与流出的流量数相关;而如果流量与 ssh、ipp-client 与 dhcpv6-client 服务相关,则允许流量 |
public | 拒绝流入的流量,除非与流出的流量相关;而如果流量与 ssh、dhcpv6-client 服务相关,则允许流量 |
block |
查看当前处于哪种区域(模式):firewall-cmd --get-default-zone
设置当前模式为trusted :firewall-cmd --set-default-zone=trusted
3.2 firewalld常用命令
查看firewalld状态:systemctl status firewalld
[root@StudentECSLJM ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
[root@StudentECSLJM ~]#
启动firewalld服务:systemctl start firewalld
[root@StudentECSLJM ~]# systemctl start firewalld
[root@StudentECSLJM ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: active (running) since Wed 2019-07-17 15:57:22 CST; 3s ago
Docs: man:firewalld(1)
Main PID: 27789 (firewalld)
CGroup: /system.slice/firewalld.service
└─27789 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
Jul 17 15:57:21 StudentECSLJM systemd[1]: Starting firewalld - dynamic firewall daemon...
Jul 17 15:57:22 StudentECSLJM systemd[1]: Started firewalld - dynamic firewall daemon.
[root@StudentECSLJM ~]#
未完待续。。。