我正在使用 Squid 代理进行(DNS 过滤),我已在透明模式下在 GCP Cloud NAT 后面配置了 Squid 代理来拦截 HTTP 和 HTTPS Web 流量,我仅添加了以下规则来将 HTTP 和 HTTPS 流量重定向到 Squid。
iptables -t nat -A PREROUTING -s 0.0.0.0/0 -p tcp --dport 80 -j REDIRECT --to-port 3129
iptables -t nat -A PREROUTING -s 0.0.0.0/0 -p tcp --dport 443 -j REDIRECT --to-port 3130
但据我所知,Squid 是一个 Web 代理,仅处理 HTTP、HTTPS 和 FTP 请求,Squid 不理解 SMTP、UDP 和任何其他协议请求,但上述 iptables 规则仅适用于 HTTP 和 HTTPS,我的其余 SMTP 和 UDP 请求都被阻止了。据我所知,我们无法告诉 squid 处理 SMTP 和 UDP 请求,因此我只想在 squid 上处理 HTTP 和 HTTPS 流量,并且我还希望我的其余端口直接重定向到我的 GCP Cloud NAT。
有人能帮我写哪条 iptables 规则吗,只将端口 80、443 请求重定向到 Squid,其余端口请求我想绕过或直接重定向到我的 GCP Cloud NAT
交通流
私有虚拟机 -> Squid 代理 -> GCP Cloud NAT
答案1
要仅将端口 80 和 443 请求重定向到 Squid 并绕过所有其他请求,可以按如下方式修改现有的 iptables 规则:
在 Squid 中创建 ACL,以仅允许 HTTP 和 HTTPS 请求。这可以通过将以下行添加到 Squid 配置文件中来实现:
acl Safe_ports 端口 80443 http_access 允许 Safe_ports
修改 iptables 规则以仅将 HTTP 和 HTTPS 请求重定向到 Squid:
iptables -t nat -A PREROUTING -s 0.0.0.0/0 -p tcp --dport 80 -j REDIRECT --到端口 3129 iptables -t nat -A PREROUTING -s 0.0.0.0/0 -p tcp --dport 443 -j REDIRECT --到端口 3130
添加新的 iptables 规则以绕过所有其他请求并将其直接重定向到您的 GCP Cloud NAT。该规则应如下所示:
iptables -t nat -A PREROUTING -s 0.0.0.0/0 -p tcp -m multiport ! --dports 80,443 -j DNAT --to-destination [GCP Cloud NAT IP 地址]
此规则将匹配所有不在端口 80 或 443 上的 TCP 流量,并将其直接重定向到您的 GCP Cloud NAT。
确保将 [GCP Cloud NAT IP 地址] 调整为您的 Cloud NAT 实例的正确 IP 地址。
通过这些规则,只有 HTTP 和 HTTPS 流量将被重定向到 Squid 进行过滤,而所有其他流量将被绕过并直接重定向到您的 GCP Cloud NAT。