阿里云CentOS Linux 7.x 安全基线配置标准

什么是安全基线

安全基线(Security Base Line)指为了满足安全要求,相关系统和服务安全配置必须达到的一定标准和基本要求。通过对不同配置和策略的具体项目来评估产品是否达到安全基线,包括账号配置安全、口令配置安全、授权配置、日志配置、网络配置等。安全基线评估结果在一定程度上,反映了服务器的安全性。

阿里云标准

阿里云作为国内第一梯队的云计算服务商,甚至在全球也都算是个大厂,除了遵循等保2.0外,还有一套自己定制的安全基线标准。极大地提高了服务器的安全性。这段时间我也照着阿里云后台把标准copy了下来,算是做个备忘,以后自己搭建服务器、NAS、平台什么的可以用这个标准来提高安全性。

修改配置前建议备份,以防不测

Centos7.x基线配置内容

基于阿里云最佳实践安全实践的CentOS Linux 7基线标准

确保root是唯一的UID为0的账户(身份鉴别)

描述:除root以外其他UID为0的用户都应该删除,或者为其分配新的UID
加固建议:除root以外其他UID为0的用户都应该删除,或者为其分配新的UID

cat /etc/passwd | awk -F: '($3 == 0) { print $1 }'|grep -v '^root$'

开启地址空间布局随机化(入侵防范)

描述:它将进程的内存空间地址随机化来增大入侵者预测目的地址难度,从而降低进程被成功入侵的风险
加固建议:/etc/sysctl.conf/etc/sysctl.d/*文件中设置以下参数: kernel.randomize_va_space = 2 执行命令: sysctl -w kernel.randomize_va_space=2

设置用户权限配置文件的权限(文件权限)

描述:设置用户权限配置文件的权限
加固建议:执行以下5条命令

chown root:root /etc/passwd /etc/shadow /etc/group /etc/gshadow
chmod 0644 /etc/group  
chmod 0644 /etc/passwd  
chmod 0400 /etc/shadow  
chmod 0400 /etc/gshadow 

访问控制配置文件的权限设置(文件权限)

描述:访问控制配置文件的权限设置
加固建议:执行以下4条命令

chown root:root /etc/hosts.allow 
chown root:root /etc/hosts.deny 
chmod 644 /etc/hosts.deny
chmod 644 /etc/hosts.allow

确保SSH LogLevel设置为INFO(服务配置)

描述:确保SSH LogLevel设置为INFO,记录登录和注销活动
加固建议:编辑 /etc/ssh/sshd_config 文件以按如下方式设置参数(取消注释):

vi /etc/ssh/sshd_config
#LogLevel INFO => LogLevel INFO

确保rsyslog服务已启用(安全审计)

描述:确保rsyslog服务已启用,记录日志用于审计
加固建议:启用rsyslog服务

systemctl enable rsyslog
systemctl start rsyslog

确保SSH MaxAuthTries设置为3到6之间(SSH服务配置)

描述:设置较低的Max AuthTrimes参数将降低SSH服务器被暴力攻击成功的风险。
加固建议:/etc/ssh/sshd_config中取消MaxAuthTries注释符号#,设置最大密码尝试失败次数3-6,建议为4:

vi /etc/ssh/sshd_config
#MaxAuthTries 4 => MaxAuthTries 4

确保密码到期警告天数为7或更多(身份鉴别)

描述:确保密码到期警告天数为7或更多
加固建议:/etc/login.defs 中将 PASS_WARN_AGE 参数设置为7-14之间,建议为7,同时执行命令使root用户设置生效

vi /etc/login.defs
PASS_WARN_AGE 7
:wq

chage --warndays 7 root

禁止SSH空密码用户登录(SSH服务配置)

描述:禁止SSH空密码用户登录
加固建议:编辑文件/etc/ssh/sshd_config,将PermitEmptyPasswords配置为no

vi /etc/ssh/sshd_config
PermitEmptyPasswords no

检查系统空密码账户(身份鉴别)

描述:检查系统空密码账户
加固建议:为用户设置一个非空密码或者执行passwd -l 锁定用户

设置SSH空闲超时退出时间(服务配置)

描述:设置SSH空闲超时退出时间,可降低未授权用户访问其他用户ssh会话的风险
加固建议:编辑/etc/ssh/sshd_config,将ClientAliveInterval 设置为300到900,即5-15分钟,将ClientAliveCountMax设置为0-3之间。

vi /etc/ssh/sshd_config
ClientAliveInterval 600
ClientAliveCountMax 2

密码复杂度检查(身份鉴别)

描述:检查密码长度和密码是否使用多种字符类型
加固建议:编辑/etc/security/pwquality.conf,把minlen(密码最小长度)设置为9-32位,把minclass(至少包含小写字母、大写字母、数字、特殊字符等4类字符中等3类或4类)设置为3或4。

vi /etc/security/pwquality.conf
minlen=10
minclass=3

检查密码重用是否受限制(身份鉴别)

描述:强制用户不重用最近使用的密码,降低密码猜测攻击风险
加固建议:在/etc/pam.d/password-auth和/etc/pam.d/system-auth中password sufficient pam_unix.so 这行的末尾配置remember参数为5-24之间,原来的内容不用更改,只在末尾加了remember=5

vi /etc/pam.d/password-auth
?password sufficient pam_unix.so
remember=5
:wq
vi /etc/pam.d/system-auth
?password sufficient pam_unix.so
remember=5

设置密码修改最小间隔时间(身份鉴别)

描述:设置密码修改最小间隔时间,限制密码更改过于频繁
加固建议:在 /etc/login.defs 中将 PASS_MIN_DAYS 参数设置为7-14之间,需同时执行命令为root用户设置

vi /etc/login.defs 
PASS_MIN_DAYS 7
:wq
chage --mindays 7 root

设置密码失效时间(身份鉴别)

描述:设置密码失效时间,强制定期修改密码,减少密码被泄漏和猜测风险,使用非密码登陆方式(如密钥对)请忽略此项。
加固建议:(使用非密码登陆方式如密钥对,请忽略此项)在 /etc/login.defs 中将 PASS_MAX_DAYS 参数设置为 60-180之间,同时执行命令设置root密码失效时间

vi /etc/login.defs
PASS_MAX_DAYS 90
:wq
chage --maxdays 90 root

Redis基线配置内容

基于阿里云最佳实践安全实践的Redis基线标准

打开保护模式(访问控制)

描述:redis默认开启保护模式。要是配置里没有指定bind和密码,开启该参数后,redis只能本地访问,拒绝外部访问。
加固建议:打开保护模式 protected-mode yes

vi /etc/./redis/conf
protected-mode yes

禁止使用root用户启动(访问控制)

描述:使用root权限去运行网络服务是比较有风险的(nginx和apache都是有独立的work用户,而redis没有)。redis crackit 漏洞就是利用root用户的权限来替换或者增加authorized_keys,来获取root登录权限的
加固建议:使用root切换到redis用户启动服务:

useradd -s /sbin/nolog -M redis 
sudo -u redis /<redis-server-path>/redis-server /<configpath>/redis.conf 

禁止监听在公网(访问控制)

描述:Redis监听在0.0.0.0,可能导致服务对外或内网横向移动渗透风险,极易被黑客利用入侵。
加固建议:在redis.conf中配置如下: bind 127.0.0.1或者内网IP,然后重启redis

vi /etc/./redis.conf
bind 127.0.0.1
:wq
systemctl restatrt  redis

禁用或者重命名危险命令(入侵防范)

描述:Redis中线上使用keys *命令,也是非常危险的。因此线上的Redis必须考虑禁用一些危险的命令,或者尽量避免谁都可以使用这些命令,Redis没有完整的管理系统,但是也提供了一些方案。
加固建议:修改 redis.conf 文件如下,然后重启redis

# 重命名为"" 代表禁用命令,如想保留命令,可以重命名为不可猜测的字符串
vi /etc/./redis.conf
rename-command FLUSHALL ""
rename-command FLUSHDB  ""
rename-command CONFIG   ""
rename-command KEYS     ""
rename-command SHUTDOWN ""
rename-command DEL ""
rename-command EVAL ""
:wq
systemctl restatrt  redis

限制redis 配置文件访问权限(文件权限)

描述:因为redis密码明文存储在配置文件中,禁止不相关的用户访问改配置文件是必要的,设置redis配置文件权限为600,
加固建议:修改配置文件权限

chmod 600 /<filepath>/redis.conf

修改默认6379端口(服务配置)

描述:避免使用熟知的端口,降低被初级扫描的风险
加固建议:编辑文件redis的配置文件redis.conf,找到包含port的行,将默认的6379修改为自定义的端口号,然后重启redis

vi /etc/./redis.conf
?port
 port=3679 => port=xxxx
:wq
systemctl restatrt  redis

开启redis密码认证,并设置高复杂度密码(身份鉴别)

描述:redis在redis.conf配置文件中,设置配置项requirepass, 开户密码认证。 redis因查询效率高,auth这种命令每秒能处理9w次以上,简单的redis的密码极容易为攻击者暴破。
加固建议:打开redis.conf,找到requirepass所在的地方,修改为指定的密码,去掉前面的#号注释符,然后重启redis。

#密码应符合复杂性要求:
1、长度8位以上
2、包含以下四类字符中的三类字符:
      英文大写字母(A 到 Z)
      英文小写字母(a 到 z)
      10 个基本数字(0 到 9)
      非字母字符(例如 !、$、#、%、@、^、&)
3、避免使用已公开的弱密码,如:abcd.1234 、admin@123等

Memcached基线配置内容

基于阿里云最佳实践安全实践的Memcache基线标准

确保禁用memcache的UDP支持(服务配置)

描述:攻击者可以利用memcache的UDP支持进行Memcache UDP 反射放大攻击,实施DDoS攻击
加固建议:Memcached 启动时,建议添加“-U 0”参数可完全禁用 UDPmemcached -u memcached -p –U 0 -l <监听ip> -m 64m -c 512 -U 0

禁止使用root用户启动(访问控制)

描述:使用root权限运行网络服务存在很大的风险,应避免使用root权限用户直接运行memcached服务
加固建议:执行命令添加memcached用户useradd memcached -M -s /sbin/nologin 使用memcached用户启动memcached服务:memcached -u memcached -p –U 0 -l <监听ip> -m 64m -c 512

禁止监听在公网(访问控制)

描述:Memcache服务器端都是直接通过客户端连接后直接操作,没有任何的验证过程。如果服务器直接暴露在互联网上非常危险,存在极大的数据泄漏风险和服务被入侵风险。
加固建议:在启动memcache时使用-l选项将memcache的监听主机指定为本机或是内网ip

修改默认端口(访问控制)

描述:使用-p参数指定memcached的监听端口默认为11211,建议修改,memcached -u memcached -p <port> –U 0 -l <监听ip> -m 64m -c 512
加固建议:避免使用熟知端口号,降低被初级扫描的风险

over

这篇文章开了过时提醒,毕竟标准会根据某段时间所出现的新情况而改变。这篇文章copy的目的就是学习以及备忘,以后可能还会再做修改。 ——2019/07/31

Last modification:July 31st, 2019 at 02:44 pm
如果觉得我的文章对你有帮助,可以请我喝咖啡

Leave a Comment

,