易君召
发布于 2026-08-03 / 作者:易君召 / 1 阅读
0

Web 服务器安全配置完整指南

适用于 Nginx / Apache / Caddy / Traefik 主流 Web 服务器,分为通用基线配置、传输层安全、访问控制、防护策略、日志与监控、加固运维、漏洞规避七大模块,可直接落地生产环境。

核心目标:缩小攻击面、阻止常见攻击(SQL 注入、XSS、路径遍历、扫描、暴力破解)、防止信息泄露、满足等保 / 数据安全规范。

一、基础环境与服务基线加固(操作系统层面,前置条件)

Web 服务安全不能只改配置文件,系统底层是第一道防线

  1. 最小权限运行 Web 进程

    • 禁止使用 root 启动 Nginx/Apache;创建专用非特权用户(nginx/www-data

    • 网站根目录权限:目录755,文件644禁止 777;上传目录禁止执行权限

    chown -R nginx:nginx /usr/share/nginx/html
    chmod -R 644 /usr/share/nginx/html
    chmod -R 755 /usr/share/nginx/html
    # 上传目录取消执行权限
    chmod -R u-x,g-x,o-x /data/www/upload
    
  2. 关闭不必要模块

    • Nginx:禁用 autoindex、ssi、dav 等无用模块

    • Apache:关闭 mod_cgi、mod_autoindex、mod_status(不需要时)

  3. 服务版本隐藏(禁止泄露指纹)

    • Nginx:server_tokens off;

    • Apache:ServerTokens ProdServerSignature Off

      作用:黑客无法直接识别服务器版本,减少定向漏洞利用风险。

  4. 监听地址限制

    不要监听 0.0.0.0(公网 + 内网全开放),内网服务限定监听 127.0.0.1 或内网 IP。

二、HTTPS / TLS 传输层安全(最重要)

明文 HTTP 极易抓包篡改,所有业务强制 HTTPS

1. 证书规范

  • 使用正规 CA 证书(Let’s Encrypt、商业证书),避免自签名证书对外服务

  • 自动续期(certbot/acme.sh),设置证书过期告警

2. TLS 协议与加密套件加固(禁用老旧不安全协议)

✅ 推荐策略:

  • 禁用 SSLv3、TLS1.0、TLS1.1,仅保留 TLS 1.2、TLS 1.3

  • 淘汰弱加密套件(AES-CBC、3DES、RC4),优先 GCM 系列

  • 开启 OCSP Stapling,减少证书查询泄露、提升速度

3. 强制跳转 HTTP → HTTPS

所有 80 端口请求 301 重定向至 443,禁止混合内容访问。

4. 安全响应头(TLS 相关)

  • HSTSStrict-Transport-Security,强制浏览器永久使用 HTTPS

    plaintext

    Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
    

三、HTTP 安全响应头(防御浏览器侧攻击:XSS、点击劫持、MIME 嗅探)

所有虚拟主机统一添加,Nginx/Apache 均可配置:

nginx

add_header X-Frame-Options DENY;                # 防点击劫持,禁止被iframe嵌入
add_header X-XSS-Protection "1; mode=block";    # 浏览器内置XSS防护
add_header X-Content-Type-Options nosniff;     # 禁止浏览器自动猜测文件类型
add_header Referrer-Policy strict-origin-when-cross-origin; # 控制Referer泄露
add_header Content-Security-Policy "default-src 'self'"; # CSP,阻断非法脚本加载
add_header Permissions-Policy "camera=(),microphone=()"; # 限制浏览器权限

CSP 策略根据业务微调,前端引入第三方 JS 需要增加对应域名。

四、请求限制与流量防护(抵御 CC、暴力扫描、超大请求攻击)

1. 请求大小限制

防止上传超大文件导致 DoS

nginx

client_max_body_size 10M;    # 根据业务设定上限
client_body_buffer_size 128k;

2. 连接限速、并发限制

限制单 IP 最大并发连接、每秒请求数,缓解 CC 扫描

nginx

limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;

3. 请求超时时间

避免恶意长连接占用资源

nginx

client_header_timeout 10s;
client_body_timeout 10s;
send_timeout 10s;

4. 禁止危险 HTTP 方法

仅允许 GET POST HEAD,禁用 PUT DELETE TRACE OPTIONS(REST 业务除外)

TRACE 方法容易引发跨站追踪漏洞。

五、路径访问控制与目录防护

  1. 关闭目录浏览(AutoIndex)

    禁止访问目录时列出全部文件,防止源码、备份文件泄露

    • Nginx:autoindex off;

  2. 拦截敏感文件访问

    禁止直接访问 .env.git.bak.sqlweb.configphp.ini、源码备份文件

    nginx

    location ~* \.(git|bak|sql|env|ini|swp)$ { return 403; }
    location ~ /\. { return 403; } # 禁止访问隐藏文件 .htaccess .gitignore
    
  3. 路径遍历防护

    Web 应用层做好过滤,Web 服务器层面可配置规范化 URI,拦截 ../ 畸形请求

  4. 上传目录隔离

    上传文件夹禁止解析脚本。例:上传目录不允许执行 php/jsp:

    nginx

    location ~* ^/upload/.*\.(php|jsp)$ { return 403; }
    

六、访问控制:IP 黑白名单、鉴权

  1. 内网管理后台限制源 IP

    后台、监控面板、phpmyadmin:只允许公司办公网 IP 访问

    nginx

    location /admin/ {
        allow 192.168.1.0/24;
        deny all;
    }
    
  2. 基础认证(内部管理系统)

    使用 htpasswd 开启 Basic Auth,对外业务慎用(需搭配 HTTPS)

  3. 避免使用模糊正则、宽松匹配,防止路径绕过漏洞

七、WAF 与攻击防护方案

Web 服务器原生能力有限,多层防御:

  1. 轻量方案:Nginx + ngx_modsecurity(ModSecurity WAF)

    内置 OWASP 核心规则集,拦截 SQL 注入、XSS、命令注入、恶意请求

  2. 云环境:前置云 WAF;集群环境使用 Traefik/Ingress 网关统一防护

  3. 规则建议:

    • 拦截 URL 中出现 union select<script>eval( 等特征

    • 拦截 User-Agent 恶意扫描器、爬虫

八、日志配置(溯源、等保审计必备)

  1. 开启访问日志 + 错误日志

    记录字段:源 IP、请求时间、URL、状态码、Referer、UA、响应大小

  2. 日志持久化,定期轮转(logrotate),避免磁盘占满

  3. 日志禁止存放于网站根目录,防止被外部下载

  4. 建议推送日志至 ELK/SIEM 平台,实现异常访问告警(高频 403、大量 444、短时间大量请求)

示例 Nginx 日志格式:

nginx

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                '$status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for"';

九、反向代理特殊安全要点(最常用场景)

如果 Web 服务器作为反向代理(前后端分离、代理 Tomcat/Node):

  1. 保护后端真实服务不暴露公网,后端只监听 127.0.0.1

  2. 正确传递真实 IP X-Forwarded-For不要信任不可控的 XFF 头部,只信任上游可信网关

  3. 禁用代理转发危险头,防止头部注入攻击

  4. 设置代理超时,避免后端僵死连接

  5. 禁止直接转发任意 URI,做好路径过滤

十、持续运维安全策略(配置之外)

  1. 定期升级 Web 服务版本(Nginx/Apache、OpenSSL)修复组件漏洞

  2. 最小化插件、第三方模块,不用则卸载

  3. 使用自动化扫描工具:Nessus、AWVS、OpenVAS 定期扫描 Web 服务

  4. 配置变更审计:所有 nginx.conf 修改留存版本,上线前语法校验 nginx -t

  5. 定期备份配置文件,禁止配置文件公网可访问

  6. 防火墙配合:云服务器安全组 /iptables,只开放 80/443,关闭多余端口

常见错误避坑清单

❌ 不要开启 server_tokens on

❌ 不要网站目录权限 777

❌ 不要混合 HTTP/HTTPS 业务

❌ 不要信任客户端传入的 X-Forwarded-For

❌ 不要保留默认页面、默认账号、示例程序

❌ 不要把 .git、备份 sql、环境配置文件放在 web 可访问目录

极简 Nginx 安全配置模板(可直接修改使用)

# 隐藏版本
server_tokens off;

# 全局安全头
add_header X-Frame-Options DENY always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options nosniff always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

# 限制请求
client_max_body_size 10M;
client_header_timeout 10s;

# 拦截敏感文件
location ~* /\.(env|git|bak|sql|ini) { return 403; }
location ~* ^/upload/.*\.(php)$ { return 403; }

# HTTP强制跳转HTTPS
server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}