Apache安全模块配置详解:CentOS与Ubuntu实战指南
配置Apache安全模块的核心思路并不复杂:安装模块→启用模块→调整规则→加固周边。虽然流程清晰,但每个环节都需要精确操作。下面直接提供可执行的步骤,按顺序执行即可。

一、基础准备:更新系统与安装必要模块
CentOS系统
- 更新系统及软件包:
sudo yum update -y - 安装核心安全模块:
- mod_security:这是一款Web应用防火墙(WAF),可有效拦截SQL注入、跨站脚本(XSS)等常见网络攻击;
- mod_evasive:专防DDoS和暴力破解的模块,能够限制高频异常请求。
sudo yum install mod_security mod_evasive -y
Ubuntu系统
- 更新系统及软件包:
sudo apt update && sudo apt upgrade -y - 安装核心安全模块:
sudo apt install apache2 libapache2-mod-security2 libapache2-mod-evasive -y
二、启用Apache安全模块
CentOS系统
编辑主配置文件(/etc/httpd/conf/httpd.conf),确保下面两行未被注释,或者直接添加:
LoadModule security2_module modules/mod_security2.so
LoadModule evasive20_module modules/mod_evasive20.so
Ubuntu系统
使用a2enmod命令启用模块,Ubuntu的模块管理方式能自动处理依赖关系,操作更为便捷:
sudo a2enmod security2 # 启用mod_security
sudo a2enmod evasive # 启用mod_evasive
三、配置mod_security(Web应用防火墙)
mod_security的核心配置文件路径:
- CentOS:
/etc/httpd/conf.d/security2.conf - Ubuntu:
/etc/apache2/conf-a vailable/security2.conf(记得执行sudo a2enconf security2来启用配置)
基础配置示例
# 开启规则引擎(On=主动拦截,DetectionOnly=仅检测不拦截)
SecRuleEngine On
# 允许分析请求体(例如表单提交的数据)
SecRequestBodyAccess On
# 允许记录响应体(用于安全审计)
SecResponseBodyAccess On
# 审计日志存放路径(记录被拦截的请求详细信息)
SecAuditLog /var/log/httpd/security_audit.log # CentOS
SecAuditLog /var/log/modsec_audit.log # Ubuntu
# 日志包含的信息字段(如请求头、响应状态码等)
SecAuditLogParts ABIJDEFHZ
# 临时数据存储目录(需确保目录可写)
SecDataDir /var/cache/mod_security # CentOS
SecDataDir /var/lib/modsecurity # Ubuntu
高级配置(可选)
- 集成OWASP CRS规则集,能极大提升WAF的防护能力:
# 下载CRS(以v3.4.0版本为例) wget https://github.com/coreruleset/coreruleset/archive/v3.4.0.tar.gz tar -xzf v3.4.0.tar.gz mv coreruleset-3.4.0/rules /etc/apache2/modsecurity.d/owasp-crs/ # 引入CRS配置 Include /etc/apache2/modsecurity.d/owasp-crs/crs-setup.conf Include /etc/apache2/modsecurity.d/owasp-crs/rules/*.conf - 若出现正常请求被误拦截的情况,可先将
SecRuleEngine设为DetectionOnly,仅记录而不拦截,待调试完成后再恢复拦截模式。
四、配置mod_evasive(防DDoS/暴力破解)
mod_evasive的配置文件路径:
- CentOS:
/etc/httpd/conf.d/evasive.conf - Ubuntu:
/etc/apache2/mods-a vailable/evasive.conf
基础配置示例
# 哈希表大小(用于存储IP请求记录)
DOSHashTableSize 3097
# 单IP单个页面1秒内请求超过2次则触发拦截
DOSPageCount 2
DOSPageInterval 1
# 单IP全站1秒内请求超过50次则触发拦截
DOSSiteCount 50
DOSSiteInterval 1
# 拦截时长(秒)
DOSBlockingPeriod 10
五、加固SSL/TLS通信(可选但强烈推荐)
通过Let’s Encrypt免费获取SSL证书,为HTTP流量增加加密保护:
# 安装Certbot(CentOS/Ubuntu通用方法)
sudo yum install certbot python2-certbot-apache -y # CentOS
sudo apt install certbot python3-certbot-apache -y # Ubuntu
# 获取证书并自动配置Apache
sudo certbot --apache -d yourdomain.com -d www.yourdomain.com
证书到期前会收到自动续期提醒,手动续期也很简单,执行sudo certbot renew即可。
六、配置HTTP安全头(防点击劫持、XSS等)
编辑Apache安全配置文件(Ubuntu为/etc/apache2/conf-a vailable/security.conf,CentOS直接编辑/etc/httpd/conf/httpd.conf),添加以下安全头:
# 防止浏览器进行MIME类型嗅探
Header always set X-Content-Type-Options "nosniff"
# 防止点击劫持(仅允许同源iframe嵌入)
Header always set X-Frame-Options "SAMEORIGIN"
# 启用XSS防护(拦截反射型XSS攻击)
Header always set X-XSS-Protection "1; mode=block"
# 控制Referer信息泄漏范围
Header always set Referrer-Policy "no-referrer-when-downgrade"
然后启用配置并重启服务:
sudo a2enconf security # Ubuntu下启用安全配置文件
sudo systemctl restart apache2
七、配置访问控制
1. 基本目录权限
编辑虚拟主机配置文件(例如/etc/apache2/sites-a vailable/yourdomain.conf),限制目录访问:
Options Indexes FollowSymLinks
AllowOverride All
Require all granted # 生产环境建议缩小允许访问的IP范围
2. 敏感目录认证
对/admin等敏感目录启用Basic认证:
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
创建密码文件(首次使用-c参数创建,后续添加用户时不加-c):
sudo htpasswd -c /etc/apache2/.htpasswd admin
3. IP黑白名单
- 白名单:仅允许指定IP访问,例如运维IP:
Require ip 192.168.1.100 192.168.1.101 - 黑名单:禁止恶意IP访问:
Require not ip 192.168.1.200
八、重启Apache并验证配置
所有配置完成后,重启Apache使改动生效:
# CentOS
sudo systemctl restart httpd
# Ubuntu
sudo systemctl restart apache2
验证mod_security是否运行
查看审计日志,正常访问时会生成相应记录:
# CentOS
tail -f /var/log/httpd/security_audit.log
# Ubuntu
tail -f /var/log/modsec_audit.log
验证mod_evasive是否生效
使用ab(Apache Benchmark)模拟高频请求,若被拦截则会返回403状态码:
ab -n 100 -c 10 https://yourdomain.com/ # 在10秒内发送100个请求(并发10)
九、定期维护
- 更新模块与系统:定期执行
sudo yum update(CentOS)或sudo apt update && sudo apt upgrade(Ubuntu),及时修复已知安全漏洞; - 备份配置文件:
# CentOS sudo tar -czvf /backup/apache2_backup.tar.gz /etc/httpd # Ubuntu sudo tar -czvf /backup/apache2_backup.tar.gz /etc/apache2 - 监控日志:借助
fail2ban等工具持续关注security_audit.log和error.log,及时发现并处理异常请求。
严格按照上述流程操作,Apache服务器的安全性将得到显著提升,能够有效防御SQL注入、XSS、DDoS等常见攻击。当然,实际业务场景各有不同,规则需要根据具体情况进行微调——例如适当放宽敏感目录的访问限制,避免误伤正常用户,这才是最合理的策略。
