手册下载
安全加固手册
资料版本:5W400-20230321
Copyright © 2023 新华三技术有限公司 版权所有,保留一切权利。
非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。
除新华三技术有限公司的商标外,本手册中出现的其它公司的商标、产品标识及商品名称,由各自权利人拥有。
本文档中的信息可能变动,恕不另行通知。
目 录
2.4.2 PXC(Percona XtraDB Cluster)数据库加固
3.1.2 OpenFlow SSL连接证书的SAN/CN校验
3.2.2 PXC(Percona XtraDB Cluster)数据库加固
本文档针对SeerEngine-DC数据中心控制组件产品,指导用户从操作系统层面、微服务平台和控制组件层面对产品进行加固维护。
控制组件的安全加固是针对全系统的多层次多角度的实现。它并不是一个独立的设计,而是全系统所有业务在设计和实现层面执行的原则。通过全面的安全设计和实现,为DC控制组件提供全方位的安全防护,为用户提供安全、可靠的软件使用体验。
SeerEngine-DC主机操作系统由统一数字底盘提供。统一数字底盘的操作系统有一系列的安全控制机制,对运行在该操作系统上的应用进行安全防护。
SeerEngine-DC容器内操作系统为H3Linux,该操作系统经过了充分的安全加固,并且跟随CVE(通用漏洞披露)的发布,每个正式发布版本都将进行漏洞确认和修复,在保障系统稳定的情况下,第一时间更新至最安全的操作系统版本。同时使用最小权限原则,容器内的操作系统采用最小操作系统版本,裁减所有不必要的软件包,从源头上最大程度保证系统的安全性。
SeerEngine-DC控制组件所在的操作系统仅开放必要的端口,其余所有端口都默认关闭。
SeerEngine-DC基于统一数字底盘的微服务平台实现集群机制。统一数字底盘的微服务平台有一系列的安全控制机制,对平台以及平台上的应用进行安全防护。
· 微服务架构下的数据库服务运行在Pod容器内,除最高权限的root用户外,用户不能登录到容器内进行查看和配置操作。
· 数据库服务所在容器的IP网段和用户管理网段隔离,无法三层互通。
· 部分数据库服务仅允许本地访问,安全控制手段包括:
¡ 只监听容器内的本地地址,主机和主机之外的系统不可访问。
¡ 配置数据库白名单只允许本地访问。
· 业务组件作为数据库的客户端,访问数据库时需要进行以下安全防护:
¡ 使用IPtables规则对访问进行控制。正常情况下,除明确指定的内部业务组件之外,外部软件和客户端无法访问数据库服务。
¡ 需要通过用户名和密码认证后才可以访问,密码需要符合长度、特殊字符等复杂度要求。
· 支持对系统中存在的证书进行有效期、SAN合法性的检查,并进行告警通知,提醒用户进行证书更换。
· 使用安全的加密算法和安全的密钥长度。
针对浏览器中的多种攻击和漏洞情况,控制组件的前端框架对浏览器进行了安全加固。例如,升级至安全的JQuery版本,避免HTTP Host头攻击漏洞,禁止用户通过浏览器获取服务信息等。
南向协议通道是控制组件和外部通信的主要通道,作为对外开放的通信入口,南向协议在网络层面和协议层面进行了双重的安全加固。
控制组件通过在微服务平台创建的南向网络和外部进行通信,南向网络由IPtables规则进行保护,仅允许指定IP地址指定端口的报文收发。所有非指定IP/端口的报文都会被系统丢弃。
所有的南向协议都支持加密或认证机制。
业务安全性和业务的具体实现相关,例如在设备自动化上线业务中,控制组件会通过白名单来控制指定序列号的设备上线。不在设备清单中的设备,无法和控制组件通信,从源头上杜绝对控制组件进行攻击的可能。
· 最小权限原则:仅给用户或者服务提供最小可用的权限,避免不必要的信息暴露。
· 最小服务原则:业务服务仅对外提供必要的业务功能,不必要的功能接口不会对外开放。
· 最小信息披露原则:对于系统使用的功能服务版本等信息默认不对外提供,避免攻击者利用信息进行攻击或者其他恶意猜测行为。
· 最大控制原则:最大程度控制和监控用户以及业务服务的行为,保证所有操作行为可控。
· 可审计原则:所有的敏感操作均有日志记录,保证系统可追溯、可审计。
安全加固原则会应用到所有业务服务中,提供一个全面安全的控制组件系统。控制组件同时也会对操作行为、设备行为进行记录,保证全网系统的安全行为可查可审计。
root、sysop、appadmin三个用户的UID都为0时,可能出现即使使用root用户登录远程连接,也会提示当前用户不是root的情况,最终导致部署和执行免密脚本失败。
系统中应仅存在一个UID为0的用户。可使用awk -F: '($3 == 0) { print $1 }' /etc/passwd命令查询UID为0的用户信息。
在Linux系统中,一些程序在安装时会创建特有的用户和组,这些用户仅仅用于启动服务或运行进程,通常是不允许登录的(nologin),例如mysql、apache、named、news等。当攻击者假冒这些用户或组身份时,往往不易被管理员发现。
查看文件/etc/login.defs中GID_MIN、GID_MAX的值;查看nologin用户ID。系统中不应该存在如下用户:GID_MIN =< nologin用户的ID <= GID_MAX。
如果帐户的密码过于简单,容易被破解,存在安全隐患。
系统中应不存在空口令帐号。可使用awk -F: 'length($2)==0 {print $1}' /etc/shadow命令查看使用空口令的帐户。
应按照不同的用户分配不同的帐号,避免不同用户间共享帐号,避免用户帐号和设备间通信使用的帐号共享。
查看文件/etc/login.defs中GID_MIN、GID_MAX的值。系统中不应该存在如下用户:GID_MIN =< 用户的ID <= GID_MAX。
通常情况下,系统删除用户后,仅删除了系统的用户信息(用户名、口令),用户不能再次登录系统。但系统中仍残留用户的进程、目录、邮件以及其他文件信息。如果不能进行彻底清理残留信息,将存在已删除用户的信息被泄露的安全隐患。
使用alias工具为userdel启用别名并调用脚本,在删除用户时,同时删除用户的进程、目录、邮件以及其他文件。
如果帐户的密码过于简单,容易被破解,存在安全隐患。
用户密码进行了复杂度加固,要求帐户密码不少于8位,使用大写字母+小写字母+特殊字符的组合形式,提升帐号的安全性。
用户密码是用户登录系统的关键凭证,密码被破解将直接导致用户信息泄露。如果管理员密码被获取,更有可能对系统造成破坏。一些入侵软件通过穷举密码的方式进行用户密码破解,长时间保持单一密码,将增大被入侵软件破解密码的可能性。
通过修改系统配置文件/etc/login.defs,可对用户密码生存周期进行限制,同时在密码过期前,提醒用户进行修改。
用户密码是用户登录系统的关键凭证。用户修改后的密码如果和之前用过的密码相同,将增大被破解的可能性,存在安全隐患。
为了保障用户安全,可通过配置重复密码次数限制功能增强密码安全性。
进入系统配置文件/etc/pam.d/system-auth,修改password required pam_pwhistory.so enforce_for_root remember参数的取值。
用户密码是用户登录系统的关键凭证。一些攻击性的软件采用暴力破解密码的方式,进行反复登录尝试,从而获取用户密码。如果没有重复失败登录的处理机制,将无法对此类攻击进行有效防护,存在安全隐患。
为保障用户安全,可通过配置重复失败登录锁定用户的功能,提升用户安全性。该功能可设置登录失败的最大次数、锁定后的自动解锁时间。用户锁定期间,任何输入被判定为无效,锁定期间内不因用户的再次输入而重新计时;解锁后,用户的错误输入记录被清空。通过上述设置可以有效防范口令暴力破解,增强系统的安全性。
重复失败登录锁定功能的默认配置如下:
auth [success=1 default=bad] pam_unix.so
auth [default=die] pam_faillock.so authfail deny=5 even_deny_root unlock_time=300 root_unlock_time=10
auth sufficient pam_faillock.so authsucc deny=5 even_deny_root unlock_time=300 root_unlock_time=10
auth required pam_deny.so
su命令用于在不同帐号之间切换。若没有对su命令用户组进行限制,任何获取root密码的用户,都可以通过su命令登录为root用户,为系统和信息安全带来隐患。
为了增强系统安全性,可对su命令的使用权进行控制,只允许root和加入wheel群组的帐号使用su命令,禁止wheel组之外的用户通过su命令切换为root。
当对服务器进行远程管理时,应采取必要措施,防止鉴别信息在网络传输过程中被窃听。防止远程管理过程中,密码等敏感信息被窃听。
不使用Telnet服务,使用sshd服务。
当对服务器进行远程管理时,应采取必要措施,防止鉴别信息在网络传输过程中被窃听。防止远程管理过程中,密码等敏感信息被窃听。
未开启Telnet功能。
通常情况下,用户在使用SSH登录时,即使登录失败,也会自动显示系统版本信息之类的敏感信息。该信息可能被黑客利用,存在安全隐患。
配置ssh_banner警告信息,在用户通过SSH登录系统时进行提示,并隐藏敏感信息。系统默认已经添加了ssh_banner警告信息。
修改系统banner警告信息,避免泄漏操作系统信息。
开启SSH,并配置/etc/ssh_banner信息。
· 缺少访问控制机制
· 没有真正的用户验证机制,只针对RPC/Mount请求进行过程验证
· 较早版本的NFS可以使未授权用户获得有效的文件句柄
· 在RPC远程调用中,SUID程序具有超级用户权限。
未开启NFS。
若使用匿名登录FTP,则存在安全隐患,导致节点被任意人访问。
未配置FTP服务。
Tunnel设备功能可以实现端口转发,绕过防火墙进行系统访问。开启Tunnel设备功能将可能遇到外部网络的恶意访问攻击,存在极大的安全隐患。
系统默认禁用了Tunnel设备功能。
/etc/passwd、/etc/shadow、/etc/group等帐号相关文件权限过低,低权限用户可以获取更高用户权限。
· /etc/passwd文件的权限<=644(所有用户必须拥有读权限,只有root用户有写权限)
· /etc/shadow文件的权限<=600(只有root用户拥有该文件的读写权限)
· /etc/group文件的权限<=644(所有用户必须拥有读权限,只有root用户有写权限)
rw-r--r--. 1 root root 805 4月 27 07:25 /etc/group
-rw-r--r--. 1 root root 1720 4月 27 07:25 /etc/passwd
----------. 1 root root 1029 4月 27 07:25 /etc/shadow。
ICMP路由重定向攻击(ICMP Redirect Attack)是指攻击者伪装成路由器发送虚假的ICMP路由路径控制报文,使得受害主机选择攻击者指定的路由路径,从而进行嗅探或假冒攻击的一种技术。
禁止ICMP重定向,net.ipv4.conf.all.accept_redirects的值为0。
/var/log下记录多种系统日志,若日志文件权限超过640,可能会导致日志丢失,关键事件无法被记录。
· /var/log/message:内核消息及各种应用程序的公共日志信息。
· /var/log/secure:用户认证相关的安全事件信息。
· /var/log/cron Crond:周期性计划任务产生的时间信息。
· /var/log/secure Linux:系统安全日志,记录用户和工作组变坏情况、用户登录认证情况。
· /var/log/maillog:进入或发出系统的电子邮件活动。
· /var/log/spooler:与UUCP和news设备相关的日志信息。
· /var/log/boot.log:记录了系统在引导过程中发生的事件,即Linux系统开机自检过程显示的信息。
查看所有系统日志文件权限为600。
-rw-------. 1 root root 6299848 7月 26 17:01 /var/log/messages
-rw-------. 1 root root 1529761 7月 26 17:01 /var/log/cron
-rw-------. 1 root root 49970 7月 10 16:29 /var/log/secure
-rw-------. 1 root root 356 4月 27 07:02 /var/log/maillog
-rw-------. 1 root root 0 4月 27 06:56 /var/log/spooler
-rw-------. 1 root root 0 7月 11 03:28 /var/log/boot.log
帐户登录日志可以有效反馈帐户登录信息,以及反馈系统是否被攻击过。
rsyslog配置日志记录帐户登录信息。
/etc/rsyslog.conf中记录authpriv。
authpriv.* /var/log/secure
在授权其他帐户su权限时,最好监控帐户使用情况。
/etc/rsyslog.conf文件中存在authpriv记录,可以记录帐户使用su命令情况。
authpriv.* /var/log/secure
cron是周期性定时执行任务,可以有效记录系统定时执行任务结果,提早发现周期性定时任务问题。
/etc/rsyslog.conf文件中存在cron记录,可以记录定时执行任务日志。
cron.* /var/log/cron
日志文件包含了系统中发生的事件信息,在排障过程中或者系统性能分析时经常被用到。对于忙碌的服务器,日志文件增长速度较快,不进行及时的处理将会占用大量系统空间。另外,过于庞大的日志文件也会对问题的排查带来不必要的麻烦。
利用开源软件logrotate进行日志管理工作。默认配置了日志切割和轮转的功能,限制日志大小10 MB,最多备份3个日志文件。
SYN Flood攻击者可以使用不完善的TCP/IP三次握手,恶意发送大量只包含SYN握手序列的数据包,导致计算机拒绝服务甚至崩溃,从而使潜在的连接占用大量的系统资源,无法完成三次手。
使用cat /proc/sys/net/ipv4/tcp_syncookies命令(默认值为1),可以打开SYN Cookie功能,缓解SYN Flood攻击。
攻击者可以利用OpenSSL心血(Heartbleed)漏洞获取用户原本想要保密的信息,比如网站登录名和密码、期间修改过的个人隐私信息、期间修改过的密码保护问题答案,还有信用卡信息和邮件服务器的上的邮箱地址和哈希密码(Password Hash)。
OpenSSL版本应不在有缺陷版本范围内。
openssl version
OpenSSL 1.0.2k-fips 26 Jan 2017
攻击者利用这个bash安全漏洞,可能会接管计算机的整个操作系统,得以访问机密信息,并对系统进行更改等等。
已使用安全的bash版本,通过执行下列命令,反馈无异常。
env -i X='() { (a)=>\' bash -c '/dev/stdout echo vulnerable' 2>/dev/null
长时间不操作,若不退出登录,会导致其他用户对系统进行操作。
在/etc/profile文件中设置TMOUT=300。使用如下命令可查看登录超时时间。
cat /etc/profile |grep -v "^[[:space:]]*#"|grep -v "^$"|grep "TMOUT"
export TMOUT=300
root环境变量存在.或者..的路径,执行脚本时,输入脚本名字后,系统就会在当前的目录下寻找该脚本并执行。执行rm -rf *类命令,存在系统被删除风险。
查看root用户环境变量中是否存在.或者..的路径。
echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
如果存在tcpdump等网络嗅探类工具,将有可能被攻击者利用,对用户收发的数据包进行截获、提取、分析等操作,带来信息安全隐患。
系统默认删除了tcpdump软件。
SELinux是H3Linux系统的安全子系统模块,可最大限度地减小系统中服务进程可访问的资源(最小权限原则),关闭该模块后将不能严格控制用户对有敏感标记重要信息资源的操作,带来安全隐患。
开启SELinux,对违反SELinux规则的行为将被阻止并记录。系统默认开启了SELinux。
如果DC控制组件存在安全漏洞,极易被黑客攻击,导致数据泄露和破坏,影响业务正常运行。
SeerEngine-DC数据中心控制组件定期会使用安全漏洞扫描工具对控制组件进行全面扫描,并且会关注业内安全厂家通报的重大漏洞。
对于已经发现的安全漏洞,DC控制组件会及时进行修复,并加以记录。具体安全漏洞的加固情况可以参考《H3C SeerEngine DC安全漏洞列表》。
如果DC控制组件使用的开源软件存在安全漏洞,极易被黑客攻击,导致数据泄露和破坏,影响业务正常运行。
SeerEngine-DC控制组件会对使用的开源软件加以跟踪和维护,对有安全隐患的开源软件,会及时评估影响,如果对控制组件有安全威胁,SeerEngine-DC控制组件会及时对对应的开源软件做补丁、升级、规避修复。详细信息请参见《H3C SeerEngine-DC开源软件列表》。
数据库作为DC控制组件的重要存储组件,需要做好用户权限控制。
仅配置必须使用的用户,给用户赋予合适的权限。
|
用户名 |
用户权限 |
|
postgres |
管理员(系统用户),拥有全部权限 |
|
root |
管理员,拥有全部权限 |
|
sdn |
操作员,有rolinherit、rolcreatedb、rolcanlogin权限 |
如果数据库密码复杂度过于简单,容易被破解,存在安全隐患。
数据库用户密码进行了复杂度加固,使用了大写字母+小写字母+特殊字符的组合形式,提升数据库的安全性。
如果不设置数据库白名单,数据库可以被系统外部访问,存在安全隐患。
控制组件的PostgreSQL数据库仅允许127.0.0.1和::1,即从本机访问。
数据库作为DC控制组件的重要存储组件,必须保证安全性和稳定性,如果存在安全漏洞,容易导致DC控制组件数据被破坏。
DC控制组件使用了安全稳定性高的PostgreSQL版本。
表2-1 数据库组件版本
|
Name |
Version |
Release |
|
postgresql |
9.2.24 |
4.el7_8 |
|
postgresql-server |
9.2.24 |
4.el7_8 |
|
postgresql-contrib |
9.2.24 |
4.el7_8 |
|
postgresql-jdbc |
9.2.1002 |
6.el7_5 |
|
postgresql-odbc |
09.03.0100 |
2.el7 |
|
postgresql-libs |
9.2.24 |
4.el7_8 |
数据库作为DC控制组件的重要存储组件,如果数据丢失或者被破坏,会导致DC控制组件无法正常运行,需要具备高可靠性能力,在数据库出现意外故障时能够恢复。
(1) 高可靠性
PostgreSQL数据库中的数据会在集群中同步,在一个控制组件环境下,PostgreSQL数据库中每个数据会有两个副本。
(2) 定时备份
控制组件定时备份PostgreSQL数据库。
数据库作为DC控制组件的重要存储组件,如果出现敏感数据泄露(如鉴别数据、重要业务数据、重要配置数据、重要审计数据等),需要保证敏感数据被加密,不会被直接获取到明文数据。
DC控制组件以AES128加盐方式存储敏感数据。
数据库作为DC控制组件的重要存储组件,需要做好用户权限控制。
仅配置必须使用的用户,给用户赋予合适的权限。
|
用户名 |
用户权限 |
|
mysql |
空权限(系统用户) |
|
root |
管理员,拥有全部权限 |
|
clustercheckuser |
操作员(系统用户),有PROCESS权限 |
|
sst |
操作员(系统用户),有RELOAD、 PROCESS、LOCK TABLES、REPLICATION CLIENT权限 |
如果数据库密码复杂度过于简单,容易被破解,存在安全隐患。
数据库用户密码进行了复杂度加固,使用了大写字母+小写字母+特殊字符的组合形式,提升数据库的安全性。
如果不设置数据库白名单,数据库可以被系统外部访问,存在安全隐患。
控制组件的PXC数据库使用Kubernetes的ClusterIP类型发布服务,限制对PXC的访问只能在Kubernetes集群内部的服务网段进行。
数据库作为DC控制组件的重要存储组件,必须保证安全性和稳定性,如果存在安全漏洞,容易导致DC控制组件数据被破坏。
DC控制组件使用了安全稳定性高的PXC版本。
表2-2 数据库组件版本
|
Name |
Version |
Release |
|
Percona-XtraDB-Cluster-57 |
5.7.29 |
31.43.1.el7 |
|
Percona-XtraDB-Cluster-client-57 |
5.7.29 |
31.43.1.el7 |
|
Percona-XtraDB-Cluster-garbd-57 |
5.7.29 |
31.43.1.el7 |
|
Percona-XtraDB-Cluster-server-57 |
5.7.29 |
31.43.1.el7 |
|
Percona-XtraDB-Cluster-shared-57 |
5.7.29 |
31.43.1.el7 |
|
Percona-XtraDB-Cluster-shared-compat-57 |
5.7.29 |
31.43.1.el7 |
|
percona-xtrabackup-24 |
2.4.20 |
1.el7 |
数据库作为DC控制组件的重要存储组件,如果数据丢失或者被破坏,会导致DC控制组件无法正常运行,需要具备高可靠性能力,在数据库出现意外故障时能够恢复。
(1) 高可靠性
PXC数据库中的数据会在集群中同步,在一个控制组件环境下,PXC数据库中每个数据会有两个副本。
(2) 定时备份
控制组件定时备份PXC数据库。
数据库作为DC控制组件的重要存储组件,如果出现敏感数据泄露(如鉴别数据、重要业务数据、重要配置数据、重要审计数据等),需要保证敏感数据被加密,不会被直接获取到明文数据。
DC控制组件以AES128加盐方式存储敏感数据到数据库中。
数据库的操作需要有审计日志,否则具有安全隐患。
PXC默认开启了日志审计功能,审计日志的路径如下:
/var/lib/ssdata/pxc/pxc/1/audit.log
/var/lib/ssdata/pxc/pxc/2/audit.log
/var/lib/ssdata/pxc/pxc/3/audit.log
InfluxDB数据库作为时序性能数据的存储组件,需要保证可用性和一致性。
使用了安全稳定性高的InfluxDB版本。
表2-3 数据库组件版本
|
Name |
Version |
|
InfluxDB |
v1.8.10 |
如果数据库可以被系统外部访问,存在安全隐患。
InfluxDB数据库服务使用Kubernetes的ClusterIP类型发布服务,限制对InfluxDB的访问只能在Kubernetes集群内部的服务网段进行。所在容器的IP网段和用户管理网段隔离,无法三层互通。
如果数据丢失或者被破坏,可能会导致系统无法正常运行。数据库需要具备高可靠性能力,在数据库出现意外故障时能够恢复。
(1) 高可靠性
InfluxDB数据库中的数据会在集群中分布保存,在不同节点上保存有两个副本,确保高可用性,如遇到节点故障,可从另一副本恢复。
(2) 定时备份
System组件定时备份数据库会默认备份InfluxDB数据。
系统需要提供认证访问控制,避免出现无认证访问系统和访问系统获取越权信息的情况发生。
组件提供了密码认证功能,在访问系统服务时,需要提供认证用户和密码信息,才能够登录到系统中查看系统功能页面;同时,登录的认证用户会被分配特定的系统访问权限,使用不同权限的用户登录,只能查看到对应权限的页面或者资源。
OpenFlow协议默认没有使能SSL安全加密通道的功能,控制组件和设备的OpenFlow连接很容易受到监听和攻击。
控制组件提供了使能SSL方式建立OpenFlow连接的配置。
无。
可在证书管理页面,上传OpenFlow服务的证书仓库文件:
· 身份证书:keystore.jks
· 信任证书:truststore.jks
来使能OpenFlow协议的SSL安全连接。
图3-1 配置OpenFlow协议的证书
在章节“3.1.1 OpenFlow协议支持SSL安全协议”中,开启OpenFlow SSL安全连接后,控制组件将会检查OpenFlow客户端的证书是否在控制组件信任的证书列表中,但是不能保证使用该证书的客户端提供的是客户端自身的证书,这就存在伪造身份的安全隐患。
通过配置OpenFlow证书的SAN/CN校验规则,控制组件可以检查客户端传递过来的证书的SAN/CN,进而证实客户端身份是否受信。
开启OpenFlow证书的SAN/CN校验时需同时开启OpenFlow SSL协议。
可通过系统参数配置页面配置OpenFlow SSL协议连接的SAN/CN校验规则。
图3-2 配置OpenFlow SSL协议连接的SAN/CN校验规则
root用户为H3Linux系统超级用户,拥有系统最高权限。直接使用root用户管理系统,可能会执行一些对系统破坏性的操作(修改或者删除重要系统文件、用户数据文件),存在安全隐患。
部署环境时可选择登录用户,选择admin用户时,系统将创建admin用户并为该用户配置有限命令的root权限、有限的文件权限(读、写、执行),可采用该用户进行系统的日常管理任务。在需要root权限执行一些操作时,可通过su命令登录root用户。从而实现通过非root用户进行系统管理,解决了利用root用户管理系统可能破坏系统的隐患。
若选择admin用户作为登录用户,执行命令时,需要在命令前添加sudo指令。若执行的脚本为安装或卸载脚本,需要在命令前添加sudo /bin/bash指令,否则命令执行不成功。
PostgreSQL默认没有开启日志审计功能。
PostgreSQL提供手动开启日志审计能力的方法,用户可以在需要日志审计能力时,手动开启日志审计功能。
在配置日志审计能力时,需要重启PostgreSQL数据库,所以在配置日志审计时,为确保数据安全,需要先通过平台的数据备份能力,备份PostgreSQL数据库的数据。
(1) 进入集群后台。
(2) 执行下面命令。
(3) 配置日志审计开关:
(4) 保存配置,等待PostgreSQL服务重启完成。
PXC默认没有开启日志审计功能。
最多占用10G的本地磁盘存储空间,超出部分会被滚动覆盖。
InfluxDB有部分内存为预留内存,暂时不会使用。后续系统感受到内存压力时,无需向OS申请,内存将被OS自动释放。但是可能由于判断“感受到内存压力”不准确,可能会导致OS内的其它进程由于申请不到内存而被OOM。现在添加这个环境变量,可以降低内存。
(1) 修改influxdb deployment增加环境变量。
kubectl edit deployment influx-proxy-nsm-node-ss-0 -n service-software
(2) 集群环境需要对[0-5],共6个节点进行修改。
增加环境变量如下
- name: GODEBUG
value: madvdontneed=1
Network (E0709)已增加该环境变量,此处仅供前序版本参考。
InfluxDB副本间数据不一致,可能导致监控数据时有时无。
基础网管安装包中附有副本间同步脚本,操作员可以主动执行同步数据,数据量较多时执行时间可能长。脚本执行方式如下:
cd /opt/matrix/app/install/metadata/UCENTER/kernel/network/perf/scripts/
python major2standby.py
该同步脚本只可在集群环境使用,单机环境无副本无法执行。
传统的简单密码认证方式,存在被暴力破解的可能性。
组件提供了双因子认证能力,用户在必要时可以启用双因子认证方式,加强系统认证防护能力,降低密码暴力破解的威胁。
开启双因子认证能力时,需要依赖用户手机号、邮箱等信息,在开启双因子认证前,需要确保用户已经为至少一个登录帐号配置了手机号和邮箱。
(1) 在[系统>系统配置>认证配置]页面。
(2) 在双因子认证配置区域,选择双因子认证方式。
HTTP访问协议存在访问安全漏洞,容易被劫持。
启用HTTPS访问协议,同时配置访问认证证书。支持配置单向认证证书和双向认证证书。
(1) 在[系统>系统配置>安全配置>HTTPS证书配置]页面。
(2) 在该页面进行访问协议配置,以及证书配置。
DoS攻击是一种恶意尝试,旨在影响合法最终用户对目标系统的可用性。通常,攻击者会生成大量数据包或者请求,最终使目标系统崩溃。
用户可以手动配置防护DDoS攻击策略,有效保证系统安全性与稳定性。
【配置举例】
参照附录中的方法配置DDoS攻击防护。
系统默认允许任何可以访问系统的客户端访问系统,此种情况会存在外部恶意IP访问攻击的风险。
用户可以增加可信赖的客户端IP地址,只有被信任的IP地址才能访问页面。
· 增加系统访问控制IP之后,只有在该列表内的客户端IP才能访问页面;不在此列表内的客户端IP将无法访问系统。
· 北向业务虚IP地址、节点IP地址默认在系统访问控制列表内,且不能删除。
(1) 在[系统>系统配置>安全配置>系统访问控制]页面。
(2) 在该页面增加可信任的IP地址。
攻击者可以利用Host请求头漏洞,对系统发起攻击。
提供访问地址配置功能,对Host请求头进行限制,只有携带配置列表中的Host请求头信息的请求,才能正常的访问页面。
· 增加访问地址配置列表后,只有在该列表内的访问地址,才能作为系统的访问地址入口,用来访问系统。
· 北向业务虚IP地址、节点IP地址默认在访问地址配置列表内,且不能删除。
(1) 进入[系统>系统配置>安全配置>访问地址配置]页面。
(2) 在该页面增加可信任的IP或者域名地址。
用户在设置系统帐户密码时,如果设置了弱密码,则存在被暴力破解密码的可能。
用户可以设置弱密码库,约束创建帐户时,不允许使用弱密码。确保用户设置的帐户密码具有一定的安全性。
(1) 进入[系统>系统配置>安全配置>弱密码配置]页面。
(2) 在该页面可增加弱密码信息。
WebSocket默认使用自签名证书,NESSUS会扫描出“证书不可信和自签名SSL证书“的安全漏洞。
WebSocket提供手动替换证书的方法,用户如果有自己的CA证书,可以进行替换。
· 目前只支持PKCS12类型的证书。
· 证书必须放在/opt/matrix/app/data/websocket/keystore/目录下。
· 证书文件名必须为keystore.p12。
· 当前证书替换没有页面,需要调用后台Rest指定证书密码。
· 如果是集群环境,证书需要在所有websocket connection pod所在的节点上都保存一份。
(1) 将KeyStore证书放到websocket connection pod所在的所有节点的/opt/matrix/app/data/websocket/keystore/目录下。
(2) 调用websocket manager的Rest设置证书密码。
a. 执行kubectl get pod -A -o wide |grep websocket-manager命令获取pod IP。
b. 执行curl -v -k -H "Content-Type:text/plain" -XPOST https://177.177.151.107:8443/websocket/config/keystore -d 'admin@123'命令设置证书密码,密码为admin@123。
c. 执行kubectl delete -f /opt/matrix/app/install/metadata/UCENTER/websocket/websocket/connection/k8s-resources/connection1.yaml命令删除connection pod(多机环境可能存在connection2.yaml、connection3.yaml…)。
d. 确认websocket connection pod是否已经全部死亡,反复执行kubectl get po -A | grep -i "websocket-connection",直到输出为空。
e. pod完全死亡后,再执行kubectl create -f /opt/matrix/app/install/metadata/UCENTER/websocket/websocket/connection/k8s-resources/connection1.yaml重新启动connection pod(多机环境可能存在connection2.yaml、connection3.yaml…)。
· DDoS攻击防护接口如下:
¡ 创建:【post】http://{ip}:30000/central/gateway/setRateLimiting
¡ 修改:【post】http://{ip}:30000/central/gateway/setRateLimiting,body与创建一致
¡ 删除:【delete】http://{ip}:30000/central/gateway/deleteRateLimiting
· 需要配置的消息体如下:
body(常用):
{
"second": 1,
"minute": 1,
"hour": 1,
"day": 1,
"month": 1,
"year": 1,
"limit_by": "",
"policy": "",
"fault_tolerant": true,
"hide_client_headers": false
}
· 说明:
¡ 至少必须配置一个限制(“秒”,“分钟”,“小时”,“天”,“月”,“年”)。可以配置多个限制。
¡ 如果达到配置的ID的任何限制,则插件将向客户端返回HTTP / 1.1 429状态代码。以下JSON正文:
{
"message": "API rate limit exceeded"
}
表4-1 参数说明
|
字段名称 |
字段描述 |
默认值 |
|
second |
每秒可以发出的HTTP请求数。 |
|
|
minute |
每分钟可以发出的HTTP请求数。 |
|
|
hour |
每小时可以发出的HTTP请求数。 |
|
|
day |
每天可以发出的HTTP请求数。 |
|
|
month |
每月可以发出的HTTP请求数。 |
|
|
year |
每年可以发出的HTTP请求数。 |
|
|
limit_by |
使用限制方式:消费者、凭证(证书)、IP地址、服务、消息头。如果不指定消费者、凭证或服务,系统默认会使用IP的方式。如果选择了消息头,则必须提供“header_name”配置。 |
(默认建议使用IP) |
|
policy |
用于检索和增加限制的速率限制策略。可用值为local(计数器将存储在本地内存中的节点上),cluster(计数器存储在数据存储区中并在节点上共享)和redis( 计数器存储在Redis服务 器上,并将在节点之间共享)。在无DB模式下,必须至少指定本地或Redis之一。有关应使用哪种策略的详细信息,请参阅实现注意事项。 |
default value: cluster (默认建议使用local) |
|
fault_tolerant |
一个布尔值,用于确定即使Kong在连接第三方数据存储时遇到问题,是否也应代理请求;如果值为true,请求进行代理,则有效地禁用了限速功能直到数据存储再次出现;如果为false,则客户端将看到 500个错误。 |
default value: true |
|
hide_client_headers |
(可选)隐藏信息的响应头。 |
default value: false |
