我正在尝试运行一个简单的 Debian 服务器,并使用 iptables 设置防火墙。我知道大多数 TCP 连接一旦建立就会迁移端口,因此我已包括:
-A INPUT -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
然而经过尝试:
-A INPUT -j LOG
我注意到,一旦这些 TCP 连接迁移,它们就会神秘地变成 udp。我尝试添加:
-A INPUT -p udp -j ACCEPT
突然间,我可以从 curl、docker pull 和 apt update 获得响应。为什么会发生这种情况?除了保持所有 udp 端口打开之外,还有其他方法可以解决这个问题吗?udp 数据包可以是 RELATED 还是 ESTABLISHED?
答案1
如果您想知道哪种流量被阻止,您可以使用tcpdump
查看所有流量,包括被阻止的流量。
在不知道被阻止的是什么的情况下,我认为很可能是 DNS 流量被阻止了。DNS 流量可以使用 TCP 或 UDP。将来,这种情况会更多地发生在 HTTP3 上,HTTP3 也使用 UDP。Curl 默认不使用 HTTP3,因此这无法解释您看到的差异。
答案2
udp 数据包可以 RELATED、ESTABLISHED!我将第一行替换为第二行,然后我就可以从 dockerhub 获取图像,从 curl 获取响应,然后 apt 更新!
-A INPUT -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT