中间件加固过程和常用命令Web系统的广泛应用,其本身面临各种各样的安全威胁,中间件作为操作系统与应用系统之间的管道,如果配置和管理不当会给应用系统带来很大的安全隐患。中间件的加固主要是从账号管理,权限管理和参数安全性配置方面来进行,及时修复软件的漏洞,修改操作中间件的用户权限,修改口令配置参数,启用日志审核等
Tomcat 安全加固
- 账号管理
- 按照用户分配帐号
- 删除或锁定与设备运行、维护等工作无关的帐号
- 使用密码复杂度高的口令
修改账号管理配置文件tomcat/conf/tomcat-users.xml
<user username=“tomcat” password=“Tomcat!234” roles=“tomcat”></user>
不需要要的用户可以直接删除或注释对应行
- 权限配置
- 服务降权
- 不使用 root 用户启动 Tomcat,使用用普通用户启动Tomcat
- 根据用户的业务需要,配置其所需的最小权限
修改账号管理配置文件tomcat/conf/tomcat-users.xml,此处使用的是Tomcat8.5.47
<user username=“tomcat” password=“Tomcat!234” roles=“tomcat”></user>
roles的值代表用户权限
role1: 具有读权限
tomcat: 具有读和运行权限
manager-gui:具有远程管理权限,需要自己定义该权限 - 目录列表访问限制
禁止tomcat列表显示文件,修改tomcat/conf/web.xml配置文件
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
- 日志配置
- 配置日志功能,对用户登录进行记录
修改配置文件 tomcat\conf\server.xml,此处使用的是Tomcat8.5.47
<Valve className=“org.apache.catalina.valves.AccessLogValve” directory=“logs”
prefix=“localhost_access_log” suffix=“.txt”
pattern=“%h %l %u %t “%r” %s %b” ></Valve>
directory:日志存放目录
prefix:日志名称格式
一些pattern参数:
%b 发送信息的字节数,不包括http头,如果字节数为0的话,显示为-
%h 服务器的名称
%s http的响应状态码
%t 请求时间
%l 记录浏览者进行身份验证时提供的名字
%u 得到了验证的访问者,否则就是"-"
- 配置日志功能,对用户登录进行记录
- 其他配置
- 删除默认文档和实例程序
- 打开tomcat_home/webapps文件夹,删除默认存在docs和examples文件夹
- 隐藏Tomcat版本信息
-
使用解压软件打开 Tomcat目录下的lib\catalina.jar
-
打开catalina.jar中 org\apache\catalina\util 下的 ServerInfo.properties 文件
-
打开该文件,将server.info参数值更改为NO VERSION,重启Tomcat即可生效
-
- 修改默认端口8080
修改配置文件 tomcat\conf\server.xml
<Connector port=“8080” protocol=“HTTP/1.1”
connectionTimeout=“20000”
redirectPort=“8443” ></Connector>
port: 为tomcat服务端口
redirectPort: 当用户使用http请求设置了必须要https方式访问的资源,此时会自动重定向到该端口
connectionTimeout: 超时时间,默认为20000毫秒
- 删除默认文档和实例程序
Apache 安全加固
- 日志配置
- 错误日志配置
打开httpd.conf文件,确认错误日志开启,并设置好存放路径
ErrorLog “logs/error.log”
LogLevel warn 设置日志的级别 - 访问日志配置
打开httpd.conf文件,确认访问日志开启,并设置好日志格式、存放路径
<IfModule log_config_module>
LogFormat “%h %l %u %t “%r” %>s %b “%{Referer}i” “%{User-Agent}i”” combined
CustomLog “logs/access.log” combined
</IfModule>
日志参数
%b 客户端响应的大小(以字节为单位)
%h 远端主机
%r 来自客户端的请求行
%l 远端登录名
%>s 是从服务器发送到客户端的状态代码(500,404等)
Referer 是链接到此URL的页面
- 错误日志配置
- 权限配置
- 不要使用管理员账户运行Apache服务,以专门的用户帐号和用户组运行
为 Apache 服务创建用户及用户组,并在配置文件http.conf中进行指定
User apache 指定用户
Group apache 指定用户组 - 设置配置文件和日志文件的权限,防止未授权访问
chmod 600 /etc/httpd/conf/httpd.conf #设置配置文件为属主可读写,其他用户无读写权限
chmod 644 /var/log/httpd/*.log #设置日志文件为属主可读写,其他用户拥有只读权限 - 禁止目录列出
修改配置文件http.conf,找到指定目录进行如下设置
<Directory “/web”>
#Options Indexes FollowSymLinks #删掉Indexes
Options FollowSymLinks
</Directory> - 忽略.htaccess 文件
修改配置文件http.conf,找到指定目录进行如下设置
<Directory “/web”>
AllowOverride None
</Directory> - 禁止访问外部文件
修改配置文件http.conf,找到指定目录进行如下设置
<Directory “/web”>
Order Deny,Allow
Deny from all
</Directory> - 限制请求消息长度
LimitRequestBody 5120000 #单位为byte
- 不要使用管理员账户运行Apache服务,以专门的用户帐号和用户组运行
- 其他配置
- 拒绝服务防范,进行超时设置
查看httpd.conf配置文件,确保httpd-default.conf启用
Include “conf/extra/httpd-default.conf”
配置apache\conf\extra\httpd-default.conf
Timeout 30 #客户端与服务器端建立连接前的时间间隔
KeepAlive On #开启可以提高性能,保持连接
KeepAliveTimeout 15 #限制每个 session 的保持时间是 15 秒 - 隐藏 Apache 的版本号及其它敏感信息
在httpd.conf配置文件中添加
ServerSignature Off
ServerTokens Prod
- 拒绝服务防范,进行超时设置
IIS 安全加固
以下使用 IIS6.0 进行配置演示
-
日志配置
”开始->管理工具->Internet 信息服务(IIS)管理器“选择相应的站点,右键点击“属性->网站”,进行相应设置-
确保日志启用
-
根据需求配置日志
在网站属性中点击“网站”,而后点击在日志记录下的属性,进行日志配置 -
设置日志文件生成频率,日志存放路径等
-
设置扩展日志选项
-
-
权限配置
- 网站的主目录应不使用默认本地路径(c:\inetpub\wwwroot)
- 主目录应设置好最小权限,网站上传目录和数据库目录一般需要分配“写入”权限,但一定不要分配执行权限,其他目录一般只分配“读取”和“记录访问”权限即可
- ”开始->管理工具->Internet 信息服务(IIS)管理器“选择相应的站点,右键点击“属性”,进行相应设置
-
服务扩展
- 禁用不需要的 Web服务扩展
- 禁用不需要的 Web服务扩展
-
其他配置
-
删除IIS默认站点
- 把IIS默认安装的站点删除或禁用掉
-
防止信息泄露
- 禁止向客户端发送详细的ASP错误信息
- 禁止向客户端发送详细的ASP错误信息
-
修改默认错误页面
-
Nginx 安全加固
- 权限配置
- 禁止目录浏览
编辑nginx.conf配置文件,在http模块下添加
autoindex off; - 限制HTTP请求方法
编辑nginx.conf配置文件,在http模块下添加
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 444;
} - 限制目录执行权限
编辑nginx.conf配置文件,在server模块下添加
location ~ /(attachments|upload)/.*.(php|php5)?$ {
deny all;
}
#此处禁止在attachments与upload目录下执行php
#此处配置代码需要放到 location ~ .php{…}上面 - Nginx降权
编辑nginx.conf配置文件,取消 “user nobody;”该行注释
- 禁止目录浏览
- 日志配置
开启日志,并设置日志格式编辑nginx.conf配置文件,在http模块下取消以下代码的注释
设置日志格式
log_format main '$remote_addr - $remote_user [$time_local] “$request” ’
'$status $body_bytes_sent “$http_referer” ’
’ “$http_user_agent” “$http_x_forwarded_for” ';
开启日志,并指定存放路径与日志格式
access_log logs/access.log main;
日志格式参数:
$remote_addr与$http_x_forwarded_for 用以记录客户端的ip地址
$remote_user 用来记录客户端用户名称
$time_local 用来记录访问时间与时区
$request 用来记录请求的url与http协议
$status 用来记录请求状态;成功是200
$body_bytes_s ent 记录发送给客户端文件主体内容大小
$http_referer 用来记录从那个页面链接访问过来的
$http_user_agent 记录客户毒啊浏览器的相关信息 - 其他配置
- 隐藏版本信息
编辑nginx.conf配置文件,在HTTP模块添加
server_tokens off; - 补丁更新,根据nginx版本安装补丁或更新版本
查看软件版本 nginx -v
测试配置文件 nginx –t
- 隐藏版本信息