只允许IPSEC输出stream量到一个端口(使用IPTABLE?)

问题:

我有一种情况,IPSEC服务器和目标服务器(称为http服务器)碰巧是同一台机器,我只需要允许来自IPSEC服务器的stream量访问我的应用程序正在运行的端口,并阻止其他人在那个港口

更多细节:

  • 安装程序如下所示:(主机A)<—- IPSEC VPN TUNNEL – >(主机B(Linux),其中应用程序在端口XXXX上运行)。
  • 没有涉及到额外的IPSEC网关或防火墙。
  • 主机B具有公共IP地址(静态)。
  • 主机A发起连接并build立VPN隧道。
  • 当我在ipsec解密之后logging到端口XXXX的stream量时,它看起来像任何正常的数据包,并且src被设置为“主机A的ip地址”并且dst被设置为“主机B的ip地址”,并且由于数据包被定位到主机B,在ipsec处理之后,POSTROUTING规则不适用于它。

现在,我已经在iptables中添加了规则来接受端口XXXX上的所有stream量:

-A INPUT -p tcp –dport XXXX -s 0.0.0.0/0 -j ACCEPT

当这件事情发生时,XXXX港口向世界开放,这是危险的。

任何想法如何通过ipsecconfiguration或iptables规则或以任何其他方式来实现目标,只有来自ipsec端点的stream量才能访问XXXX?

在我心中几乎没有想法:

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

我已经尝试了解决scheme@ 与iptables,匹配数据包通过IPSEC隧道到达,但它不工作,因为我想上述政策适用于数据包到达IPSEC,而不是离开IPSEC的数据包?

让我知道如果我错过了任何细节或任何额外的信息,你需要任何帮助/build议将不胜感激。

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

如果你的RW客户端连接了不同的IP地址,那么可以使用ppp的插件,比如ip-up和ip-down脚本,你可以用它来允许或禁止某些IP地址的某些端口。

感谢您的build议。 事实certificate,这与IPSEC VPN如何在iOS(苹果)设备上工作有关。

在iOS设备上,打开ipsec VPN时,在路由表中自动添加规则,将IPSEC服务器/对等方通信直接发送到网关以避免环路(数据包再次encryption),其余通信首先发送到安全通道得到encryption,然后到ipsec服务器。

在我的情况下,IPSEC服务器和目标服务器(目标服务器)恰好是同一台机器(parsing为相同的IP地址),所以当stream量发送到目标服务器(端口XXXX),而不是获取encryption在IPSEC隧道中,由于特殊的规则而直接发送到服务器,没有被封装在IPsec报文中。 所以当这些数据包到达服务器时,它不会被识别为ipsec数据包,这是问题。

由于我无法避免iOS客户端将stream量发送到端口XXXX(尽pipe没有ipsec封装),我必须find一种方法,让只有该设备才能访问端口XXXX而不是全世界。 所以我最终做的是在ipsec服务器上拥有自己的ipsec updown脚本,dynamic地添加一条INPUT链规则,允许从已build立的客户端的IP地址到vpn上的端口XXXX的连接,并删除vpn disconnect上的规则。 这样只有VPN连接的客户端才能访问端口XXXX。