我正在配置具有以下方案的 DMZ:
Internet - Server A - Security Appliance - Server B - Intranet
在这个 DMZ 中,我需要一个代理服务器,用于从 Intranet 到 Internet 的 http(s) 连接。问题是,所有流量都应由安全设备扫描。为此,我必须终止服务器 B 上的 SSL 连接,将其作为纯 http 通过安全设备代理到服务器 A,然后进一步作为 https 进入 Internet。然后,客户端和服务器 B 以及目标服务器和服务器 A 之间将持续加密。服务器 A 和服务器 B 之间的通信未加密。我知道安全风险,并且客户端将看到有关服务器 B 证书的未知 CA 的一些警告。
作为软件,我想在服务器 A 和服务器 B 上使用 Apache Web 服务器。
第一步,我尝试配置服务器 B,使其作为 SSL 加密的端点。因此,它必须与客户端建立加密(响应 HTTP CONNECT)。
Listen 8443
<VirtualHost *:8443>
ProxyRequests On
ProxyPreserveHost On
AllowCONNECT 443
# SSL
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel debug
SSLProxyEngine on
SSLProxyMachineCertificateFile /etc/pki/tls/certs/localhost_private_public.crt
<Proxy *>
Order deny,allow
Deny from all
Allow from 192.168.0.0/22
</Proxy>
</VirtualHost>
使用此代理,仅传递 CONNECT 请求,并在客户端和目标之间建立加密连接。遗憾的是,无法配置 mod_proxy_connect 来解密 SSL 连接。是否有可能使用 Apache 实现这种代理?
答案1
您尝试实施的是官方 SSL MITM 代理(“官方”而不是“攻击者”)。我认为 Apache Httpd 没有能力做到这一点(并动态重新生成具有正确身份的证书)。
有产品可以实现这一点。快速搜索可找到以下链接:
答案2
我得出结论,使用 mod_rewrite 和充当反向代理的虚拟主机,这是可行的。连接进入正向代理并将 URL 重写为虚拟主机(在服务器 B 上)+将原始 URL 写入 HTTP 标头。虚拟主机充当 SSL 端点和反向代理,并将未加密的请求转发到服务器 A(通过安全设备)。服务器 A 将目标 URL 重写为原始 URL 并转发给它。我将在接下来的几天尝试一下,并告诉您它是否有效。如果不行,我将讨论为此使用 squid 和 sslbump。
感谢您迄今为止的回答!