温馨提示×

如何在Apache中设置安全策略

小樊
32
2026-01-01 10:45:10
栏目: 编程语言

Apache安全策略设置清单

一 基础加固

  • 隐藏服务器标识:在全局或主配置中设置ServerTokens ProdServerSignature Off,减少通过版本信息暴露的攻击面。
  • 禁用目录浏览:对所有内容目录使用Options -Indexes,防止目录列表泄露。
  • 限制访问敏感文件:对**.htaccess、.htpasswd、.ini、.log、.sh、.inc、.bak**等敏感文件统一拒绝访问。
  • 以最小权限运行:确认运行账户为非root低权限用户(如www-data/apache),并为其设置不可登录Shell(/bin/false 或 /bin/nologin)
  • 文件与目录权限:网站根目录及子目录属主属组统一为运行账户,目录755、文件644;必要时仅对上传目录放宽写权限并隔离。
  • 禁用不必要的模块:关闭不使用的模块(如autoindex、info、status、userdir、cgi、imap、include等)以减少攻击面。
  • 网络与端口:仅开放80/443,通过系统防火墙放行必要端口(如 UFW 的Apache Full或 firewalld 放行 http/https)。

二 请求与协议安全

  • 强制HTTPS:将 HTTP→HTTPS 永久重定向,统一在 443 提供服务。
  • 协议与加密套件:仅启用TLSv1.2/TLSv1.3,使用强套件(如ECDHE+AESGCM、ECDHE+CHACHA20),关闭SSLCompressionSSLSessionTickets
  • 证书与自动化签发:使用Let’s Encryptcertbot自动申请与续期证书。
  • 请求限制防DoS:设置Timeout、KeepAliveTimeout;限制LimitRequestBody、LimitRequestFields、LimitRequestFieldSize、LimitRequestLine;启用mod_reqtimeout设置读取超时与最低速率。
  • 速率与阻断:部署mod_evasive识别并临时封禁高频请求来源。
  • 方法限制:对不需要的PUT、DELETE等方法通过Limit/LimitExcept禁用。

三 访问控制与请求过滤

  • 目录访问控制:在**中使用Require all granted/denied精细控制来源;生产环境建议AllowOverride None**以提升性能并降低.htaccess引入的风险。
  • 外链与敏感路径:限制访问Web根目录之外的路径,避免泄露系统文件。
  • 安全响应头:启用并统一设置关键安全头,如X-Frame-Options、X-XSS-Protection、X-Content-Type-Options、Referrer-Policy、Strict-Transport-Security、Content-Security-Policy
  • Web应用防火墙:部署ModSecurity并启用基础规则集,防御SQL注入、XSS、文件上传等常见攻击。
  • 语言运行时防护:如运行PHP,在 php.ini 中设置expose_php Off,并结合open_basedir等机制限制文件访问范围。

四 日志监控与维护

  • 访问与错误日志:确保访问日志与错误日志开启并落盘,便于审计与溯源。
  • 安全日志与级别:自定义安全日志格式,将LogLevel设为warn或更高以捕获异常。
  • 实时监控:使用tail -f或集中化日志系统(如 rsyslog/ELK)对异常状态码、可疑UA、暴力请求等进行告警。
  • 持续更新与备份:定期更新系统与Apache及相关模块,定期备份配置与数据并建立回滚预案。

五 快速配置示例

  • 隐藏版本与禁用目录浏览
ServerTokens Prod
ServerSignature Off

<Directory /var/www/html>
    Options -Indexes +FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

<FilesMatch "\.(htaccess|htpasswd|ini|log|sh|inc|bak)$">
    Require all denied
</FilesMatch>
  • 安全响应头与HSTS
<IfModule mod_headers.c>
    Header always set X-Frame-Options "SAMEORIGIN"
    Header always set X-XSS-Protection "1; mode=block"
    Header always set X-Content-Type-Options "nosniff"
    Header always set Referrer-Policy "no-referrer-when-downgrade"
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
    Header always set Content-Security-Policy "default-src 'self'; script-src 'self'"
</IfModule>
  • 强制HTTPS与TLS强化
<VirtualHost *:80>
    ServerName example.com
    Redirect permanent / https://example.com/
</VirtualHost>

<VirtualHost *:443>
    ServerName example.com
    SSLEngine on
    SSLCertificateFile /path/to/cert.crt
    SSLCertificateKeyFile /path/to/privkey.key

    SSLProtocol -all +TLSv1.2 +TLSv1.3
    SSLCipherSuite ECDHE+AESGCM:ECDHE+CHACHA20:DHE+AESGCM:DHE+CHACHA20:!aNULL:!MD5:!DSS
    SSLHonorCipherOrder on
    SSLCompression off
    SSLSessionTickets off
</VirtualHost>
  • 请求限制与超时
Timeout 60
KeepAliveTimeout 15

LimitRequestBody 10485760   # 10MB
LimitRequestFields 40
LimitRequestFieldSize 4094
LimitRequestLine 4094

<IfModule reqtimeout_module>
    RequestReadTimeout header=5-40,MinRate=500 body=20,MinRate=500
</IfModule>
  • 速率限制与WAF
# mod_evasive 示例
<IfModule mod_evasive24.c>
    DOSHashTableSize 2048
    DOSPageCount 2
    DOSPageInterval 1
    DOSSiteCount 50
    DOSSiteInterval 1
    DOSBlockingPeriod 60
</IfModule>

# ModSecurity 建议最小启用
<IfModule mod_security2.c>
    SecRuleEngine On
    SecRequestBodyAccess On
</IfModule>
  • 说明:以上为通用示例,需结合站点实际功能(如API、上传、静态资源)调整CSP、方法、大小限制等参数,变更前在测试环境验证并备份配置。

0