安全无小事,尽早检查,尽早防范,尽早加固!整理一些常见的基线检查和加固方式。
阿里云标准-Nginx安全基线检查
参考CIS及阿里云基线标准进行中间件层面基线检测
高
针对Nginx SSL协议进行安全加固 | 服务配置描述
Nginx SSL协议的加密策略进行加固
加固建议
Nginx SSL协议采用TLSv1.2: 1、打开
conf/nginx.cconf
配置文件; 2、配置1
2
3
4
5server {
...
ssl_protocols TLSv1.2;
...
}备注:配置此项请确认nginx支持OpenSSL,运行
nginxv -V
如果返回中包含built with OpenSSL
则表示支持OpenSSL。如果不支持,请重新编译nginx操作时建议做好记录或备份
高
确保NGINX配置文件权限为644 | 文件权限描述
把控配置文件权限以抵御外来攻击
加固建议
修改Nginx配置文件权限: 执行
chmod 644
来限制Nginx配置文件的权限;(为配置文件的路径,如默认/安装目录/conf/nginx.conf或者/etc/nginx/nginx.conf,或用户自定义,请 自行查找) 操作时建议做好记录或备份
高
隐藏Nginx服务的Banner | 服务配置描述
Nginx服务的Banner隐藏状态
加固建议
Nginx后端服务指定的Header隐藏状态隐藏Nginx服务Banner的状态: 1、打开
conf/nginx.conf
配置文件; 2、在server栏目下,配置server_tokens
项server_tokens off;
操作时建议做好记录或备份
高
检查Nginx进程启动账号。 | 服务配置描述
Nginx进程启动账号状态,降低被攻击概率
加固建议
修改Nginx进程启动账号: 1、打开
conf/nginx.conf
配置文件; 2、查看配置文件的user配置项,确认是非root启动的; 3、如果是root
启动,修改成nobody
或者nginx账号
; 备注: 4、修改完配置文件之后需要重新启动Nginx。操作时建议做好记录或备份
高
检查是否配置Nginx账号锁定策略。 | 身份鉴别描述
执行系统命令passwd -S nginx来查看锁定状态 出现Password locked证明锁定成功 如:nginx LK ….. (Password locked.)或nginx L ….
默认符合,修改后才有(默认已符合)
执行系统命令passwd -l nginx进行锁定
加固建议
配置Nginx账号登录锁定策略: Nginx服务建议使用非root用户(如nginx,nobody)启动,并且确保启动用户的状态为锁定状态。可执行passwd -l <Nginx启动用户> 如
passwd -l nginx
来锁定Nginx服务的启动用户。命令passwd -S <用户>
如passwd -S nginx
可查看用户状态。 修改配置文件中的nginx启动用户修改为nginx或nobody 如:user nobody;
操作时建议做好记录或备份
高
Nginx的WEB访问日志记录状态 | 服务配置描述
Nginx后端服务指定的Header隐藏状态
加固建议
开启Nginx的WEB访问日志记录: 1、打开
conf/nginx.conf
配置文件; 2、在http下配置access_log
项access_log logs/host.access.log main;
3、 并删除off
项操作时建议做好记录或备份
高
Nginx后端服务指定的Header隐藏状态 | 服务配置描述
隐藏Nginx后端服务X-Powered-By头
加固建议
隐藏Nginx后端服务指定Header的状态: 1、打开
conf/nginx.conf
配置文件; 2、在http
下配置proxy_hide_header
项; 增加或修改为proxy_hide_header X-Powered-By;
proxy_hide_header Server;
操作时建议做好记录或备份
阿里云标准-Redis安全基线检查
基于阿里云最佳实践安全实践的Redis基线标准
高
打开保护模式 | 访问控制描述
redis默认开启保护模式。要是配置里没有指定bind和密码,开启该参数后,redis只能本地访问,拒绝外部访问。
加固建议
redis.conf安全设置: # 打开保护模式 protected-mode yes
操作时建议做好记录或备份
高
禁止监听在公网 | 访问控制描述
Redis监听在0.0.0.0,可能导致服务对外或内网横向移动渗透风险,极易被黑客利用入侵。
加固建议
在redis的配置文件redis.conf中配置如下: bind 127.0.0.1或者内网IP,然后重启redis
操作时建议做好记录或备份
高
禁用或者重命名危险命令 | 入侵防范描述
Redis中线上使用keys *命令,也是非常危险的。因此线上的Redis必须考虑禁用一些危险的命令,或者尽量避免谁都可以使用这些命令,Redis没有完整的管理系统,但是也提供了一些方案。
加固建议
修改 redis.conf 文件,添加
1
2
3
4
5
6
7rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG ""
rename-command KEYS ""
rename-command SHUTDOWN ""
rename-command DEL ""
rename-command EVAL ""然后重启redis。 重命名为”” 代表禁用命令,如想保留命令,可以重命名为不可猜测的字符串,如:
rename-command FLUSHALL joYAPNXRPmcarcR4ZDgC
操作时建议做好记录或备份
高
修改默认6379端口 | 服务配置描述
避免使用熟知的端口,降低被初级扫描的风险
加固建议
编辑文件redis的配置文件redis.conf,找到包含port的行,将默认的6379修改为自定义的端口号,然后重启redis
操作时建议做好记录或备份
高
限制redis 配置文件访问权限 | 文件权限描述
因为redis密码明文存储在配置文件中,禁止不相关的用户访问改配置文件是必要的,设置redis配置文件权限为600,
加固建议
执行以下命令修改配置文件权限:
1
chmod 600 /<filepath>/redis.conf
操作时建议做好记录或备份
高
禁止使用root用户启动 | 访问控制描述
使用root权限去运行网络服务是比较有风险的(nginx和apache都是有独立的work用户,而redis没有)。redis crackit 漏洞就是利用root用户的权限来替换或者增加authorized_keys,来获取root登录权限的
加固建议
使用root切换到redis用户启动服务:
1
2useradd -s /sbin/nolog -M redis
sudo -u redis /<redis-server-path>/redis-server /<configpath>/redis.conf操作时建议做好记录或备份
阿里云标准-Mysql安全基线检查
基于阿里云最佳实践安全实践的Mysql基线标准,支持版本:Mysql5.1-Mysql5.7
中
确保MYSQL_PWD环境变量未设置 | 身份鉴别描述
mysql_pwd环境变量的使用意味着mysql凭证的明文存储,极大增加mysql凭据泄露风险。
加固建议
删除系统环境变量中Mysql密码(MYSQL_PWD)配置
操作时建议做好记录或备份
高
匿名登陆检查 | 身份鉴别描述
检查Mysql服务是否允许匿名登陆
加固建议
登陆Mysql数据库,执行以下命令删除匿名帐户:
1
2delete from user where user='';
flush privileges;操作时建议做好记录或备份
高
确保没有用户配置了通配符主机名 | 身份鉴别描述
避免在主机名中只使用通配符,有助于限定可以连接数据库的客户端,否则服务就开放到了公网
加固建议
执行SQL更新语句,为每个用户指定允许连接的host范围。 1. 登录数据库,执行
use mysql;
; 2. 执行语句select user,Host from user where Host='%';
查看HOST为通配符的用户; 3. 删除用户或者修改用户host字段,删除语句:DROP USER 'user_name'@'%';
。更新语句:update user set host = where host = '%';
。 4. 执行SQL语句:1
2OPTIMIZE TABLE user;
flush privileges;操作时建议做好记录或备份
高
确保log-raw选项没有配置为ON | 安全审计描述
当log-raw记录启用时,有权访问日志文件的人可能会看到纯文本密码。
加固建议
编辑Mysql配置文件/etc/my.cnf,删除log-raw参数,并重启mysql服务
操作时建议做好记录或备份
高
禁止使用–skip-grant-tables选项启动Mysql服务 | 访问控制描述
使用此选项,会导致所有客户端都对所有数据库具有不受限制的访问权限。
加固建议
编辑Mysql配置文件/etc/my.cnf,删除skip-grant-tables参数,并重启mysql服务
操作时建议做好记录或备份
高
为Mysql服务使用专用的最低特权帐户 | 访问控制描述
使用最低权限帐户运行服务可减小MySQL天生漏洞的影响。受限帐户将无法访问与MySQL无关的资源,例如操作系统配置。
加固建议
使用非root和非sudo权限用户启动Mysql服务
操作时建议做好记录或备份
中
修改默认3306端口 | 服务配置描述
避免使用熟知的端口,降低被初级扫描的风险
加固建议
编辑/etc/my.cnf文件,mysqld 段落中配置新的端口参数,并重启mysql服务:
1
port=3506
操作时建议做好记录或备份
高
禁用symbolic-links选项 | 服务配置描述
禁用符号链接以防止各种安全风险
加固建议
编辑Mysql配置文件/etc/my.cnf,在mysqld 段落中配置
symbolic-links=0
,5.6及以上版本应该配置为skip_symbolic_links=yes
,并重启mysql服务。操作时建议做好记录或备份
高
确保配置了log-error选项 | 安全审计描述
启用错误日志可以提高检测针对mysql和其他关键消息的恶意尝试的能力,例如,如果错误日志未启用,则连接错误可能会被忽略。
加固建议
编辑Mysql配置文件/etc/my.cnf,在mysqld_safe 段落中配置log-error参数,
代表存放日志文件路径,如:/var/log/mysqld.log,并重启mysql服务: 1
log-error=<log_path>
操作时建议做好记录或备份
高
删除’test’数据库 | 服务配置描述
测试数据库可供所有用户访问,并可用于消耗系统资源。删除测试数据库将减少mysql服务器的攻击面。
加固建议
登陆数据库执行以下SQL语句删除test数据库:
1
2DROP DATABASE test;
flush privileges;操作时建议做好记录或备份
高
禁用local-infile选项 | 访问控制描述
禁用local_infile选项会降低攻击者通过SQL注入漏洞器读取敏感文件的能力
加固建议
编辑Mysql配置文件/etc/my.cnf,在mysqld 段落中配置local-infile参数为0,并重启mysql服务:
1
local-infile=0
操作时建议做好记录或备份
阿里云标准-CentOS Linux 7安全基线检查
基于阿里云最佳实践安全实践的CentOS Linux 7基线标准
高
确保root是唯一的UID为0的帐户 | 身份鉴别描述
除root以外其他UID为0的用户都应该删除,或者为其分配新的UID
加固建议
除root以外其他UID为0的用户(查看命令
cat /etc/passwd | awk -F: '($3 == 0) { print $1 }'|grep -v '^root$'
)都应该删除,或者为其分配新的UID操作时建议做好记录或备份
高
开启地址空间布局随机化 | 入侵防范描述
它将进程的内存空间地址随机化来增大入侵者预测目的地址难度,从而降低进程被成功入侵的风险
加固建议
在/etc/sysctl.conf或/etc/sysctl.d/*文件中设置以下参数:
kernel.randomize_va_space = 2
执行命令:sysctl -w kernel.randomize_va_space=2
操作时建议做好记录或备份
高
设置用户权限配置文件的权限 | 文件权限描述
设置用户权限配置文件的权限
加固建议
执行以下5条命令
1
2
3
4
5chown 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条命令:
1
2
3
4chown 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 文件以按如下方式设置参数(取消注释):
1
LogLevel INFO
操作时建议做好记录或备份
高
确保rsyslog服务已启用 | 安全审计描述
确保rsyslog服务已启用,记录日志用于审计
加固建议
运行以下命令启用rsyslog服务:
1
2systemctl enable rsyslog
systemctl start rsyslog操作时建议做好记录或备份
高
确保SSH MaxAuthTries设置为3到6之间 | SSH服务配置描述
设置较低的Max AuthTrimes参数将降低SSH服务器被暴力攻击成功的风险。
加固建议
在/etc/ssh/sshd_config中取消MaxAuthTries注释符号#,设置最大密码尝试失败次数3-6,建议为4:
1
MaxAuthTries 4
操作时建议做好记录或备份
高
确保密码到期警告天数为7或更多 | 身份鉴别描述
确保密码到期警告天数为28或更多
加固建议
在 /etc/login.defs 中将 PASS_WARN_AGE 参数设置为7-14之间,建议为7:
1
PASS_WARN_AGE 7
同时执行命令使root用户设置生效:
1
chage --warndays 7 root
操作时建议做好记录或备份
高
禁止SSH空密码用户登录 | SSH服务配置描述
禁止SSH空密码用户登录
加固建议
编辑文件
/etc/ssh/sshd_config
,将PermitEmptyPasswords配置为no:1
PermitEmptyPasswords no
操作时建议做好记录或备份
高
检查系统空密码账户 | 身份鉴别描述
检查系统空密码账户
加固建议
为用户设置一个非空密码,或者执行
passwd -l
锁定用户操作时建议做好记录或备份
高
检查密码重用是否受限制 | 身份鉴别描述
强制用户不重用最近使用的密码,降低密码猜测攻击风险
加固建议
在/etc/pam.d/password-auth和/etc/pam.d/system-auth中password sufficient pam_unix.so 这行的末尾配置remember参数为5-24之间,原来的内容不用更改,只在末尾加了remember=5。
操作时建议做好记录或备份
高
密码复杂度检查 | 身份鉴别描述
检查密码长度和密码是否使用多种字符类型
加固建议
编辑/etc/security/pwquality.conf,把minlen(密码最小长度)设置为9-32位,把minclass(至少包含小写字母、大写字母、数字、特殊字符等4类字符中等3类或4类)设置为3或4。如:
1
2minlen=10
minclass=3操作时建议做好记录或备份
高
设置SSH空闲超时退出时间 | 服务配置描述
设置SSH空闲超时退出时间,可降低未授权用户访问其他用户ssh会话的风险
加固建议
编辑/etc/ssh/sshd_config,将ClientAliveInterval 设置为300到900,即5-15分钟,将ClientAliveCountMax设置为0-3之间。
1
2ClientAliveInterval 600
ClientAliveCountMax 2操作时建议做好记录或备份
高
设置密码修改最小间隔时间 | 身份鉴别描述
设置密码修改最小间隔时间,限制密码更改过于频繁
加固建议
在 /etc/login.defs 中将 PASS_MIN_DAYS 参数设置为7-14之间,建议为7:
1
PASS_MIN_DAYS 7
需同时执行命令为root用户设置:
1
chage --mindays 7 root
操作时建议做好记录或备份
高
设置密码失效时间 | 身份鉴别描述
设置密码失效时间,强制定期修改密码,减少密码被泄漏和猜测风险,使用非密码登陆方式(如密钥对)请忽略此项。
加固建议
使用非密码登陆方式如密钥对,请忽略此项。
在/etc/login.defs
中将 PASS_MAX_DAYS 参数设置为 60-180之间,如:1
PASS_MAX_DAYS 90
需同时执行命令设置root密码失效时间:
1
chage --maxdays 90 root
操作时建议做好记录或备份
弱密码检查
高
系统登陆弱密码描述
若系统使用弱口令,存在极大的被恶意猜解入侵风险,需立即修复。
加固建议
将弱密码修改复杂密码,应符合复杂性要求:
1
2
3
4
5
6
71、长度8位以上
2、包含以下四类字符中的三类字符:
英文大写字母(A 到 Z)
英文小写字母(a 到 z)
10 个基本数字(0 到 9)
非字母字符(例如 !、$、#、%、@、^、&)
3、避免使用已公开的弱密码,如:abcd.1234 、admin@123等操作时建议做好记录或备份
高
Mysql数据库登陆弱密码描述
若系统使用弱口令,存在极大的被恶意猜解入侵风险,需立即修复。
检查提示
弱密码(用户名@主机/密码):@xxxxxxxx/ @localhost/
加固建议
将弱密码修改复杂密码,应符合复杂性要求:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
161、长度8位以上
2、包含以下四类字符中的三类字符:
英文大写字母(A 到 Z)
英文小写字母(a 到 z)
10 个基本数字(0 到 9)
非字母字符(例如 !、$、#、%、@、^、&)
3、避免使用已公开的弱密码,如:abcd.1234 、admin@123等
可使用 SET PASSWORD 命令把弱密码修改为强密码:
1、登陆数据库
2、查看数据库用户密码信息
mysql> SELECT user, host, authentication_string FROM user;
部分版本查询命令为:
mysql> SELECT user, host, password FROM user;
3、根据查询结果及弱密码告警信息修改具体用户的密码
mysql> SET PASSWORD FOR '用户名'@'主机' = PASSWORD('新密码');操作时建议做好记录或备份
高
开启redis密码认证,并设置高复杂度密码 | Redis数据库登陆弱密码描述
redis在redis.conf配置文件中,设置配置项requirepass, 开户密码认证。 redis因查询效率高,auth这种命令每秒能处理9w次以上,简单的redis的密码极容易为攻击者暴破。
检查提示
(配置文件|密码):/www/server/redis/redis.conf|
加固建议
打开redis.conf,找到requirepass所在的地方,修改为指定的密码,密码应符合复杂性要求:
1
2
3
4
5
6
71、长度8位以上
2、包含以下四类字符中的三类字符:
英文大写字母(A 到 Z)
英文小写字母(a 到 z)
10 个基本数字(0 到 9)
非字母字符(例如 !、$、%、@、^、&等,#除外)
3、避免使用已公开的弱密码,如:abcd.1234 、admin@123等再去掉前面的#号注释符,然后重启redis
操作时建议做好记录或备份