운영 체제: 데비안 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))
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))
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.