中间件安全排查标准
一、Nginx
(1)目录索引是否禁止*
| 评估目的 | WEB 目录禁止目录列表显示。 |
|---|---|
| 安全建议 | 禁止目录列表显示,保护网页目录和文件信息。 |
| 判定依据 | 查看配置文件 nginx.conf 有无相关设置。 |
描述操作 :
修改nginx/conf/nginx.conf 文件中的location部分:autoindex 为off
location /{
# root html;
# index index.html index.htm;
root /usr/local/src/static/img; #指定实际目录绝对路径;
autoindex on; # 目录浏览功能开关
|
(2)隐藏版本信息*
| 评估目的 | 防止Nginx版本泄露 |
|---|---|
| 安全建议 | 禁止在所有自动产生的错误页面中显示版本号,防止泄露敏感信息。 |
| 判定依据 | 在地址栏输入一个不存在的页面,验证是否已不显示版本号 |
描述操作:
- 设置操作步骤
- (1) 修改文件$NGINX_HOME/conf/nginx.conf在 http 模块下添加或则修改为 server_tokens off;
- (2) 重新启动 Nginx 服务
(3)请求拦截配置*
| 评估目的 | 防止Nginx请求拦截遗漏造成未授权访问 |
|---|---|
| 安全建议 | 白名单配置访问或梳理系统访问url,全部加入黑名单访问 |
| 判定依据 | 查看配置文件 nginx.conf 有无相关设置。 |
描述操作:
- 设置操作步骤
server {
listen 80;
server_name www.example.com;
# 精确匹配根URL,转发到后端的index页面
location = / {
proxy_pass http://backend_server/index;
}
# 处理静态文件请求,这是Nginx的强项
location ^~ /static/ {
root /path/to/static/files;
}
# 正则匹配图片文件,转发到图片服务器
location ~* \.(gif|jpg|jpeg|png)$ {
proxy_pass http://image_server;
}
# 通用匹配,转发到后端应用服务器
location / {
proxy_pass http://backend_server;
}
}
(4)超时连接设置
| 评估目的 | 设置连接超时自动断开,防范DDOS攻击 |
|---|---|
| 安全建议 | 白名单配置访问或梳理系统访问url,全部加入黑名单访问 |
| 判定依据 | 查看配置文件 nginx.conf 有无相关设置。 |
描述操作:
- 设置操作步骤
- (1)修改文件$NGINX_HOME/conf/nginx.conf 在 http 模块下添加或则修改为 keepalive_timeout 65; (数值根据需要调整)
- (2)重新启动 Nginx 服务
(5)禁用危险HTTP方法*
| 评估目的 | 防止危险方法访问 |
|---|---|
| 安全建议 | 拒绝除post/get/head方法外的其他方法请求 |
| 判定依据 | 查看配置文件 nginx.conf 有无相关设置。 |
描述操作: -设置操作步骤
- (1)修改配置文件
#vim /usr/local/nginx/conf/nginx.conf
#具体设置如下:
Server{
......
if($request_method !~ ^(GET|HEAD|POST)$) {
return404;
}
......
}
- (2)重新启动 nginx 服务
(6)隐藏X-Powered-By
| 评估目的 | 防止暴露后端语言或框架 |
|---|---|
| 安全建议 | 隐藏Nginx后端服务指定Header的状态 |
| 判定依据 | 查看配置文件 nginx.conf 有无相关设置。 |
描述操作
设置操作步骤
- (1)修改文件$NGINX_HOME/conf/nginx.conf
- 在 http 模块下配置proxy_hide_head项 或者添加或者修改为 proxy_hide_header X-Powered-By; proxy_hide_header Server;
- (2)重新启动 Nginx 服务。
二、APACHE
(1)目录索引是否禁止*
| 评估目的 | WEB 目录禁止目录列表显示。 |
|---|---|
| 安全建议 | 禁止目录列表显示,保护网页目录和文件信息。 |
| 判定依据 | 查看配置文件 httpd.conf 有无相关设置。 |
描述操作
将httpd.conf文件中Options Indexes MultiViews将“Indexes”
Options Indexes MultiViews ← 找到这一行,将“Indexes”删除
↓
Options MultiViews ← 变为此状态(不在浏览器上显示树状目录结构)
AllowOverride None
Order allow,deny
Allow from all
</Directory>
(2)隐藏版本信息*
| 评估目的 | 防止Tomcat版本泄露 |
|---|---|
| 安全建议 | 禁止在所有自动产生的错误页面中显示版本号,防止泄露敏感信息。 |
| 判定依据 | 在地址栏输入一个不存在的页面,验证是否已不显示版本号 |
描述操作
设置操作步骤
- (1)在 conf/server.xml文件中的 节点下添加如下配置
<Valve className="org.apache.catalina.valves.ErrorReportValve
" showReport="false" showServerInfo="false" />
// showReport:默认true,是否显示异常信息
// showServerInfo:默认true,是否显示版本号
(2) 修改或隐藏响应头的 server 值
在 conf/server.xml 文件中的 <Connector> 节点新增 server属性
<Connector port="21058" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="21052"
server="smartbi"/>
// server 值可以为空或自定义字符串
(3)错误页面处理*
| 评估目的 | 防止泄露敏感信息 |
|---|---|
| 安全建议 | Apache 访问错误页面重定向,防止泄露敏感信息 |
| 判定依据 | 在地址栏输入一个不存在的页面,验证是否已指向错误页面 |
描述操作
设置操作步骤
- (1) 修改 httpd.conf 配置文件
ErrorDocument 400 /custom400.html ErrorDocument 401 /custom401.html ErrorDocument 403 /custom403.html ErrorDocument 404 /custom404.html ErrorDocument 405 /custom405.html ErrorDocument 500 /custom500.html - (2)重新启动 Apache 服务
(4)CGI 程序控制
| 评估目的 | CGI 程序控制 |
|---|---|
| 安全建议 | 如果服务器上不需要运行 CGI 程序,建议禁用 CGI |
| 判定依据 | 检查配置文件 httpd.conf |
描述操作
设置操作步骤编辑 httpd.conf 配置文件,把 cgi-bin 目录的配置和模块注释掉:
```
#<Directory "/var/www/cgi-bin">
# AllowOverride None
# Options None
# Require all gra
#</Directory>
```
(5)禁用危险HTTP方法
| 评估目的 | 用危险HTTP方法 |
|---|---|
| 安全建议 | 只允许get 、post等程序常用方法 |
| 判定依据 | 检查配置文件 httpd.conf |
描述操作
设置操作步骤编辑 httpd.conf 配置文件,新增或修改如下配置:
```
<Location />
<LimitExcept GET POST CONNECT OPTIONS>
Order Allow,Deny
Deny from all
</LimitExcept>
</Location>
```
(6)关闭 TRACE方法
| 评估目的 | 关闭 TRACE方法 |
|---|---|
| 安全建议 | 关闭 TRACE,防止 TRACE 方法被访问者恶意利用 |
| 判定依据 | 检查配置文件 httpd.conf |
描述操作
设置操作步骤
- (1)编辑 httpd.conf 配置文件,配置如下内容: TraceEnable Off
- (2)如果不存在则手动在文件末尾添加。>
(7)拒绝服务防御
| 评估目的 | 拒绝服务防御 |
|---|---|
| 安全建议 | 防范拒绝服务攻击 |
| 判定依据 | 检查配置文件 httpd.conf |
描述操作
设置操作步骤
- (1) 编辑 httpd.conf 配置文件:
Timeout 10 #客户端与服务器端建立连接前的时间间隔
KeepAlive On
KeepAliveTimeout 15 #限制每个session的保持时间是15秒
AcceptFilter http data
AcceptFilter https data
- (2)重新启动 Apache 服务。
(8) 请求拦截配置*
| 评估目的 | 防止请求拦截遗漏造成未授权访问 |
|---|---|
| 安全建议 | 白名单配置访问或梳理系统访问url,全部加入黑名单访问 |
| 判定依据 | 查看配置文件httpd.conf有无相关设置。 |
描述操作 设置操作步骤 修改/conf目录下的 httpd.conf 文件
- (1) #去掉以下两行的注释
- LoadModule proxy_module modules/mod_proxy.so
- LoadModule proxy_http_module modules/mod_proxy_http.so在 httpd.conf 文件末尾添加转发配置
- (2)# 将所有 /sina/ 开头的链接转发到
- http://192.168.1.31:80/
- ProxyPass /sina/ http://192.168.1.31:80/
- ProxyPassReverse /sina/ http://192.168.1.31:80/
三、TOMCAT
(1)目录索引是否禁止*
| 评估目的 | WEB 目录禁止目录列表显示。 |
|---|---|
| 安全建议 | 禁止目录列表显示,保护网页目录和文件信息。 |
| 判定依据 | 查看配置文件 web.xml有无相关设置。 |
描述操作
修改conf/web.xml文件中listings项为false
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value> // 这里改为false
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
(2)隐藏版本信息*
| 评估目的 | 防止Tomcat版本泄露 |
|---|---|
| 安全建议 | 禁止在所有自动产生的错误页面中显示版本号,防止泄露敏感信息。 |
| 判定依据 | 在地址栏输入一个不存在的页面,验证是否已不显示版本号 |
描述操作 设置操作步骤
- 打开 Apache 配置文件httpd.conf,添加/修改下面的代码,保存后重启Apache服务
- ServerTokens Prod
- ServerSignature Off
(3)禁用危险http方法
| 评估目的 | 防止危险方法访问 |
|---|---|
| 安全建议 | 拒绝除post/get/head方法外的其他方法请求 |
| 判定依据 | 查看配置文件web.xml 有无相关设置。 |
描述操作
- (1)修改文件$TOMCAT_HOME/conf/web.xml,
配置org.apache.catalina.servlets.DefaultServlet 的值,内容如 下:<init-param> <param-name>readonly</param-name> <param-value>false</param-value> </init-param> readonly 参数默认是 true,即允许 delete 和 put 操作,修改 为 false。 - (2)重新启动 Tomcat 服务。
(4)禁止显示异常调试信息
| 评估目的 | 禁止显示异常调试信息 |
|---|---|
| 安全建议 | 当请求处理期间发生运行时错误时,ApacheTomcat将向请求者显示调试信息,存在安全隐患 |
| 判定依据 | 查看配置文件web.xml 有无相关设置。 |
描述操作
- (1)修改文件$TOMCAT_HOME/conf/web.xml在web-app下添加子节点,配置
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/error.jsp</location>
</error-page>
在webapps目录下创建error.jsp,定义自定义错误信息
- (2)重新启动 Tomcat 服务。
(5)Tomcat禁止自动部署
| 评估目的 | 禁止自动部署程序 |
|---|---|
| 安全建议 | 配置自动部署,容易被部署恶意或未经测试的应用程序,应将其禁用 |
| 判定依据 | 查看配置文件web.xml 有无相关设置。 |
描述操作
修改Tomcat 根目录下的配置文件conf/server.xml,将host节点的autoDeploy属性设置为“false”,
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="false">
如果host的deployOnStartup属性(如没有deployOnStartup配置可以忽略)为“true”,则也将其更改为“false”
(6)删除无关文件和目录*
| 评估目的 | 删除无关文件和目录 |
|---|---|
| 安全建议 | Tomcat安装提供了示例应用程序、文档和其他可能不用于生产程序及目录,存在极大安全风险 |
| 判定依据 | 确认已删除或移除看配置文件。 |
描述操作
删除Tomcat示例程序和目录、管理控制台等,即从Tomcat根目录的webapps目录,移出或删除docs、examples、host-manager、manager目录
(7)运行进程权限检测
| 评估目的 | 运行进程权限检测 | |
|---|---|---|
| 安全建议 | 在运行Internet服务时,最好尽可能避免使用root用户运行,降低攻击者拿到服务器控制权限的机会 | |
| 判定依据 | ps -ef | grep tomcat查看运行tomcat的用户 |
描述操作
新增tomcat用户
useradd tomcat
--将tomcat目录owner改为tomcat
chown -R tomcat:tomcat /opt/tomcat
-- 停止原来的tomcat服务
--切换到tomcat用户
su - tomcat
--重新启动tomcat
/opt/tomcat/bin/startup.sh
(8)错误页面处理
| 评估目的 | 错误页面处理 |
|---|---|
| 安全建议 | Tomcat 访问错误页面重定向,防止泄露敏感信息 |
| 判定依据 | 在地址栏输入一个不存在的页面,验证是否已指向错误页面 |
描述操作
- (1)查看 tomcat/conf/web.xml 文件,新增或修改如下配置:
<error-page>
<error-code>404</error-code>
<location>/错误页面</location>
</error-page>
......
<error-page>
<exception-type>java.lang.NullPointerException</exception-type>
<location>/error.jsp</location>
</error-page>
- (2)重新启动 Tomcat 服务
(9) 请求拦截配置*
| 评估目的 | 防止请求拦截遗漏造成未授权访问 |
|---|---|
| 安全建议 | 白名单配置访问或梳理系统访问url,全部加入黑名单访问 |
| 判定依据 | 查看配置文件web.xml有无相关设置。 |
描述操作
设置操作步骤
修改/conf目录下的 httpd.conf 文件
- (1)使用 web.xml 配置 Servlet 映射(内部转发)
<!-- 定义Servlet -->
<servlet>
<servlet-name>myForwardServlet</servlet-name>
<servlet-class>com.example.ForwardServlet</servlet-class>
</servlet>
<!-- 映射URL模式 -->
<servlet-mapping>
<servlet-name>myForwardServlet</servlet-name>
<url-pattern>/old-path/*</url-pattern> <!-- 拦截所有以/old-path/开头的请求 -->
</servlet-mapping>
- (2)配置 实现访问控制 适用场景:拦截 URL 并强制跳转到登录页或其他页面(基于安全约束)。
<web-app>
<security-constraint>
<web-resource-collection>
<web-resource-name>Protected Area</web-resource-name>
<url-pattern>/admin/*</url-pattern> <!-- 拦截路径 -->
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login.html</form-login-page> <!-- 跳转到登录页 -->
<form-error-page>/error.html</form-error-page>
</form-login-config>
</login-config>
</web-app>
四、中间件日志*
(1)Apache HTTP 服务器的日志文件通常位于 /var/log/apache2/ 目录下。主要的日志文件包括:
access.log:记录所有访问请求。
error.log:记录所有错误信息。
(2)Nginx 的日志文件通常位于 /var/log/nginx/ 目录下。主要的日志文件包括:
access.log:记录所有访问请求。
error.log:记录所有错误信息。
(3)Tomcat的日志文件通常位于 /usr/local/tomcat/logs/目录下。
访问日志: /usr/local/tomcat/logs/access.log
错误日志: /usr/local/tomcat/logs/catalina.out
日志标准包括不限于:来源IP、时间、访问地址、访问方式、成功失败等,保存时间必须近6个月、返回结果