什么是安全基线
安全基线(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$'
Shell
复制
开启地址空间布局随机化(入侵防范)
描述:它将进程的内存空间地址随机化来增大入侵者预测目的地址难度,从而降低进程被成功入侵的风险
加固建议:在/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
Shell
复制
访问控制配置文件的权限设置(文件权限)
描述:访问控制配置文件的权限设置
加固建议:执行以下4条命令
chown root:root /etc/hosts.allow
chown root:root /etc/hosts.deny
chmod 644 /etc/hosts.deny
chmod 644 /etc/hosts.allow
Shell
复制
确保SSH LogLevel设置为INFO(服务配置)
描述:确保SSH LogLevel设置为INFO,记录登录和注销活动
加固建议:编辑 /etc/ssh/sshd_config
文件以按如下方式设置参数(取消注释):
vi /etc/ssh/sshd_config
#LogLevel INFO => LogLevel INFO
Shell
复制
确保rsyslog服务已启用(安全审计)
描述:确保rsyslog服务已启用,记录日志用于审计
加固建议:启用rsyslog
服务
systemctl enable rsyslog
systemctl start rsyslog
Shell
复制
确保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
Shell
复制
确保密码到期警告天数为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
Shell
复制
禁止SSH空密码用户登录(SSH服务配置)
描述:禁止SSH空密码用户登录
加固建议:编辑文件/etc/ssh/sshd_config
,将PermitEmptyPasswords
配置为no
vi /etc/ssh/sshd_config
PermitEmptyPasswords no
Shell
复制
检查系统空密码账户(身份鉴别)
描述:检查系统空密码账户
加固建议:为用户设置一个非空密码或者执行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
Shell
复制
密码复杂度检查(身份鉴别)
描述:检查密码长度和密码是否使用多种字符类型
加固建议:编辑/etc/security/pwquality.conf,把minlen(密码最小长度)设置为9-32位,把minclass(至少包含小写字母、大写字母、数字、特殊字符等4类字符中等3类或4类)设置为3或4。
vi /etc/security/pwquality.conf
minlen=10
minclass=3
Shell
复制
检查密码重用是否受限制(身份鉴别)
描述:强制用户不重用最近使用的密码,降低密码猜测攻击风险
加固建议:在/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
Shell
复制
设置密码修改最小间隔时间(身份鉴别)
描述:设置密码修改最小间隔时间,限制密码更改过于频繁
加固建议:在 /etc/login.defs 中将 PASS\_MIN\_DAYS 参数设置为7-14之间,需同时执行命令为root用户设置
vi /etc/login.defs
PASS_MIN_DAYS 7
:wq
chage --mindays 7 root
Shell
复制
设置密码失效时间(身份鉴别)
描述:设置密码失效时间,强制定期修改密码,减少密码被泄漏和猜测风险,使用非密码登陆方式(如密钥对)请忽略此项。
加固建议:(使用非密码登陆方式如密钥对,请忽略此项)在 /etc/login.defs 中将 PASS\_MAX\_DAYS 参数设置为 60-180之间,同时执行命令设置root密码失效时间
vi /etc/login.defs
PASS_MAX_DAYS 90
:wq
chage --maxdays 90 root
Shell
复制
Redis基线配置内容
基于阿里云最佳实践安全实践的Redis基线标准
打开保护模式(访问控制)
描述:redis默认开启保护模式。要是配置里没有指定bind和密码,开启该参数后,redis只能本地访问,拒绝外部访问。
加固建议:打开保护模式 protected-mode yes
vi /etc/./redis/conf
protected-mode yes
Shell
复制
禁止使用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
Shell
复制
禁止监听在公网(访问控制)
描述: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
Shell
复制
禁用或者重命名危险命令(入侵防范)
描述: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
Shell
复制
限制redis 配置文件访问权限(文件权限)
描述:因为redis密码明文存储在配置文件中,禁止不相关的用户访问改配置文件是必要的,设置redis配置文件权限为600,
加固建议:修改配置文件权限
chmod 600 /<filepath>/redis.conf
Shell
复制
修改默认6379端口(服务配置)
描述:避免使用熟知的端口,降低被初级扫描的风险
加固建议:编辑文件redis的配置文件redis.conf,找到包含port的行,将默认的6379修改为自定义的端口号,然后重启redis
vi /etc/./redis.conf
?port
port=3679 => port=xxxx
:wq
systemctl restatrt redis
Shell
复制
开启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等
Shell
复制
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
加固建议:避免使用熟知端口号,降低被初级扫描的风险