怎样在Apache中配置防火墙
小樊
43
2025-12-12 20:20:09
在 Apache 环境中配置防火墙的正确做法
一、先明确防火墙与 Web 服务器的职责
- 防火墙负责在网络层/传输层放行或阻断端口与来源,例如仅允许访问 TCP 80/443。
- Apache 负责应用层访问控制(如基于 IP、路径、方法的限制),两者配合才能既“通得上”又“控得住”。
二、在主流系统上放行 Apache 端口
- RHEL/CentOS 7/8(firewalld)
- 启动并持久化防火墙
sudo systemctl start firewalld
sudo systemctl enable firewalld
- 放行 HTTP/HTTPS
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
- 按需限制来源 IP(示例仅放行 192.168.1.100)
sudo firewall-cmd --permanent --zone=public --add-rich-rule=‘rule family=“ipv4” source address=“192.168.1.100” accept’
sudo firewall-cmd --reload
- 验证
sudo firewall-cmd --list-all
- Ubuntu/Debian(ufw)
- 允许 Apache 常用端口组合
sudo ufw allow ‘Apache Full’ # 同时放行 80/tcp 与 443/tcp
- 按需仅放行 80
sudo ufw allow 80/tcp
- 验证
sudo ufw status verbose
- Windows Server(高级安全 Windows 防火墙)
- 打开“高级安全 Windows 防火墙”→“入站规则”→“新建规则”→选择“端口”。
- 指定特定端口:80,443(如有需要可加 8080)。
- 选择“允许连接”,完成向导并命名规则。
- 用浏览器访问服务器 http://服务器IP/ 验证连通性。
三、与 SELinux 或端口变更相关的配合设置
- 若系统启用 SELinux 且 Apache 需要发起对外连接(如反向代理到后端服务),放行策略:
sudo setsebool -P httpd_can_network_connect 1
- 若修改了 Apache 监听端口(例如改为 8080),需同步在防火墙放行对应端口:
sudo firewall-cmd --permanent --zone=public --add-port=8080/tcp
sudo firewall-cmd --reload
并在 Apache 配置中更新 Listen 80/443/8080 等指令后重载服务。
四、验证与常见问题排查
- 连通性验证
- 本机:curl http://127.0.0.1 或 http://localhost
- 远程:浏览器访问 http://服务器IP/ 或 curl http://服务器IP
- 防火墙规则核验
- firewalld:sudo firewall-cmd --list-all(应看到 http/https 或已放行端口)
- ufw:sudo ufw status verbose
- 服务状态与配置语法
- RHEL/CentOS:sudo systemctl status httpd;sudo httpd -t
- Ubuntu/Debian:sudo systemctl status apache2;sudo apache2ctl configtest
- 若外部仍无法访问,优先检查:云厂商安全组/本机防火墙是否放行 80/443、Apache 是否在目标端口监听、以及站点配置是否绑定到正确的 Listen 与 VirtualHost。
五、进阶 应用层防护与访问控制
- 在系统防火墙放行 80/443 的基础上,可用 Apache 访问控制 做细粒度限制(示例仅允许内网网段访问管理路径):
<Directory “/var/www/html/admin”>
Require ip 192.168.1.0/24
- 如需更强的 Web 攻击防护,可部署 ModSecurity WAF 并结合 OWASP CRS 规则集;在 Ubuntu 上可安装并启用模块后,使用 ufw 放行 Apache 端口,再按需配置规则引擎与日志审计。