安全增强式Linux(SELinux,Security-Enhanced Linux)是一个Linux内核的安全模块,其提供了访问控制安全策略机制,包括了强制访问控制(Mandatory Access Control,MAC)。
2000年以GNU,GPL发布,Linux内核2.6版本后集成在内核中,SELinux是一组内核修改和用户空间工具,已经被添加到各种Linux发行版中。其软件架构力图将安全决策的执行与安全策略分离,并简化涉及执行安全策略的软件的数量。SELinux的核心概念可以追溯回美国国家安全局(NSA)的一些早期项目。(来自维基百科)
一、SELinux相关概念
1、访问控制
> DAC:Discretionary Access Control自由访问控制
> MAC:Mandatory Access Control强制访问控制
> DAC环境下,进程是无束缚的 MAC环境下,策略的规则决定控制的严格程度
> MAC环境下,进程可以被限制的策略被用来定义被限制的进程能够使用那些资源(文件和端口)默认情况下,没有被明确允许的行为将被拒绝
2、对象(object):
所有可以读取的对象,包括文件、目录和进程,端口等
3、主体:进程称为主体(subject) (bash aa.sh ps -ef |grep aa.sh)
SELinux中对所有的文件都赋予一个type的文件类型标签,对于所有的进程也赋予各自的一个domain的标签。domain标签能够执行的操作由安全策略里定义。
当一个subject试图访问一个object,Kernel中的策略执行服务器将检查AVC (访问矢量缓存Access Vector
Cache), 在AVC中,subject和object的权限被缓存(cached),查找“应用+文件”的安全环境。然后
根据查询结果允许或拒绝访问
4、安全策略:定义主体读取对象的规则数据库,规则中记录了哪个类型的主体使用哪个方法读取哪一个对象是允许还是拒绝的,并且定义了哪种行为是充许或拒绝
root 系统的超级管理员
SELinux 能限制 root 权限
root能把selinux关闭
5、SELinux启用和禁用
SELinux的状态:
enforcing:强制,每个受限的进程都必然受限
permissive:允许,每个受限的进程违规操作不会被禁止,但会被记录于审计日志
disabled:禁用
6、相关命令:
getenforce: 获取selinux当前状态
sestatus :查看selinux状态
setenforce 0|1
0: 设置为permissive
1: 设置为enforcing
配置文件:
/boot/grub/grub.conf 在kernel行使用selinux=0禁用SELinux
/boot/grub2/grub.cfg 在linux16行使用selinux=0禁用SELinux
/etc/selinux/config 或 /etc/sysconfig/selinux 中 SELINUX=
{disabled|enforcing|permissive}
二、SELinux的特性
1、安全技术
入侵检测系统(Intrusion Detection Systems):
特点是不阻断任何网络访问,量化、定位来自内外网络的威胁情况,主要以提供报告和事后监督为 主,提供有针对性的指导措施和安全决策依据。一般采用旁路部署方式。
入侵防御系统(Intrusion Prevention System):
以透明模式工作,分析数据包的内容如:溢出 攻击、拒绝服务攻击、木马、蠕虫、系统漏洞等进行准确的分析判断,在判定为攻击行为后立即予 以阻断,主动而有效的保护网络的安全,一般采用在线部署方式。
防火墙( FireWall ):
隔离功能,工作在网络或主机边缘,对进出网络或主机的数据包基于一定 的规则检查,并在匹配某规则时由规则定义的行为进行处理的一组功能的组件,基本上的实现都是默认情况下关闭所有的通过型访问,只开放允许访问的策略,拒绝所有,仅开放需要端口。
2、防火墙的分类
按保护范围划分:
主机防火墙:服务范围为当前一台主机 SELinux
网络防火墙:服务范围为防火墙一侧的局域网
按实现方式划分:
【硬件防火墙】:在专用硬件级别实现部分功能的防火墙;另一个部分功能基于软件实现,如:华为,天融信, 天融信,启明星辰,绿盟,深信服, Checkpoint,NetScreen(Juniper2004年40亿美元收购)等。
【软件防火墙】:运行于通用硬件平台之上的防火墙的应用软件,ISA Forefront TMG pc server firewalld
**云防 所有的用户遭受的攻击,都会通过AI分析并制定策略,同步给所有的用户
【按网络协议划分】:
网络层防火墙:OSI模型下四层,又称为包过滤防火墙
应用层防火墙/代理服务器:代理网关,OSI模型七层 nginx apache 安全模块
** 包过滤防火墙
网络层对数据包进行选择,选择的依据是系统内设置的过滤逻辑,被称为访问控制列表(ACL),通过
检查数据流中每个数据的源地址,目的地址,所用端口号和协议状态等因素,或他们的组合来确定是否允许该数据包通过
优点:对用户来说透明,处理速度快且易于维护
缺点:无法检查应用层数据,如病毒等
【应用层防火墙】
应用层防火墙/代理服务型防火墙,也称为代理服务器(Proxy Server)
将所有跨越防火墙的网络通信链路分为两段
内外网用户的访问都是通过代理服务器上的“链接”来实现
优点:在应用层对数据进行检查,比较安全
缺点:增加防火墙的负载提示;现实生产环境中所使用的防火墙一般都是二者结合体,即先检查网络数据,通过之后再送到应用层去检查
1、firewalld简介
firewalld是Red Hat开发的防火墙守护程序。默认情况下,它使用nftables。从项目主页:Firewalld提供了动态托管的防火墙,并支持定义网络连接或接口的信任级别的网络/防火墙区域。它支持IPv4,IPv6防火墙设置,以太网桥和IP集。运行时和永久配置选项分开。它还为服务或应用程序提供了一个接口,以直接添加防火墙规则。(维基百科)
#从CentOS 7 版开始引入了新的前端管理工具
#软件包:
firewalld
firewalld-config
#管理工具:
firewall-cmd #命令行工具
firewall-config #图形工作
2、firewalld命令行
firewall-cmd
--get-zones #列出所有可用区域
--get-default-zone #查询默认区域 (bash zsh csh)
--set-default-zone=<ZONE> #设置默认区域
--get-active-zones #列出当前正使用的区域
--add-source=<CIDR>[--zone=<ZONE>] #添加源地址的流量到指定区域,如果无--zone= 选项,使用默认区域
--remove-source=<CIDR> [--zone=<ZONE>] #从指定区域删除源地址的流量,如无--zone= 选项,使用默认区域
--add-interface=<INTERFACE>[--zone=<ZONE>] #添加来自于指定接口的流量到特定区域,如果无--zone= 选项,使用默认区域
--change-interface=<INTERFACE>[--zone=<ZONE>] #改变指定接口至新的区域,如果无--zone=选项,使用默认区域
--add-service=<SERVICE> [--zone=<ZONE>] #允许服务的流量通过,如果无--zone= 选项,使用默认区域
--add-port=<PORT/PROTOCOL>[--zone=<ZONE>] #允许指定端口和协议的流量,如果无--zone= 选项,使用默认区域
--remove-service=<SERVICE> [--zone=<ZONE>] #从区域中删除指定服务,禁止该服务流量,如果无--zone= 选项,使用默认区域
--remove-port=<PORT/PROTOCOL>[--zone=<ZONE>] #从区域中删除指定端口和协议,禁止该端口的流量,如果无--zone= 选项,使用默认区域
--reload #删除当前运行时配置,应用加载永久配置范例;
示例A
#配置firewalld
firwall-cmd
--list-services #查看开放的服务
--list-ports #查看开放的端口
--list-all [--zone=<ZONE>] #列出指定区域的所有配置信息,包括接口,源地址,端口,服务等,如果无--zone= 选项,使用默认区域
详解文档地址:https://man.archlinux.org/man/firewall-cmd.1
3、firewalld命令配置时效
①--runtime #运行时 #reload后就不生效了
②--permanent #永久生效 #reload 重载配置后立即生效
③--reload #重载系统配置文件
4、ZONES(区域)
zone名称 #默认配置
trusted #允许所有流量
home #拒绝除和传出流量相关的,以及ssh,mdsn,ipp-client,samba-client,dhcpv6-client预定义服务之外其它所有传入流量
internal #和home相同
work #拒绝除和传出流量相关的,以及ssh,ipp-client,dhcpv6-client预定义服务之外的其它所有传入流量
public #拒绝除和传出流量相关的,以及ssh,dhcpv6-client预定义服务之外的其它所有传入流量,新加的网卡默认属于public zone
external #拒绝除和传出流量相关的,以及ssh预定义服务之外的其它所有传入流量,属于external zone的传出ipv4流量的源地址将被伪装为传出网卡的地址。
dmz #拒绝除和传出流量相关的,以及ssh预定义服务之外的其它所有传入流量
block #拒绝除和传出流量相关的所有传入流量(在连不受影响)
drop #拒绝除和传出流量相关的所有传入流量(甚至不以ICMP错误进行回应
5、预定义服务
#永久生效,公共区域,添加一个ssh的服务
firewall-cmd --permanent --zone=public --add-service=http
#重载配置文件生效
firewall-cmd --reload
#查看服务列表
firewall-cmd --list-services
#查看全部(如果没有定义zone,默认为public)
firewall-cmd --list-all
示例:
[root@centos8 services]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
**services: dhcpv6-client ssh tomcat
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[root@centos8 services]# firewall-cmd --permanent --zone=public --add-service=http
success
[root@centos8 services]# firewall-cmd --reload
success
[root@centos8 services]# firewall-cmd --list-services
dhcpv6-client http ssh tomcat
[root@centos8 services]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
**services: dhcpv6-client http ssh tomcat
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
6、自定义服务(三种方法)
#自定义服务路径路径:
/etc/firewalld/services
#系统内置配置文件路径:
/usr/lib/firewalld/services
示例:开放一个9090的端口
#a.使用服务的形式
A.vi /etc/firewalld/services/apache.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>apache</short>
<description>apache is a html</description>
<port protocol="tcp" port="9090"/>
</service>
B.firewall-cmd --permanent --zone=public --add-service=apache
C.firewall-cmd --reload
D.firewall-cmd --list-all
#b.使用命令的形式
[root@centos8 services]# firewall-cmd --permanent --zone=public --add-port=9090/tcp
success
[root@centos8 services]# firewall-cmd --reload
success
[root@centos8 services]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: dhcpv6-client http ssh tomcat
ports: 9090/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
#c.修改配置文件
A.vi /etc/firewalld/services/apache.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>apache</short>
<description>apache is a html</description>
<port protocol="tcp" port="9090"/>
</service>
B1.vi /etc/firewalld/zones/public.xml
<zone>
<service name="apache"/>
</zone>
B2.vi /etc/firewalld/zones/public.xml
<zone>
<port protocol="tcp" port="9090"/>
</zone>
#注意:修改配置文件需要重载
C.firewall-cmd --reload
D.firewall-cmd --list-all
今天的关于系统安全暂时记到这里,如果有发现问题的地方请及时告知,以便于改正。谢谢!