为什么我的 LAN 电缆在我的计算机上打开 UDP 端口?

为什么我的 LAN 电缆在我的计算机上打开 UDP 端口?

操作系统:Debian 12

我经常从事 OPSEC 工作,因为安全对我来说非常重要。现在我有一个新的路由器,当我插入 LAN 电缆时,它会在我的计算机上打开一个端口。当我断开 LAN 电缆时,该端口被关闭。我的路由器上没有配置端口转发

未插入 LAN:

$ sudo ss -lntup
Netid  State    Recv-Q   Send-Q      Local Address:Port      Peer Address:Port  Process                                                                         
udp    UNCONN   0        0           192.168.122.1:53             0.0.0.0:*      users:(("dnsmasq",pid=2717,fd=5))                                              
tcp    LISTEN   0        32          192.168.122.1:53             0.0.0.0:*      users:(("dnsmasq",pid=2717,fd=6)) 

局域网已插入:

$ sudo ss -lntup
Netid  State    Recv-Q   Send-Q      Local Address:Port      Peer Address:Port  Process                                                                         
udp    UNCONN   0        0           192.168.122.1:53             0.0.0.0:*      users:(("dnsmasq",pid=2717,fd=5))                                              
udp    UNCONN   0        0                 0.0.0.0:33955          0.0.0.0:*                                                                                                                
tcp    LISTEN   0        32          192.168.122.1:53             0.0.0.0:*      users:(("dnsmasq",pid=2717,fd=6)) 

当我重新插入 LAN 时,它会打开另一个端口:

$ sudo ss -lntup
udp    UNCONN   0        0           192.168.122.1:53             0.0.0.0:*      users:(("dnsmasq",pid=2717,fd=5))                                              
tcp    LISTEN   0        32          192.168.122.1:53             0.0.0.0:*      users:(("dnsmasq",pid=2717,fd=6)) 
udp    UNCONN   0        0                 0.0.0.0:49258          0.0.0.0:*                                                                                     

是什么原因造成的?我不认为这是正常行为。尽管状态为 UNCONN,但这似乎存在安全风险,因为该端口是由我的 LAN 电缆打开的,对吗?我用的是WireGuard。当我禁用它时,unconn 套接字消失了。

为什么要这样做?

我怎样才能防止这种情况发生?

答案1

OP的评论:

@AB 是的,我使用 wg。当我禁用 wg 时,unconn 套接字消失了。为什么wg要这么做?

看来系统被配置为每当主接口有链路(载波检测)时就带来 WireGuard(隧道)接口。

WireGuard 需要 UDP 套接字才能与对等方通信。对于内核实现(内核模块wireguard.ko,例如ip link add wg0 up type wireguard:)或用户空间实现(例如:wireguard-go wg0+ ip link set wg0 up)。

如果 WireGuard 配置未指定本地端口,则会随机动态选择。 “客户端”WireGuard 接口通常就是这种情况(即使 WireGuard 遵循点对点模型):通常是没有稳定公共地址并且在存在隧道之前无法到达的一侧。

要确认此 UDP 端口与动态 WireGuard 配置之间的关系,只需运行wg。即使对于完全未配置的界面,它至少会显示如下内容:

interface: wg0
  listening port: 36387

这将是接口处于 UP(内核实现)时或在所有情况下(如当前所见wireguard-go)所使用的端口。

当它由内核处理时,端口仅在接口启动时才会侦听。但如果端口发生变化,则意味着每次删除并重新创建接口(否则相同的端口将重新出现)。没有与套接字关联的进程信息,因为它是在内核中处理的。


UNCONN关于这意味着套接字处于未连接状态的注释。

未连接并不意味着存在错误或超时。这是在通信中使用 UDP 套接字的两种方法之一。它允许使用单个套接字以有效的方式与多个对等点进行通信。

两种 WireGuard 实现都使用 UDP 套接字未连接的模式:至少对于用户空间来说,这意味着它不在connect(2)该套接字上使用,而是使用sendmsg(2)而不是send(2)/进行通信write(2)(以及recvmsg(2)在另一个方向上同样如此)。

答案2

实际上“电缆”无法打开端口(这就是问题似乎假设的);仅有的软件可以打开端口。今天的计算机系统相当复杂,但并不“神奇”。

我怀疑机器上有一个进程正在等待新接口的出现(例如我知道就是ntpd这样做的)。插入电缆有效地使接口上升,这反过来会向软件进程(通过内核接口)发出接口上升的信号,并且该进程最终将打开端口。

也许看到https://stackoverflow.com/a/24207967

相关内容