考虑一个 VPN 服务器,其端口使用端口敲击关闭,仅在敲击序列成功后才打开端口。
当使用端口敲击打开已关闭的端口,然后建立 VPN 连接时,为什么在配置的时间后自动关闭端口后 VPN 连接仍然可以保持连接?
这是我在 howtogeek.com 的有关端口敲击的文章中看到的,没有进一步的解释,所以也许我只是没有正确理解它。
我的理解是,关闭端口意味着它们不监听连接,也不会维持已建立的连接。那么,当你暂时打开一个端口来建立然后自动关闭连接同时保持已经建立的 VPN 会话连接?
连接是否真的在关闭的端口上持续存在,还是 VPN 协议中发生了其他问题,导致建立的连接发生在其他地方?这种在端口关闭后仍能保持连接的情况是否可以通过 SSH 之类的方式实现?
答案1
现在通常使用状态防火墙。它允许分别过滤新的(第一个)连接和已建立的(属于已知连接)数据包。
首先,它使允许任何出站连接(具有双向数据包传输)变得简单,而入站连接仍然被禁用。
因此,如果端口对新连接开放的时间足够长,则可以建立连接。接下来,此连接将保持状态为“已建立”的数据包的工作流规则。
简单的现代状态防火墙的示例:https://wiki.archlinux.org/index.php/simple_stateful_firewall#Example_iptables.rules_file
/etc/iptables/iptables.rules
# Generated by iptables-save v1.4.18 on Sun Mar 17 14:21:12 2013
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:TCP - [0:0]
:UDP - [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
COMMIT
# Completed on Sun Mar 17 14:21:12 2013