Centos IP Tables 通过多个链进行端口转发

Centos IP Tables 通过多个链进行端口转发

嘿 ServerFault 的朋友们;

AWS 向公众发布了其最新产品之一——网关负载均衡器,它允许我们使用设备做各种有趣的事情。

背景:

我正在尝试在 EC2 上对 Squid 实例进行 POC,以进行 DNS 过滤。我已经启动并运行了 AWS 组件,并且 EC2 实例已启动 geneve 接口,该接口应该在 Eth0 上接收流量。Geneve 在 udp/6081 上运行,并封装流量。所以我需要做的是让服务器解封装流量,在指定的目标端口上将其转发回自身,以便 Squid 可以以透明代理格式(最好在 docker 容器中)拦截(例如 tcp/80 或 tcp/443)。从那里,它通过连接到 ENI 的公共 IP 传出到互联网。

问题:

据我所知,为了使这种流动行为正确发生,我需要通过 IPTables 对数据包进行彻底处理。我对 IPTables 不够熟悉,无法了解其来龙去脉,因此我在这里提问。

据我了解,流量行为应该匹配目标端口 udp/6081,发送到 Eth0 的 IP 地址(假设它是 10.10.20.5/24)。

接口适配器应该处理解封装,然后我相信它需要将流量转发到本地环回地址,该地址应该使其离开服务器,然后击中输出链(如果它是环回,它会吗?)。

然后,本地环回应该具有预路由 NAT 规则,以将 tcp/80 转发到 tcp/3129、将 tcp/443 转发到 tcp/3130 等,以便 Squid 侦听器可以相应地处理它(根据规则允许/拒绝)。

我知道当服务器本身是目标时,你的 NAT 规则如下所示:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3129
iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 3130

只是前面的日内瓦隧道让我不确定如何启动规则的流程。

答案1

启用路由

sudo echo 1 > /proc/sys/net/ipv4/ip_forward

启用转发到环回接口

sudo sysctl -w net.ipv4.conf.eth0.route_localnet=1

将所有 HTTP 流量 (TCP 80) 重定向至 TCP 3129

sudo iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:3129

将所有 HTTPS 流量 (TCP 443) 重定向至 TCP 3130

sudo iptables -t nat -A OUTPUT -p tcp --dport 443 -j DNAT --to-destination 127.0.0.1:3130

启用 NAT(又名 Masqurade)

sudo iptables -t nat -A POSTROUTING -j MASQUERADE

相关内容