Linux防火墙firewalld安全设置(上)

本文涉及的产品
云防火墙,500元 1000GB
简介: Linux防火墙firewalld安全设置

景描述


防火墙是具有很好的保护作用。入侵者必须首先穿越防火墙的安全防线,才能接触目标计算机。在公司里数据安全是最重要的,要求安全部门进行全公司进行服务器防火墙安全搭建,在原有的基础上进行安全的防火墙设置,大多数生产环境都建议开启,这样才能有效避免安全隐患等问题;本文文字偏多,但是建议大家还是花个十多分钟好好看一下防火墙的原理,这样便于后期问题排查,最后一小节也会有常用命令操作。


主要内容


  • 1 详细了解防火墙相关配置;


  • 2 详细解读相关安全配置方法;


  • 3 详细解读firewalld防火墙的基础知识;


  • 4 了解firewalld防火墙的配置;


  • 5 了解firewalld防火墙相关命令的使用。


1.Linux防火墙概述


防火墙是指设置在不同网络或网络安全域之间的一系列部件的组合,它能增强机构内部网络的安全性。它通过访问控制机制,确定哪些内部服务允许外部访问,以及允许哪些外部请求可以访问内部服务。它可以根据网络传输的类型决定IP包是否可以传进或传出内部网。


防火墙通过审查经过的每一个数据包,判断它是否有相匹配的过滤规则,根据规则的先后顺序进行一一比较,直到满足其中的一条规则为止,然后依据控制机制做出相应的动作。


如果都不满足,则将数据包丢弃,从而保护网络的安全。


Linux系统的防火墙功能是由内核实现的。在2.4 版及以后的内核中,包过滤机制是netfilter.CentOS 6管理工具是iptables,CentOS 7管理工具是firewalld ,firewalld 是Linux新一代的防火墙工具,它提供了支持网络/防火墙区域 (zone) 定义网络链接以及接口安全等级的动态防火墙管理。


Netfilter,位于Linux内核中的包过滤防火墙功能体系,称为Linux防火墙“内核态”。


firewall-cmd,位于/bin/firewall-cmd,是用来管理防火墙的命令工具,为防火墙体系提供过滤规则/策略,决定如何过滤或处理到达防火墙主机的数据包,称为Linux防火墙的“用户态”。习惯上,上述2种称呼都可以代表Linux防火墙。



2.Linux防火墙框架


(1) netfilter框架


Linux内核包含了一个强大的网络子系统,名为netfilter,它可以为iptables内核防火墙模块提供有状态或无状态的包过滤服务,如NAT、IP伪装等,也可以因高级路由或连接状态管理的需要而修改IP头信息。而firewalld可以动态管理防火墙,将netfilter的过滤功能集于一身,它也支持允许服务或者应用程序直接添加防火墙规则的接口,netfilter所处的位置如图1所示:


640.png


虽然防火墙模块构建在Linux内核,并且要对流经IP层的数据包进行处理,但它并没有改变IP协议栈的代码,而是通过netfilter模块将防火墙的功能引入IP层,从而实现防火墙代码和IP协议栈代码的完全分离。netfilter模块的结构。如图2所示:


640.png


      数据包从左边进入IP协议栈,进行IP校验以后,数据包被PREROUTING处理,然后就进入路由模块,由其决定该数据包是转发出去还是送给本机。若该数据包是送给本机的,则通过INPUT处理后传递给本机的上层协议;若该数据包应该被转发,则它将FORWARD处理,然后还要经POSTROUTING处理后才能传输到网络。本机进程产生的数据包要先经过OUTPUT处理后,再进行路由选择处理,然后经过POSTROUTING处理后再发送到网络。


     iptables服务在/etc/sysconfig/iptables中储存配置,而firewalld将配置储存在 /usr/lib/firewalld/和/etc/firewalld/中的各种XML文件里,使用iptables的时候每一个单独更改意味着清除所有旧有的规则和从/etc/sysconfig/iptables里读取所有新的规则,使用firewalld 却不会再创建任何新的规则,仅仅运行规则中的不同。因此firewalld可以在运行时改变设置而不丢失现行配置。


Firewalld动态管理防火墙,不需要重启整个防火墙便可应用更改。因而也就没有必要重载所有内核防火墙模块。不过,要使用firewalld就要求防火墙的所有变更都要通过firewalld守护进程来实现,以确保守护进程中的状态和内核里的防火墙是一致的。另外,firewalld无法解析由iptables和iptables命令行工具添加的防火墙规则。Firewalld防火墙堆栈示意图,如图3所示。


640.png


2.Firewall防火墙管理


FirewallD 提供了支持网络/防火墙区域(zone)定义网络链接以及接口安全等级的动态防火墙管理工具。firewalld通过将网络划分成不同的区域(通常情况下称为 zones),制定出不同区域之间的访问控制策略来控制不同区域间传送的数据流。它支持 IPv4, IPv6 防火墙设置以及以太网桥接,并且拥有运行时配置和永久配置选项。它也支持允许服务或者应用程序直接添加防火墙规则的接口。以前的 system-config-firewall/lokkit 防火墙模型是静态的,每次修改都要求防火墙完全重启。这个过程包括内核 netfilter 防火墙模块的卸载和新配置所需模块的装载等。而模块的卸载将会破坏状态防火墙和确立的连接。


相反,firewall daemon 动态管理防火墙,不需要重启防火墙便可应用更改。因而也就没有必要重载所有内核防火墙模块了。不过,要使用 firewall daemon 就要求防火墙的所有变更都要通过该守护进程来实现,以确保守护进程中的状态和内核里的防火墙是一致的。另外,firewall daemon 无法解析由 ip*tables 和 ebtables 命令行工具添加的防火墙规则。守护进程通过 D-BUS 提供当前激活的防火墙设置信息,也通过 D-BUS 接受使用 PolicyKit 认证方式做的更改。应用程序、守护进程和用户可以通过D-BUS请求启用一个防火墙特性。特性可以是预定义的防火墙功能,如:服务、端口和协议的组合、端口/数据报转发、伪装、ICMP 拦截或自定义规则等。该功能可以启用确定的一段时间也可以再次停用。


3.firewalld区域管理


网络区域定义了网络连接的可信等级。这是一个一对多的关系,这意味着一次连接可以仅仅是一个区域的一部分,而一个区域可以用于很多连接。一个IP可以看作是一个区域、一个网段可以看作是一个区域,局域网、互联网都可以看作是一个区域。例如:


  • 预定义的服务:
    服务是端口和/或协议入口的组合。
    备选内容包括 netfilter 助手模块以及 IPv4、Pv6地址。


  • 端口和协议:
    定义了 tcp 或 udp 端口,端口可以是一个端口或者端口范围。


  • ICMP阻塞:
    可以选择 Internet 控制报文协议的报文。
    这些报文可以是信息请求亦可是对信息请求或错误条件创建的响应。


  • 伪装:
    私有网络地址可以被映射到公开的IP地址。
    这是一次正规的地址转换。


  • 端口转发:


端口可以映射到另一个端口以及/或者其它主机。


现网应用中,假设互联网是不可信任的区域,而内部网络是高度信任的区域。


为避免安全策略中禁止的一些通信,它在信任度不同的区域有各自基本的控制任务。


典型的区域包括互联网(一个没有信任的区域)和一个内部网络(一个高信任的区域)。


最终目标是在不同信任力度的区域,通过安全政策的运行和连通性模型之间,根据最少特

权原则提供连通性。


例如:


公共 WIFI 网络连接应该不信任,而家庭有线网络连接就应该完全信任。


网络安全模型可以在安装、初次启动和首次建立网络连接时选择初始化。


该模型描述了主机所联的整个网络环境的可信级别,并定义了新连接的处理方式。


在 /etc/firewalld/ 的区域设定中,定义了一系列可以被快速执行到网络接口的预设定。


firewalld 提供的区域按照从不信任到信任的顺序排序。


有以下几种不同的初始化区域:


  • drop(丢弃):
    任何接收的网络数据包都被丢弃,没有任何回复。
    仅能有发送出去的网络连接。


  • block(限制):
    任何接收的网络连接,都被 IPv4 的 icmp-host-prohibited 信息和 IPv6 的 icmp6-adm-prohibited 信息所拒绝。


  • public(公共):
    该区域是系统默认区域,在公共区域内使用,不能相信网络内的其它计算机不会对您的计算机造成危害,只能接收经过选取的连接。


  • external(外部):
    特别是为路由器启用了伪装功能的外部网。
    您不能信任来自网络的其它计算,不能相信它们不会对您的计算机造成危害,只能接收经过选择的连接。


  • dmz(非军事区):
    用于您的非军事区内的电脑,此区域内可公开访问,可以有限地进入您的内部网络,仅仅接收经过选择的连接。


  • work(工作):
    用于工作区。
    您可以基本相信网络内的其它电脑不会危害您的电脑。
    仅仅接收经过选择的连接。


  • home(家庭):
    用于家庭网络。
    您可以基本信任网络内的其它计算机不会危害您的计算机。
    仅仅接收经过选择的连接。


  • internal(内部):
    用于内部网络。
    您可以基本上信任网络内的其它计算机不会威胁您的计算机。
    仅仅接受经过选择的连接。


  • trusted(信任):
    可接受所有的网络连接。


配置或者增加区域:可以使用任何一种 firewalld 配置工具来配置或者增加区域,以及修改配置。工具有例如 firewall-config 这样的图形界面工具, firewall-cmd 这样的命令行

工具,以及D-BUS接口。或者也可以在配置文件目录中创建或者拷贝区域文件。


@PREFIX@/lib/firewalld/zones 被用于默认和备用配置,/etc/firewalld/zones 被用于用户创建和自定义配置文件。


修改区域:区域设置以 ZONE= 选项 存储在网络连接的ifcfg文件中。如果这个选项缺失或者为空,firewalld 将使用配置的默认区域。如果这个连接受到 NetworkManager 控制,也可以使用 nm-connection-editor 来修改区域。


由NetworkManager控制的网络连接:防火墙不能够通过 NetworkManager 显示的名称来配置网络连接,只能配置网络接口。因此在网络连接之前 NetworkManager 将配置文件所述连接对应的网络接口告诉 firewalld 。如果在配置文件中没有配置区域,接口将配置到 firewalld 的默认区域。如果网络连接使用了不止一个接口,所有的接口都会应用到 fiwewalld。接口名称的改变也将由 NetworkManager 控制并应用到firewalld。为了简化,网络连接将被用作与区域的关系。如果一个接口断开了,NetworkManager也将告诉firewalld从区域中删除该接口。当firewalld由systemd或者init脚本启动或者重启后,firewalld将通知NetworkManager把网络连接增加到区域。

相关文章
|
2月前
|
安全 Linux 应用服务中间件
在Linux中,包过滤防火墙与代理应用防火墙有什么区别?有哪些相应的产品?
在Linux中,包过滤防火墙与代理应用防火墙有什么区别?有哪些相应的产品?
|
1月前
|
机器学习/深度学习 安全 网络协议
Linux防火墙iptables命令管理入门
本文介绍了关于Linux防火墙iptables命令管理入门的教程,涵盖了iptables的基本概念、语法格式、常用参数、基础查询操作以及链和规则管理等内容。
191 73
|
1月前
|
NoSQL Linux Redis
Linux Redis 服务设置开机自启动
【9月更文挑战第2天】在 Linux 系统中,可使用两种方法设置 Redis 开机自启动:一是通过创建 `redis.service` 文件并利用 systemd 进行管理,包括定义服务参数和启动脚本;二是编辑 `/etc/rc.local` 文件,在其中添加启动命令。推荐使用 systemd 方法,因为它更符合现代 Linux 系统的设计理念。设置完成后,可通过 `sudo systemctl status redis.service` 检查服务状态。
|
8天前
|
Linux Shell
10-8|linux date设置时间
10-8|linux date设置时间
|
10天前
|
Unix Linux Python
Cron定时设置在linux和mac中的使用
文章详细说明了如何在Linux和Mac操作系统中使用Cron进行定时任务的设置,并提供了多个Cron表达式的实例。
23 0
|
2月前
|
Linux 网络安全
linux关闭方防火墙的命令
linux关闭方防火墙的命令
43 2
|
2月前
|
Linux 网络安全
在Linux中,如何设置防火墙规则?
在Linux中,如何设置防火墙规则?
|
1月前
|
Linux
linux内核执行fork时对写时复制的设置
linux内核执行fork时对写时复制的设置
|
2月前
|
安全 Linux 数据安全/隐私保护
在Linux中,使用rsync服务模式时,如果指定了⼀个密码文件,那么这个密码文件的权限应该设置成多少才可以?
在Linux中,使用rsync服务模式时,如果指定了⼀个密码文件,那么这个密码文件的权限应该设置成多少才可以?
|
2月前
|
网络协议 Ubuntu Linux
在Linux中,设置DNS需要修改哪个配置文件?
在Linux中,设置DNS需要修改哪个配置文件?
下一篇
无影云桌面