KylinSP3 | 麒麟安全增强设置KySec与防火墙设置
一、系统防火墙原理麒麟操作系统从V10版本开始,默认使用了Firewalld防火墙,Firewalld是能提供动态管理的防火墙,支持网络/防火墙区域,用于定义网络连接或接口的信任级别。支持IPv4和IPv6防火墙设置、以太网桥接和IP集。将运行时配置和永久配置选项分开,为服务或应用程序提供了直接添加防火墙规则的接口。
Firewalld的一个很大的优势的它是动态管理的,不需要重启防服务的情况下也可以更改防火墙配置,也不会中断服务器的任何连接。
Linux是通过内核中的 netfilter 来实现网络数据包的过滤管理(查看、记录、修改、丢弃、拒绝)。netfilter 代码被编译到 Linux 内核中,并执行实际的包过滤,用户没有办法直接鱼 netfilter 交互,需要某种帮助程序作为桥梁来与 netfilter 交互。
与 netfilter 交互的方法:
管理员编写内核模块程序与 netfilter 交互 ipchains (Linux kernel 2.4) iptables (作为 Linux kernel 2.6 版本的1个特性引入) nftables
Firewalld可以理解为就是iptables的前端工具。
Netfilter是Linux核心层内部的一个数据包处理模块,Linux平台下的包过滤防火墙
网络地址转换(Network Address Translate) 数据包内容修改 数据包过滤的防火墙功能
Netfilter专业术语
表tables:相同功能规则的集合 链chains:关卡 规则policy:匹配条件、处理动作
内核空间的转发流程图
1. 链chains
链是一组规则的集合,在配置规则的时候,要注意规则的顺序。Firewalld会根据规则的先后进行匹配,当匹配到合适项时,会停止匹配。在没有匹配项时,会应用缺省规则。
2. 表table
表是由链组成的,四张表的优先级由高到低的顺序为:raw --> mangle --> nat --> filter
raw:关闭nat表上启用的连接追踪机制【iptable_raw】 mangle表:拆解报文,做出修改,并重新封装【iptable_mangle】 nat表:网络地址转换功能【内核模块:iptable_nat】 filter表:负责过滤【内核模块:iptable_filter】
如果想要Linux支持转发,需要开启内核的ip_forward功能。可以临时修改对应文件/proc/sys/net/ipv4/ip_forward。
ip_forward默认是关闭的,可以通过查看/proc/sys/net/ipv4/ip_forward文件查看
cat /pro/sys/net/ipv4/ip_forward
临时启用IP转发功能:使用echo命令修改文件以开启IP转发,直接使用vim是无法编辑的
echo1> /proc/sys/net/ipv4/ip_forward永久启用IP转发功能:修改内核文件,修改 ip_forward 的值
vim /etc/sysctl.conf
# 修改下列选项值为1net.ipv4.ip_forward=1
sysctl-p# 生效配置文件
二、 Firewalld防火墙控制
防火墙的类别
[*]静态防火墙
只要修改规则就要进行所有规则的重新载入,例如:iptables service
[*]动态防火墙
任何规则的变更都不需要对整个防火墙规则列表进行重新加载,只需要将变更部分保存并更新到 iptables ,例如:firewalld
Firewalld提供了一个 daemon 和 service,还有命令行和图形界面配置工具,它仅仅是替代了 iptables service部分,其底层还是使用 iptables 作为防火墙规则管理入口。真正利用规则进行数据包过滤是由内核中的 netfilter 子系统负责。
1. 区域zone
Firewalld将网卡对应到不同的区域(zone),zone默认一共有9个
不同区域之间的差异是它对待数据包的默认行为不同,根据区域名字我们可以很直观的知道该区域的特征,在银河麒麟操作系统中,默认区域为public。 Firewalld默认每个服务都是拒绝,需要去设置才能放行
通过查看/usr/lib/firewalld/zones目录可以看到系统预先配置的区域和服务,zones文件都是xml格式
Firewalld区域(zone)
区域zone默认策略规则适用区域trusted(信任)接受任何网络连接,允许所有数据包进出内部网络home(家庭)流量与ssh、mdns、ipp-client、samba-client、dhcpv6-client服务相关允许进入家庭网络Internal(内部)等同于home区域内部网络work(工作)仅流量与ssh、ipp-client、dhcpv6-client服务相关允许进入工作区public(公共)只有经过选取的连接、流量与ssh、dhcpv6-client服务相关允许进入公共区域external(外部)流量与ssh服务相关允许进入启用伪装功能的外部网dmz(非军事区)可以公开访问、可以有限的进入内部网络、流量与ssh服务相关允许进入,安全级别位于内网与外网间(停火区域)允许公网访问的服务器所在区域block(限制)任何接接收的网络连接都被拒绝保护区域2. 图形界面修改防火墙设置
3. 命令行界面修改防火墙设置
Firewalld基本命令
命令说明systemctl start firewalld开启防火墙systemctl enable firewalld开机自启防火墙systemctl stop firewalld关闭防火墙systemctl disable firewalld开机自动关闭防火墙firewalld-cmd --state | systemclt status firewalld查看防火墙状态firewalld-cmd --get-active-zones查看防火墙管理的设备firewalld-cmd --get-default-zone查看防火墙生效的区域firewalld-cmd --get-zones查看防火墙所有区域firewalld-cmd --zone=public --list-all列出关于public区域的服务设置firewalld-cmd --get-services列出可使用的服务firewalld-cmd --set-default-zone=trusted修改默认区域为trustedfirewalld-cmd --list-all-zones列出所有的区域firewalld-cmd --set-default-zone=dmz设置防火墙的区域firewalld-cmd --set-default-zone=dmz查看特定区域的信息修改安全策略
命令说明firewalld-cmd --add-service=https临时添加服务(默认的区域)firewalld-cmd --permanent --add-service=https永久添加服务(默认的区域)firewalld-cmd --add-port=80/tcp临时添加端口firewalld-cmd --remove-interface=eth0删除接口firewalld-cmd --permanent --change-interface=eth1 --zone=dmz永久更改接口区域firewalld-cmd --remove-souce=192.168.10.1 --zone=block临时拒绝主机192.168.10.1的所有网络连接firewalld-cmd --remove-source=192.168.10.1 --zone=block --permanent永久移除限制firewalld-cmd --complete-reload中断连接,重启防火墙策略firewalld-cmd --reload不中断连接,重启防火墙策略firewalld-cmd --direct --get-all-rules查看设置的规则: Firewalld服务默认为开机自启,可以通过命令查看
: 当使用 firewalld-cmd 命令时,如果拼写错误会有智能提示
firewalld-cmd --list-zone # 查看防火墙所有区域,正确命令为[ --list-zones ]
: 防火墙配置文件可以手动修改,修改后需要重启防火墙或重新加载生效
vim /etc/firewalld/zones/public.xml
# 允许http服务通过<service name="http">
firewall-cmd --reload# 重新加载防火墙,不会中断用户连接
firewall-cmd --list-services --zone=public # 查看防火墙放行的服务,可以看到多出http
: 当防火墙出现严重问题时,如:防火墙规则设置正确,但却出现状态信息问题和无法建立连接
firewall-cmd --complete-reload # 重新加载防火墙并中断用户连接4. 服务配置文件
在/usr/lib/firewalld/services目录下保存了daemon文件,每个文件对应一项具体的网络服务。
与之对应的配置文件中记录了各项服务所使用的tcp/udp端口,当默认提供的服务不够用或需要自定义某项服务的端口时,我们需要将 service 配置文件放置在 /etc/firewalld/services目录中 每加载一项已设置好的 service 配置就意味着开放对应端口访问 请勿修改/usr/lib/firewalld/services,只有/etc/firewalld/services的文件可以被编辑
查看ssh服务的配置文件内容
vim /usr/lib/firewalld/services/ssh.xml
如果想修改特定服务,可以将该服务配置文件复制到/etc/firewalld/services/目录下
系统会优先读取/etc/firewalld里面的文件,其次读取/usr/lib/firewalld/services/中的文件,为了方便管理和修改,建议将文件复制到/etc/firewalld/services/目录下。
cp /usr/lib/firewalld/services/http.xml /etc/firewalld/services添加自定义服务:添加8080端口
# 随便复制一个配置文件充当模板cp /usr/lib/firewalld/services/http.xml /etc/firewalld/services/tcp8080.xml
# 编辑新配置文件,修改后内容如下图所示vim /etc/firewalld/services/tcp8080.xml
# 将新添加的服务文件添加到 public 区域配置文件中vim /etc/firewalld/zones/public.xml
# 末尾追加一行<service name="tcp8080"/>
firewall-cmd --reload# 重新加载防火墙验证:可以通过8080访问服务器上的web服务
三、麒麟安全增强设置
1. 管理员分权机制(管理员权限拒绝滥用)
存在的问题
超级管理员权限具有所有权限【权限不受限】 系统容易发生错误【当超级管理员误删除关键文件】 病毒木马容易入侵【提权后可以肆意攻击,存在安全隐患】
管理员分权的优势
将超级管理员的权限拆分 三个管理员相互合作、互相制约【三权分立】 避免误操作引起的系统错误 避免权限过大引起的安全隐患
2. 典型实施机制(进程和数据安全隔离)
存在的问题
进程可以随意访问数据 数据安全性、机密性差
进程和数据安全隔离的优势
对进程可以划分不同类型域 对文件数据可以划分不同的类型域 数据隔离
3. 多级安全机密性机制(等级划分、安全机密)
存在的问题
无等级划分、访问数据限制性较低 低级别进程可以访问部分数据 数据安全性、机密性差
等级划分、安全机密的优势
禁止上读下写 保证数据机密性
4. Kysed机制(提出基于标记的软件执行控制机制)
未认证非法外来、被篡改程序拒绝执行 外来内核模块拒绝加载 非法来源程序拒绝安装 保护文件拒绝篡改 保护内核模块拒绝卸载 未授权应用拒绝联网 保护进程拒绝被杀死
5. 支持国密算法(支持软硬国密算法)
存在的问题
不支持、不合规
支持软硬算法的优势
符合国家密码主管部门要求
6. 用户UID唯一性(用户拒绝重复)
存在的问题
用户删除之后,重复使用 用户信息容易泄露
用户拒绝重复的优势
用户UID唯一,且不可重复 保证用户信息机密性
7. 安全中心(病毒防护、账户安全、网络保护、应用执行控制、极限扫描功能)
存在的问题
功能分散、难以整合 命令操作系统为主,用户体验感差、交互差
安全中心的优势
图形化操作,操作简便,交互友好 功能集中,统一配置和管理
8. 安全管理工具(对系统安全模式、系统安全状态、执行控制功能、管理员分权、内核防卸载功能、文件保护功能等安全功能管理)
存在的问题
命令操作门槛高,不易操作 用户体验不直观,交互体验差
安全管理工具的优势
统一管理 操作简便 交互友好
9. 文件保密箱(数据隔离、授权共享、透明加解密)
存在的问题
数据被其它用户可见、可操作、可复制、数据存储不安全 其它用户难以共享数据,配置复杂 数据明文存储,机密性差,容易被窃取 硬盘被窃取后,所有数据全部泄露
文件保险箱的优势
数据安全隔离、数据可授权共享 数据加解密,保证数据机密性 硬盘被窃取后,加密数据无法查看,依然保证数据机密性 图形化操作,操作简便,交互友好
10. 日志管理工具(日志展示、日志过滤、日志检索、日志导出)
存在的问题
日志过多,管理难 日志查看不便,搜索不便
日志管理根据的优势
便于日志查看、管理 便于搜索定位 便于导出
四、访问控制模型
**DAC:**自主访问控制是Linux下默认的接入控制机制,通过对资源读、写、执行操作,保证系统安全。
**MAC:**安全接入控制机制,默认情况下:MAC不允许任何访问,用户可以自定义策略规则,指定运行什么,从而可以避免很多攻击。
MAC强制访问控制有三种实现方式:Apparmor、SELinux、Kysec
Apparmor:内核模块的一个安全框架,是Ubuntu的强制访问默认选择 SELinux:美国国家安全局(NSA)对于强制访问控制的实现,是RHEL的强制访问默认选择 KySec:是基于kysec安全标记对执行程序、脚本文件、共享库、内核模块进行保护的一种安全机制,是麒麟操作系统的强制访问默认选择
KYSEC的两种安全模式
强制模式(Normal):出现违规操作时,阻止该操作的运行并审计记录该操作 警告模式(Warning):出现违规操作时,弹出麒麟安全授权认证框进行授权(桌面操作系统才有) 软模式(Softmode):出现违规操作时,只会审计记录该操作,不会阻止该操作的运行
五、麒麟安全增强Kysec
Tips:在安装麒麟操作系统时,默认不会安装【麒麟安全增强工具】,也就无法使用kysec
后期如果需要使用麒麟安装增加工具,不同的命令需要安装不同的软件包,以下安装包推荐使用Kylin自带的网络源进行安装
# 查看当前kysec安全状态的命令,
kysec-utils-3.4.1-01.se.26.ky10.x86_64
# 修改kysec安全状态的命令
security-switch-1.3.1-1.se.04.ky10.x86_64
# 查看kysec安全标记的命令,在安装kysec-utils会关联安装
kysec-utils-3.4.1-01.se.26.ky10.x86_64查看当前kysec的安全状态
getstatus
kysec安全标记类型安全状态exec control(执行控制)on/off/warningnet control(网络控制)on/off/warningfile protect(文件保护)on/off/warningkmod protect(内核模块保护)on/off/warningthree protect(三权分立)on/off/warningprocess protect(进程保护)on/off/warningKYSEC的开启与关闭,需要重启系统生效
security-switch --set default # 开启KYSEC
security-switch --set none # 关闭KYSEC
security-switch --set strict # 启用三权分立
设置KYSEC的模式为softmode还是normal
setstatus softmode/normal修改相应功能安全状态,将网络控制模式临时关闭
setstatus kysec -f netctl -c off -t
-f netctl:指定安全模块下的子功能 -c off:设置子功能的状态,on为开启,off为关闭 -t:临时生效
1. 查看kysec安全标记
文件身份标记:用于对执行文件的用户进行限制
secadm:文件属于安全管理员,只能由安全管理员执行 audadm:文件属于审计管理员,只能由升级管理员执行 none:无身份标记,所有用户都可执行
文件保护标记:用于对文件进行保护和检测
verify:执行前检查文件是否发生变化,如果发生变化,禁止执行 readonly:文件只读,对文件的写、移动、重命名和属性修改操作都禁止 none:无文件保护标记
执行控制标记:用于对文件的是否可执行进行控制
unknown:未知文件标记,该标记不可执行 original:系统原始文件标记,该标记可执行 verified:第三方可执行文件标记,该标记可执行 kysoft:可信安全脚本标记,该标记可执行 trusted:可信文件标记,拥有该标记的程序对文件仅修改时,文件标记不变,该表可执行
查看安全标记
kysec_get exectl -f xxx # 查看xxx文件的执行控制标记
kysec_get fpro -f /usr/bin/ls # 查看/usr/bin/ls的文件保护标记
2. 可执行文件的可执行控制
: 首先查看kysec的安全状态,可以看到当前执行控制模式为on
getstatus
: 查找本地的cat命令,将cat命令拷贝到/tmp目录下
whereiscatcp /usr/bin/cat /tmp
ll /tmp
: 尝试使用tmp目录下的cat命令查看文件内容,可以看到该命令无法被执行
/tmp/cat /etc/selinux/config
: 临时关闭执行控制模式,重新使用该命令查看文件内容,此时可以看到文件内容
setstatus kysec -f exectl -c off -t
/tmp/cat /etc/selinux/config
: 重新开启执行控制模式状态,然后查看/tmp/cat文件的执行控制标记
setstatus kysec -f exectl -c on -t
kysec_get exectl -f /tmp/cat
: 修改/tmp/cat文件的执行控制标记为kysoft,然后使用/tmp/cat查看任意文件内容
kysec_set exectl -v kysoft -f /tmp/cat
-v kysoft:标记值,此处设置为kysoft -f /tmp/cat:文件或目录路径, 设置文件或目录下文件的标记
kysec_get exectl -f /tmp/cat
/tmp/cat /etc/selinux/config
: 同时,如果修改文件内容后,改文件的执行控制标记会变更为unkonow
kysec_get exectl -f /tmp/cat
echo"">> /tmp/cat # 修改文件内容
kysec_get exectl -f /tmp/cat
3. 可执行文件的可执行控制
: 首先查看kysec的安全状态,可以看到当前执行控制模式为on
getstatus
: 新建一个脚本,赋予该脚本执行权限
touch demo.sh
chmod +x demo.sh # 赋予该脚本执行权限,此处给所属者添加执行权限vim demo.sh
# 写入下列内容#!/bin/bashecho"Hello!": 测试执行脚本,提示【解释器错误:权限不够】
: 修改执行控制标记为kysoft,并尝试重新执行脚本文件
kysec_set exectl -v kysoft -f demo.sh
kysec_get exectl -f demo.sh
4. 内核模块的可执行控制
: 首先将内核文件拷贝至当前目录
cp /lib/modules/4.19.90-89.11.v2401.ky10.x86_64/kernel/net/netfilter/nf_conntrack_ftp.ko.xz .: 将模块载入到内核中,此时会提示资源不可用
insmod nf_conntrack_ftp.ko.xz
: 修改执行控制标记为original,并尝试重新载入模块,此时不会报错
kysec_set exectl -v original -f nf_conntrack_ftp.ko.xz
kysec_get exectl -f nf_conntrack_ftp.ko.xz
5. 文件保护(受保护的文件不能被修改、重命名和删除)
: 本地新建一个文件,设置文件保护标记为只读
echo Hello > demo.txt
kysec_set fpro -vreadonly-f demo.txt
: 测试发现,可以正常读取该文件,但是无法修改文件
: 修改文件保护标记为verify,移动该文件到/tmp目录下,可以发现无法读取该文件
kysec_set fpro -v verify -f demo.txt
mv demo.txt /tmp/六、三权分立
主要的设计思想是将传统意义上的超级管理员root的权利进行划分,分为root(uid=0)、secadm(uid=600)和auditadm(uid=700)分别作为超级管理员的别名存在。通过SELinux+admin3+kysec技术实现基于角色的访问控制机制。三权系统除了使用传统的Linux用户身份鉴定机制外,还可以使用双因子验证方式进行身份验证,符合公安部的安全操作系统的相关标准。不同权限管理员之间实现权限隔离,满足等保“权限最小化原则”,提升系统抗风险能力。
: 开启三权分立功能,在启用三权分立时,需要为三个用户设置密码
security-switch --set strict
: 在重启过后,会出现两个新的用户
: 使用auditadm用户(审计管理员)登录,在对磁盘进行操作时,会提示权限不够
: 使用secadm用户(安全管理员)登录,新建用户时,会提示权限不够
: 禁用三权分立
security-switch --set default七、关闭KYSEC
: 编辑引导配置文件,将与kysec有关的东西全部删掉
vim /etc/default/grub
# 修改后内容如下图
: 先查看当前的硬盘编号,然后重新安装引导配置文件到硬盘中
lsblk
grub2-install /dev/sda
: 重新生成引导配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg
: 重启服务器,可以看到kysec已经被关闭
页:
[1]