Apache漏洞检测与防护配置实操指南
为什么你需要关注Apache漏洞检测与防护
Apache作为最流行的Web服务器之一,公开漏洞列表(CVE)不断更新,从拒绝服务到远程代码执行,风险真实存在。
零基础用户往往不知道从哪里入手,本文给你一套直接能跑的流程:先检测现有漏洞,再配置防护规则,最后验证效果。
整个过程只需SSH登录和几个命令,适合刚接手服务器的新手。
准备阶段:检查环境与安装必要工具
当前操作需要一台运行Apache的Linux服务器(本文以CentOS 7/Ubuntu 22.04为例)。
请确保拥有root或sudo权限。
第一步:确认Apache版本
httpd -v # CentOS系
aapache2 -v # Ubuntu/Debian
如果返回Apache/2.4.6这类数字,说明已安装。
继续检查是否启用mod_security,执行:
apachectl -M | grep security
没有输出说明未安装,下一步安装工具。
第二步:安装扫描工具Nikto和检测脚本
# Ubuntu
apt update && apt install nikto -y
# CentOS
yum install -y epel-release && yum install nikto -y
Nikto是开源Web服务器扫描器,能检测已知漏洞和错误配置。
第三步:安装ModSecurity(WAF核心)
Ubuntu:
apt install libapache2-mod-security2 -y
a2enmod security2
systemctl restart apache2
CentOS:
yum install mod_security -y
systemctl restart httpd
安装后执行apachectl -M | grep security确认模块已启用。
分步操作:从检测到配置防护
1. 使用Nikto扫描本地Apache,找出已知漏洞
在服务器本地运行(可替换为目标域名):
nikto -h http://localhost -ssl -output report.html
-ssl对HTTPS有效,-output生成HTML报告。
重点关注OSVDB编号和CVE条目。
例如:
+ OSVDB-3092: /icons/README: Apache default file found.
+ Server leaks inodes via ETags, header found...
这些是常见风险点。
如果看到mod_status信息泄露或目录列表开启,后续需要关闭。
2. 配置ModSecurity并启用OWASP核心规则集
ModSecurity默认只记录,不拦截。
需要复制配置文件并激活规则:
cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
编辑新文件,将SecRuleEngine DetectionOnly改为SecRuleEngine On(生产环境建议先DetectionOnly观察两天)。
然后下载OWASP核心规则集(CRS)——这是社区维护的通用规则:
cd /usr/local/src
wget https://github.com/coreruleset/coreruleset/archive/v4.0.0.tar.gz
tar xzf v4.0.0.tar.gz
mv coreruleset-4.0.0 /etc/modsecurity/coreruleset
在Apache主配置或虚拟主机配置中添加包含:
IncludeOptional /etc/modsecurity/coreruleset/crs-setup.conf.example
IncludeOptional /etc/modsecurity/coreruleset/rules/*.conf
重启Apache后,ModSecurity已处于主动拦截状态。
3. 手动加固安全响应头与禁用危险功能
通过配置文件关闭目录列表和Server令牌泄露。
在/etc/httpd/conf/httpd.conf(或对应站点配置)中添加:
Options -Indexes # 禁用目录浏览
ServerTokens Prod
ServerSignature Off
还可以用ModSecurity添加安全头:
SecAction \
"id:900500,\
phase:1,\
nolog,\
pass,\
t:none,\
setenv:!UNIQUE_ID,\
setenv:MODSEC_ON=1"
SecRule RESOURCE_BODY "@rx (?:malicious|exploit)" \
"id:100000,phase:2,t:lowercase,deny,msg:'Malicious keyword detected'"
以上仅为示例,实际更推荐使用OWASP CRS规则。
常见避坑与高频问题解答
Q1:开启ModSecurity后网站直接503?
A:规则误杀。建议先将SecRuleEngine设为DetectionOnly,查看Apache错误日志(/var/log/httpd/error_log),找到被拦截的请求ID,再调整对应规则(例如排除某些URI或User-Agent)。
Q2:Nikto扫出大量信息,但不知道哪些真正危险?
A:重点关注CVE编号和HIGH级别告警。默认文件(如/icons/)风险较低,建议手动删除或移除。OSVDB-3092可忽略,但ServerTokens Full可改为Prod。
Q3:配置后性能下降明显?
A:ModSecurity确实消耗CPU,如果并发高,可以只记录不拦截(DetectionOnly),或使用SecRuleEngine Off关闭不必要规则。生产环境建议先压测后上线。
验证防护效果
执行完以上步骤后,验证两项:
- 获取安全头
curl -I http://localhost | grep -i server
应返回Server: Apache(无版本号)。
再用漏洞模拟工具测试:
curl -X POST http://localhost/test -d ""
如果返回403或错误页,说明ModSecurity拦截了XSS攻击。
- 再次扫描
运行Nikto比较前后报告,预期/icons/等目录项不再出现,Server头信息不再泄露。
如果你按照本文步骤操作,Apache的安全性已经提高到基础防护水平。
建议每周执行一次Nikto扫描,并关注ModSecurity官方CRS更新。
遇到生产环境异常时,优先回看错误日志和本文避坑部分。