一、 软件安全
1.1、web组件安全
1.1.1、Nginx安全
-
1.1.1.1、关闭列目录
默认情况下需要关闭该功能,除非提供下载等;检查 autoindex 开关是否打开,nginx 配置文件中搜索 autoindex,确保 autoindex 配置为off;
-
1.1.1.2、关闭版本号显示
关闭版本号显示后,错误页面 http response server 字段将不会显示 Nginx 版本server { server_tokens off; }
-
1.1.1.3、访问控制
-
1.1.1.3.1、资源访问控制
针对限制访问的资源,可以使用 Nginx 做访问限制,location 可以指定路径location / { allow 10.0.0.0/24; allow 172.16.24.123; deny all; }
-
1.1.1.3.2、站点身份验证
也可在直接使用身份验证功能对所有资源加以控制server { ...... auth_basic "受限访问"; auth_basic_user_file conf/htpasswd; # 使用 htpasswd 命令生成的文件 }
-
1.1.1.3.3、防盗链
通过location
实现针对referer
头的验证locaiton / { valid_referers none blocked www.example.com example.com ; if ($invalid_referer) { return 403; } }
-
1.1.1.3.4、敏感文件防泄漏
通过location
参数限制外部可以访问的敏感文件,不允许访问zip、rar、gz、bak等文件,避免因管理员问题导致文件泄露location ~*.*\.(zip|rar|gz|bak)?$ { deny all; } ```
-
1.2、PHP 配置加固
1.2.1、关闭 PHP 版本信息
为了防止黑客获取服务器中 PHP 版本信息,如
X-Powered-By:PHP/5.3.7
,最好关闭显示 PHP 版本信息,在配置文件中追加以下信息:
expose_php = off
1.2.2、关闭 PHP 错误提示信息
默认情况下,PHP错误信息会将程序出错的原因显示到浏览器上,容易造成敏感信息泄露。
# 关闭错误显示
display_errors = OFF
# 记录日志
log_errors = On
# 设置日志位置,便于开发排查原因(该文件web服务器用户必须可写)
error_log = /var/logs/php_error.log
1.2.3、设置 PHP 脚本能够访问的目录
使用
open_basedir
选项能够控制 PHP 脚本只能访问指定的目录,这样能够避免 PHP 脚本访问不应该访问的文件,一定程序限制 PHPshell的危害访问:
open_basedir = /usr/www
1.2.4、关闭危险函数
禁止一些危险的系统命令函数,例如
system()
或者能够查看 PHP 信息的phpinfo()
函数等:
以下只针对内置函数,无法限制用户自定义的函数
disable_functions = system, passthru, exec, shell_exec, popen, phpinfo, escapeshellarg, escapeshellcmd, proc_close, proc_open
# 禁止文件和目录操作的函数
disable_functions = chdir, chroot, dir, getcwd, opendir, readdir, scandir, fopen, unlink, delete, copy, mkdir, rmdir, rename, file, file_get_contents, fputs, fwrite, chgrp, chmod, chown
1.3、Tomcat 安全加固
Tomcat 加固可参考以下要求:
- 修改 Tomcat 默认口令;
- 升级到最新稳定版,不建议跨版本升级;
- 使用普通用户启动服务;
- 更改 Tomcat 的 AJP 管理端口,默认为8009,允许配置范围在8000 ~ 8999;
- 更改 Tomcat 默认管理端口,默认为8005,允许配置的范围在8000 ~ 8999;
- 将 Tomcat 应用根目录配置为 Tomcat安装目录以外的目录;
- 隐藏 Tomcat 的版本信息;
- 关闭 war 包自动部署功能。
1.4、Redis 安全加固
Redis 是一个完全免费开源的非关系型数据库,采用键值对的方式存储数据。出现最为严重的为
未授权访问漏洞
- 账号与认证
配置完成后,需要重启服务
vim /etc/redis/redis.conf # 编辑redis配置文件
requirepass xxx (添加连接密码)
- 降权运行
# 创建用于运行redis的账号,禁用账号的登陆权限
useradd -M -s /sbin/nologin [username]
- 除以上加固外,建议使用iptables或外围防火墙设备限制可访问的IP,提高安全性,同时建议修改默认端口6379为其它端口。
1.5、Elasticsearch 安全加固
ES 是一个基于 Lucene 的搜索服务器,提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web接口,在互联网企业中也是应用十分广泛的一个系统。近年来出现的ES信息泄露事件都是由于ES配置不当所致。
原本ES认证需要启用X-pack功能,该功能需要认证。自6.8之后开始免费提供认证功能。
-
1、启用安全模式,修改
elasticsearch.yml
文件,添加如下配置:xpack.security.enabled: true xpack.security.transport.ssl.enabled: true
-
2、配置TLS/SSL
执行命令
bin/elasticsearch-certutil ca
, 生成elastic-stack-ca.p12
文件
执行命令bin/elasticsearch-certutil cert--ca elastic-stack-ca.p12
, 生成elastic-certificates.p12
和elastic-stack-ca.p12
文件
移动生成的文件到合适的地方,如:/home/es/es-xxx/config/certs
在
elasticsearch.yml
中添加如下配置(注意配置路径为当前目录):xpack.security.transport.ssl.verification_mode: certificate xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12 xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12
-
3、ES内置用户设置密码(ES 目录下执行)
bin/elasticsearch-setup-passwords interactive
-
4、重启服务
1.6、其它相关服务加固建议
1、配置身份验证,防止未授权访问
2、服务权限最小化原则
3、限制可访问 ip
4、及时更新补丁
5、日志单独存放,尽量发送到中央日志服务器留存
6、限制高危操作,禁止不带条件的读取、删除
二、系统安全
2.1、windows 系统安全
及时更新补丁,关闭不必要的账号与服务等。
2.1.1、账号检查
检查账号与账户组,确定管理员组内账号无异常,无共享、共有账号,禁用来宾账号。
2.1.2、密码及复杂度设置
修改组策略密码设置策略:
1、计算机配置–windows设置–安全设置–账户策略–密码策略–密码必须符合复杂性要求:已启用。
2、计算机配置–windows设置–安全设置–账户策略–密码策略–密码长度最小值:8个字符。
3、计算机配置–windows设置–安全设置–账户策略–密码策略–密码最长使用期限:90天。
4、计算机配置–windows设置–安全设置–账户策略–密码策略–强制密码历史:3个记住的密码。
2.1.3、账户锁定策略
账户锁定策略,可以防止恶意攻击者对账号进行暴力破解,但是无法防止恶意攻击者故意DOS造成账号锁死。
2.1.4、审核策略配置
将除
审核策略更改
为“成功”外,其余均设置为“成功,失败”
2.1.5、日志大小设置
将应用程序、安全、系统日志至少设置为32MB以上,设置当达到最大的日志尺寸时,按需要改写事件。
2.1.6、其它设置
补丁、远程超时设置、默认共享、文件权限指派、系统服务、匿名权限限制、防火墙、防病毒软件、SNMP默认口令等,可以根据实际需要进行配置。