适用于 Nginx / Apache / Caddy / Traefik 主流 Web 服务器,分为通用基线配置、传输层安全、访问控制、防护策略、日志与监控、加固运维、漏洞规避七大模块,可直接落地生产环境。
核心目标:缩小攻击面、阻止常见攻击(SQL 注入、XSS、路径遍历、扫描、暴力破解)、防止信息泄露、满足等保 / 数据安全规范。
一、基础环境与服务基线加固(操作系统层面,前置条件)
Web 服务安全不能只改配置文件,系统底层是第一道防线
最小权限运行 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关闭不必要模块
Nginx:禁用 autoindex、ssi、dav 等无用模块
Apache:关闭 mod_cgi、mod_autoindex、mod_status(不需要时)
服务版本隐藏(禁止泄露指纹)
Nginx:
server_tokens off;Apache:
ServerTokens Prod、ServerSignature Off作用:黑客无法直接识别服务器版本,减少定向漏洞利用风险。
监听地址限制
不要监听
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 相关)
HSTS:
Strict-Transport-Security,强制浏览器永久使用 HTTPSplaintext
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 方法容易引发跨站追踪漏洞。
五、路径访问控制与目录防护
关闭目录浏览(AutoIndex)
禁止访问目录时列出全部文件,防止源码、备份文件泄露
Nginx:
autoindex off;
拦截敏感文件访问
禁止直接访问
.env、.git、.bak、.sql、web.config、php.ini、源码备份文件nginx
location ~* \.(git|bak|sql|env|ini|swp)$ { return 403; } location ~ /\. { return 403; } # 禁止访问隐藏文件 .htaccess .gitignore路径遍历防护
Web 应用层做好过滤,Web 服务器层面可配置规范化 URI,拦截
../畸形请求上传目录隔离
上传文件夹禁止解析脚本。例:上传目录不允许执行 php/jsp:
nginx
location ~* ^/upload/.*\.(php|jsp)$ { return 403; }
六、访问控制:IP 黑白名单、鉴权
内网管理后台限制源 IP
后台、监控面板、phpmyadmin:只允许公司办公网 IP 访问
nginx
location /admin/ { allow 192.168.1.0/24; deny all; }基础认证(内部管理系统)
使用 htpasswd 开启 Basic Auth,对外业务慎用(需搭配 HTTPS)
避免使用模糊正则、宽松匹配,防止路径绕过漏洞
七、WAF 与攻击防护方案
Web 服务器原生能力有限,多层防御:
轻量方案:Nginx +
ngx_modsecurity(ModSecurity WAF)内置 OWASP 核心规则集,拦截 SQL 注入、XSS、命令注入、恶意请求
云环境:前置云 WAF;集群环境使用 Traefik/Ingress 网关统一防护
规则建议:
拦截 URL 中出现
union select、<script>、eval(等特征拦截 User-Agent 恶意扫描器、爬虫
八、日志配置(溯源、等保审计必备)
开启访问日志 + 错误日志
记录字段:源 IP、请求时间、URL、状态码、Referer、UA、响应大小
日志持久化,定期轮转(logrotate),避免磁盘占满
日志禁止存放于网站根目录,防止被外部下载
建议推送日志至 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):
保护后端真实服务不暴露公网,后端只监听 127.0.0.1
正确传递真实 IP
X-Forwarded-For,不要信任不可控的 XFF 头部,只信任上游可信网关禁用代理转发危险头,防止头部注入攻击
设置代理超时,避免后端僵死连接
禁止直接转发任意 URI,做好路径过滤
十、持续运维安全策略(配置之外)
定期升级 Web 服务版本(Nginx/Apache、OpenSSL)修复组件漏洞
最小化插件、第三方模块,不用则卸载
使用自动化扫描工具:Nessus、AWVS、OpenVAS 定期扫描 Web 服务
配置变更审计:所有 nginx.conf 修改留存版本,上线前语法校验
nginx -t定期备份配置文件,禁止配置文件公网可访问
防火墙配合:云服务器安全组 /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;
}