使用 iptables 模拟 OpenVPN“非客户端到客户端”

使用 iptables 模拟 OpenVPN“非客户端到客户端”

我需要设置具有以下特征的多机 VPN:

  • 1 个中心(10.170.0.1),作为 VPN 的基础
  • 20 个用户(10.170.0.0/16)
  • 5 位管理员(10.171.0.0/16)

第一部分,即中心和 20 个用户,正在按我的需求运行。在此设置中,我需要:

  • 从集线器连接到每个用户
  • 从每个用户连接到集线器
  • 拒绝用户之间的连接。

普通的 OpenVPN 配置,不使用客户端到客户端。

现在我想添加 5 位具有一些连接超能力的管理员。在这个新设置中,我需要:

  • 从管理员连接到集线器。
  • 从每个管理员连接到每个用户(可能最终需要将某些管理员限制给某些用户)。
  • 拒绝用户与管理员之间的连接(除源自管理员的连接)。
  • 拒绝管理员之间的连接。

我认为要获得这种控制粒度,我需要client-to-client在 中启用server.conf。执行此操作时,我已经让用户(170.0.0/16)和管理员(10.171.0.0/16)进行对话。问题是我需要强制执行上述限制。我确信这应该是 iptables 问题,但我已经尝试了几个小时,我承认我无法让它工作。到目前为止,我iptables.conf看起来像这样:

*filter
:INPUT DROP [1000:900000]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -s 127.0.0.1 -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 389 -j ACCEPT
-A INPUT -p udp -m udp --dport 1194 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -p icmp -m icmp --icmp-type 13 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -p icmp -m icmp --icmp-type 30 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT 
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.170.0.0/16 -d 10.170.0.1 -j ACCEPT
-A FORWARD -s 10.170.0.0/16 -d 10.171.0.0/16 -j ACCEPT
-A FORWARD -s 10.170.0.0/16 -d 10.170.0.0/16 -j REJECT
-A FORWARD -j REJECT --reject-with icmp-port-unreachable 
-A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT 
COMMIT

我认为forwards问题出在同一个子网中...但甚至不知道从哪里开始。

答案1

这可能会变得相当复杂。OpenVPN 中的“客户端到客户端”选项只是简化了通过路由可以实现的操作,所以我实际上根本不会使用它,因为它会给你更多的控制权。
当客户端使用 OpenVPN 连接时,这实际上会创建一个具有自己的 4 个地址宽子网的隧道。最低的地址是网络地址,然后你有两个地址,最后是广播地址。因此,在这种情况下,启用从管理员到用户的流量流,而不是相反,这是一个简单的问题,只需制定如下规则:

-A 转发 -s 10.170.0.0/16 -d 10.171.0.0 -m 状态 --状态 新,已建立,相关 -j 接受
-A 转发 -s 10.171.0.0/16 -d 10.170.0.0 -j 接受

这确保了从用户返回管理员的任何流量只有在响应来自另一个方向的数据包时才会被接受。这样就解决了这个问题。您可能也需要一些路由规则,但通常它们应该由 OpenVPN 守护程序自动设置。由于您仍然没有使用“客户端到客户端”,管理员也无法看到彼此。
到目前为止一切顺利。现在棘手的部分是启用某些管理员之间的连接,但不启用其他管理员之间的连接。为此,您可能必须为连接到 VPN 的每台机器建立预定的地址分配,然后设置特定的防火墙规则以启用/禁用它们之间的流量(基于上述模板)。

相关内容