仅允许 IPSEC 传出流量到端口(使用 IPTABLE?)

仅允许 IPSEC 传出流量到端口(使用 IPTABLE?)

问题:

我遇到过这样一种情况,IPSEC 服务器和目标服务器(比如 http 服务器)恰好是同一台机器,我需要只允许通过 IPSEC 服务器的流量访问运行我的应用程序的端口,并阻止该端口上的所有其他服务器。

更多细节:

  • 设置看起来如下:(主机 A)<----IPSEC VPN TUNNEL-->(主机 B(Linux)应用程序在端口 XXXX 上运行)。
  • 不涉及额外的 IPSEC 网关或防火墙。
  • 主机 B 具有公共 IP 地址(静态)。
  • 主机 A 发起连接并建立 VPN 隧道。
  • 当我记录 ipsec 解密后到达端口 XXXX 的流量时,它看起来像任何正常数据包,并且 src 设置为“主机 A 的 ip 地址”,dst 设置为“主机 B 的 ip 地址”,并且由于该数据包的目标是主机 B,因此在 ipsec 处理后,POSTROUTING 规则将不适用于它。

目前,我在 iptables 中添加了规则以接受端口 XXXX 上的所有流量:

-A 输入-p tcp --dport XXXX -s 0.0.0.0/0 -j 接受

虽然这能让事情进展顺利,但 XXXX 港口已向世界开放,这很危险。

您知道如何通过 ipsec 配置或 iptables 规则或任何其他方式来实现只有来自 ipsec 端点的流量才能访问 XXXX 的目标吗?

我心里有几个想法:

  • 是否可以识别离开 IPSEC 端点的 TCP 数据包,并在 iptables 中制定规则以仅允许这些数据包到达端口 XXXX?
  • 是否可以使用一些 iptable/ipsec 配置来在 ipsec 处理后跳过 INPUT 规则?这样,我可以使用 iptable 规则将所有数据包丢弃到 XXXX 端口,并且来自 ipsec 的数据包不会受到影响。
  • 是否可以在主机 B 上创建一个虚拟接口并通过该接口路由 IPSEC 流量,并仅允许从该虚拟接口访问端口 XXXX?
  • 最糟糕的情况是,我最终会让 ipsec 服务器(主机 B)和应用程序服务器(主机 C)运行在不同的机器上,并且仅允许从主机 B 到主机 C 上的端口 XXXX 的流量。

我已经尝试过解决方案@使用 iptables,匹配通过 IPSEC 隧道到达的数据包但它不起作用,因为我猜测提到的策略适用于到达 IPSEC 的数据包,而不是离开 IPSEC 的数据包?

如果我遗漏了任何细节或您需要的任何其他信息,请告诉我,我们将非常感谢您的任何帮助/建议。

答案1

感谢您的建议。结果发现这与 IPSEC VPN 在 iOS(苹果)设备上的工作方式有关。

在 iOS 设备上,打开 ipsec VPN 后,路由表中会自动添加规则,将 IPSEC 服务器/对等流量直接发送到网关以避免循环(数据包再次加密),其余流量首先发送到 ipsec 隧道进行加密,然后再发送到 ipsec 服务器。

在我的例子中,IPSEC 服务器和目标服务器(流量的目标服务器)恰好是同一台机器(解析为相同的 IP 地址),因此当流量发送到目标服务器(端口 XXXX)时,它不是在 IPSEC 隧道中加密,而是根据特殊规则直接发送到服务器,而没有封装在 ipsec 数据包中。因此,当这些数据包到达服务器时,它不会被识别为 ipsec 数据包,这就是问题所在。

由于我无法避免 iOS 客户端将流量发送到端口 XXXX(尽管没有 ipsec 封装),我不得不找到一种方法,只让该设备可以访问端口 XXXX,而不是让全世界都可以访问。所以我最终在 ipsec 服务器上使用自己的 ipsec updown 脚本,该脚本动态添加 INPUT 链规则,以允许来自已建立客户端 IP 地址的流量在 VPN 连接时发送到端口 XXXX,并在 VPN 断开连接时删除该规则。这样,只有 VPN 连接的客户端才能访问端口 XXXX。

答案2

IPSec 强制保护来自另一端子网的任何流量。例如,如果您使用 openswan,则右子网(有时是左子网)将指示来自另一端的任何通信,以便您只允许来自这些子网的流量。

如果您有从不同 IP 连接的 RW 客户端,则可以使用 ppp 插件,例如 ip-up 和 ip-down 脚本,您可以使用它们来允许或禁止某些 IP 的某些端口。

答案3

您需要将 IPsec 策略附加到套接字(较难)或全局。

IPsec 在这里复制了部分防火墙逻辑,它允许您将数据包与 IP 地址和端口进行匹配,并查找所需的 IPsec 策略。

对于正常的 VPN 设置,策略通常适用于“从该子网到该子网的所有流量”,但它们可以更细粒度,例如

require all traffic to my IP address port 80 from that other IP address to be encrypted
deny all other traffic to my IP address port 80

有可能存在没有安全关联的策略,在这种情况下内核将咨询 IKE 守护进程来获取一个策略。

如果客户端更改了 IP 地址,则可以从 IKE 守护进程生成“需要”策略,并且仅静态配置“拒绝”策略,其优先级低于生成的规则。

相关内容