9.5. 保护 HTTP 服务器
9.5.1. httpd.conf 中的安全增强
您可以通过在 /etc/httpd/conf/httpd.conf
文件中配置安全选项来提高 Apache HTTP 服务器的安全性。
在将脚本加入到生产环境前,需要验证它们是否可以正常工作。
确保只有 root
用户对包含脚本或通用网关接口(CGI)的任何目录具有写入权限。要将目录所有权改为具有写入权限的 root
,请输入以下命令:
# chown root <directory_name> # chmod 755 <directory_name>
在 /etc/httpd/conf/httpd.conf
文件中,您可以配置以下选项:
FollowSymLinks
- 这个指令默认为启用,并遵循目录中的符号链接。
索引
- 这个指令被默认启用。禁用这个指令,以防止访问者浏览服务器上的文件。
UserDir
-
这个指令默认为禁用,因为它可以确认系统中存在用户帐户。要激活用户目录浏览
/root/
以外的所有用户目录,使用UserDir enabled
和UserDir disabled
root 指令。要将用户添加到禁用帐户列表中,请在UserDir disabled
行中添加以空格分隔的用户列表。 ServerTokens
这个指令控制向客户端发送的服务器响应标头字段。您可以使用以下参数来自定义信息:
ServerTokens Full
提供所有可用信息,如 Web 服务器版本号、服务器操作系统详情、已安装的 Apache 模块,例如:
Apache/2.4.37 (Red Hat Enterprise Linux) MyMod/1.2
ServerTokens Full-Release
提供与发行版本相关的所有可用信息,例如:
Apache/2.4.37 (Red Hat Enterprise Linux) (Release 41.module+el8.5.0+11772+c8e0c271)
ServerTokens Prod / ServerTokens ProductOnly
提供 Web 服务器名称,例如:
Apache
ServerTokens Major
提供 Web 服务器主版本,例如:
Apache/2
ServerTokens Minor
提供 Web 服务器次版本,例如:
Apache/2.4
ServerTokens Min
/ServerTokens Minimal
提供 Web 服务器最小发行版本,例如:
Apache/2.4.37
ServerTokens OS
提供 Web 服务器发行版本和操作系统,例如:
Apache/2.4.37 (Red Hat Enterprise Linux)
使用
ServerTokens Prod
选项降低攻击者获取您系统的任何宝贵信息的风险。
不要删除 IncludesNoExec
指令。默认情况下,Server Side Includes (SSI) 模块无法执行命令。更改这个设置可让攻击者在系统中输入命令。
删除 httpd 模块
您可以删除 httpd
模块来限制 HTTP 服务器的功能。编辑 /etc/httpd/conf.modules.d/
或 /etc/httpd/conf.d/
目录中的配置文件。例如,要删除代理模块:
echo '# All proxy modules disabled' > /etc/httpd/conf.modules.d/00-proxy.conf
9.5.2. 保护 Nginx 服务器配置
Nginx 是一个高性能 HTTP 和代理服务器。您可以使用以下配置选项强化 Nginx 配置。
流程
要禁用版本字符串,修改
server_tokens
配置选项:server_tokens off;
这个选项将停止显示其他详细信息,如服务器版本号。此配置仅显示 Nginx 提供的所有请求中的服务器名称,例如:
$ curl -sI http://localhost | grep Server Server: nginx
添加额外的安全标头,以缓解特定
/etc/nginx/
conf 文件中的某些已知 Web 应用程序漏洞:例如,
X-Frame-Options
标头选项拒绝您的域之外的任何页面来帧由 Nginx 提供的任何内容,缓解了攻击:add_header X-Frame-Options "SAMEORIGIN";
例如,
x-content-type
标头在某些较旧的浏览器中可以防止 MIME-type sniffing:add_header X-Content-Type-Options nosniff;
例如,
X-XSS-Protection
标头启用跨站点脚本过滤(XSS)过滤,这可防止浏览器渲染由 Nginx 中包含的潜在的恶意内容:add_header X-XSS-Protection "1; mode=block";
您可以限制公开的服务,并限制它们对访问者执行的操作,例如:
limit_except GET { allow 192.168.1.0/32; deny all; }
该片段将限制对除
GET
和HEAD
外的所有方法的访问。您可以禁用 HTTP 方法,例如:
# Allow GET, PUT, POST; return "405 Method Not Allowed" for all others. if ( $request_method !~ ^(GET|PUT|POST)$ ) { return 405; }
- 您可以配置 SSL 来保护 Nginx web 服务器提供的数据,请考虑仅通过 HTTPS 提供它。另外,您可以使用 Mozilla SSL 配置生成器生成在 Nginx 服务器中启用 SSL 的安全配置配置文件。生成的配置确保了,所有已知存在安全漏洞的协议(例如, SSLv2 和 SSLv3),加密程序和哈希算法(例如 3DES 和 MD5) 都已禁用。您还可以使用 SSL 服务器测试来验证您的配置是否满足现代安全要求。