iptables 仅允许通过 VPN 进行 FTP

iptables 仅允许通过 VPN 进行 FTP

我已经定义了这个 iptables 链:

iptables -N VPNonly  # create a new chain "VPNonly"
iptables -A VPNonly -i lo -j ACCEPT  # allow localhost
iptables -A VPNonly --src xxx.xxx.xxx.xxx -j ACCEPT  # allow Server IP
iptables -A VPNonly --src 192.168.223.0/24 -j ACCEPT # allow VPN
iptables -A VPNonly --src 10.8.0.0/24 -j ACCEPT      # allow VPN
iptables -A VPNonly --src 10.8.1.0/24 -j ACCEPT      # allow VPN
iptables -A VPNonly -j DROP  # drop everyone else
iptables -I INPUT -m tcp -p tcp --dport 21 -j VPNonly  # use chain VPNonly on port 21

我通过 OPENVPN 连接,服务器的点对点地址是 192.168.223.1,并获取相应的 IP,比如说 192.168.223.6

我还有一条规则,允许通过 nat 通过 VPN 访问网络,如下所示:

iptables -t nat -A POSTROUTING -s 192.168.223.0/24 -o venet0 -j MASQUERADE

现在,如果我通过 192.168.223.1 连接,则连接到 VPN 时对服务器的 FTP 访问可以正常工作,但通过服务器 IP 或域名则无法访问。

如果我通过以下方式暂时取消对端口 21 的限制:

iptables -D INPUT -m tcp -p tcp --dport 21 -j VPNonly 

通过 VPN 连接时,所有 IP 和域名均可用于 FTP。

问题:我如何修改我的 iptables 链以允许通过 VPN 进行连接(可能使用 nat),其中我让 FTP 客户端连接到服务器 IP / 域名而不是 VPN 上的服务器 IP?

笔记:对于外界来说,我的 IP 是服务器的 IP xxx.xxx.xxx.xxx,然后通过 nat 进行转换。我本来希望服务器知道它正在与自己对话,并且流量会通过环回接口 127.0.0.1 / localhost,但我不确定,因为我的规则链仍然将我拒之门外。

笔记2:通过 SSH 连接到服务器并在 shell 上使用 FTP 可以连接到服务器的 ip xxx.xxx.xxx.xxx / 域名 / 127.0.0.1 / localhost。仅当我通过 VPN 连接并且我的 IP 似乎是服务器的 IP 时,由于 nat 规则,我的 iptables 才会阻止我连接到端口 21。

答案1

  1. 所有 FTP 服务器都有两种模式:被动模式和主动模式。

  2. 当您处于主动模式时,这意味着您的客户端发起的所有连接都将接收高端口范围 [1024-65535] 以从您的服务器传输数据。

  3. 当您处于被动模式时,您必须允许客户端回答它将能够连接哪个端口 [21] 和数据流,因为客户端将确定端口范围 [xxxx-yyyyyy]。因此,考虑到这一点,当您定义端口 21 限制时,所有高端口都将停止为 VPN 之外的客户端选择的数据流工作,否则您允许端口 21 和来自您局域网的其他客户端正常工作的任何范围。

  4. 您必须在链中定义端口范围,以便在修复初始连接后数据流事件开始于端口 21。

  5. FTP 使用与 Works 相同的两种连接:连接和数据流。您必须为 VPN 服务器动态创建的正确网络接口定义连接和数据流。

    1. ip route 命令将确定每个接口和 IP 地址范围(公共或私有)的路由,例如:ip route add 192.168.99.0/24 dev ppp0

    2. sysctl -w net.ipv4.ip_forward=1 将允许您通过这些接口路由和发送数据

    3. 假设你的 VPN 服务器是基于 Linux 的服务,请检查 proxyarp 选项

答案2

长话短说:为了维护 VPN 隧道,数据包始终会发送到服务器的公共 IP。当尝试连接到服务器以获取其他服务(例如 FTP/SMTP/SSH)时,数据包仍将采用相同的路由。也就是说,无论我们多么希望,他们都无法穿过隧道

解决方案:在不提供上述任何服务的第二台机器上设置 VPN 服务器或通过服务器的点对点地址进行连接。(在我上面的设置中为 192.168.223.1)

相关内容