Apache正向代理需同时配置监听端口和防火墙规则,缺一不可;须启用mod_proxy_connect模块并配置AllowCONNECT指令支持HTTPS隧道,且通过<Proxy>段与防火墙双重限制IP访问。

Apache 正向代理本身不处理网络层访问控制,防火墙(如 firewalld、iptables 或 Windows 防火墙)必须配合配置,否则客户端根本连不到代理端口。关键不是“先配 Apache 再配防火墙”,而是两者缺一不可、协同生效。
确认 Apache 监听端口并开放防火墙
Apache 默认不监听代理端口,需显式配置 Listen 指令;而防火墙默认会拦截所有未声明的入站连接。
- 在
/etc/httpd/conf/httpd.conf(CentOS/RHEL)或/etc/apache2/apache2.conf(Ubuntu/Debian)末尾添加:Listen 3128
(可换为任意空闲端口,如 8080、8756,避免与 Web 服务冲突) - 重启 Apache:
sudo systemctl restart httpd(CentOS)或sudo systemctl restart apache2(Ubuntu) - 开放对应端口(以 firewalld 为例):
sudo firewall-cmd --permanent --add-port=3128/tcpsudo firewall-cmd --reload - 验证端口是否监听:
sudo ss -tlnp | grep :3128(应看到 httpd/apache2 进程)
按网段限制访问,避免公网暴露
正向代理一旦开放,若不限制来源 IP,极易被滥用(如爬虫中转、恶意请求转发)。Apache 的 <Proxy> 段和防火墙规则应双重收敛。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 在 Apache 配置中启用访问控制(推荐放在
<IfModule mod_proxy.c>块内):<Proxy *><br> Require ip 192.168.10.0/24<br> Require ip 10.0.5.100<br> </Proxy>
(只允许指定内网段或单个管理 IP 使用代理) - 防火墙进一步收紧(可选但强烈建议):
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.10.0/24" port port="3128" protocol="tcp" accept'sudo firewall-cmd --reload - 效果:即使 Apache 配置失误,防火墙也会拦截非授权源的连接请求
Windows 环境下的等效操作
在 Windows 上用 Apache(如 Apache Haus),防火墙配置更直观但容易遗漏。
- 修改
httpd.conf:
取消注释:LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_http_module modules/mod_proxy_http.so
添加:Listen 8098ProxyRequests On - 在 Windows 防火墙中新建「入站规则」:
协议和端口 → TCP → 特定本地端口:8098
作用域 → 仅允许来自特定子网(如 172.16.0.0/16)
配置文件 → 应用到所有配置文件(域、专用、公用) - 检查 Apache 日志:
若客户端提示“Connection refused”,优先查防火墙是否放行;
若提示“403 Forbidden”,则 Apache 的<Proxy>规则拒绝了该 IP
HTTPS 代理需额外注意 CONNECT 方法
普通 HTTP 代理走 mod_proxy_http,但 HTTPS 网站(如 https://example.com)需建立隧道,依赖 mod_proxy_connect 和防火墙对 CONNECT 请求的支持。
- 启用模块:
sudo a2enmod proxy_connect(Debian/Ubuntu)
或取消httpd.conf中LoadModule proxy_connect_module注释(RHEL/Windows) - 确保
ProxyRequests On已开启 ——mod_proxy_connect仅在正向代理模式下生效 - 防火墙无需特殊设置(仍是 TCP 端口),但 Apache 必须明确允许 CONNECT:
<Proxy *><br> Require ip 192.168.10.0/24<br> # 允许 CONNECT 方法用于 HTTPS<br> AllowCONNECT 443 8443<br> </Proxy>

















