원격 컴퓨터에 열려 있는 모든 소켓을 나열하는 방법은 무엇입니까?

원격 컴퓨터에 열려 있는 모든 소켓을 나열하는 방법은 무엇입니까?

현재 컴퓨터의 공통 ss -l목록에는 다양한 Netid 유형을 포함하는 많은 개방형 소켓이 있으며 그 중 대부분은 localhost에서만 수신됩니다.

원격 컴퓨터가 데이터를 교환할 수 있는 모든 소켓의 목록을 어떻게 얻을 수 있습니까?

  • 여기에는 TCP, UDP, 기타 전송 계층 프로토콜, RAW 소켓 및 내가 인식하지 못하는 기타 프로토콜이 포함됩니다. ( ss이런 의미에서 완전하다고?)

  • 나는 이것이 UNIX 소켓을 제외할 것이라고 믿습니다(그들은 로컬 파일 시스템에만 있습니다. 그렇죠? 아니면 UNIX 소켓은 원격으로 작동될 수 있으므로 포함되어야 합니다).

  • 청취자가 localhost 제한 사항을 무시할 수 있지만 localhost가 표시/매핑되는 방식에 주의 사항이 있는지는 모르겠습니다.

기본 기준은 "리스닝 프로세스가 허용하는 경우 원격으로 모든 소켓을 공격할 수 있습니다"입니다.

ss( 몇 년 전에 명령이 다음과 같이 표시되었던 것을 기억합니다.많은그 결과는 내가 지금 얻고 있는 것보다 적었습니다. 이로 인해 일부 배포판이 ss기본적으로 콘텐츠를 숨기도록 구성되어 있는지 궁금합니다 . ss다른 환경에서 실행된다는 이유만으로 아무 것도 숨기지 않는 한, 가능한 한 이식성이 뛰어난 유틸리티 명령이나 이와 유사한 유틸리티 명령을 찾고 있습니다 . 또한 보안 이론의 관점에서 볼 때 위협 모델의 경우 시스템이 완전히 우리의 통제하에 있고 정상적이고 악의적이지 않은 소프트웨어를 실행하고 있다고 가정할 수 있습니다. )

그렇다면 관련된 소켓만 모두 나열하는 방법은 무엇입니까?

답변1

대부분의 환경에서는 tcp, udp, 원시 소켓 및 패킷 소켓만 찾을 것으로 예상됩니다. 다행히도 ss이 모든 것이 알려져 있습니다.

ss필요한 모든 프로토콜을 알고 있다고 가정하면 아마도 다음 명령을 사용할 것입니다. 이는 "unix" 소켓을 제외합니다. 또한 로컬 커널과 통신하는 데만 사용되는 "netlink" 소켓도 제외됩니다.

sudo ss -l -p | grep -vE '^(u_|nl )'

일반적으로 청취 소켓이 많지 않습니다. 따라서 모든 항목을 보고 루프백 IP 주소를 수신하는 모든 항목을 수동으로 무시할 수 있습니다. 또는 ss모든 필터링이 수행되도록 요구할 수 있습니다.

sudo ss -l -p -A 'all,!unix,!netlink' 'not src 127.0.0.1 not src [::1]'

두 경우 모두 출력에는 "클라이언트" UDP 소켓도 포함될 수 있습니다. 따라서 DNS 클라이언트, HTTP/3 클라이언트도 표시될 수 있습니다.

각 소켓을 연 프로그램에 대한 정보를 볼 필요가 없으면 해당 옵션을 제거 하고 루트 (또는)( ) -p로 실행할 필요가 없습니다 .ssnetstatsudo

위 명령은 얼마나 포괄적입니까?

netstat의 대체품으로 홍보되었지만 ss"udplite" 소켓 표시에 대한 지원은 부족합니다.

또한 대답은 버전에 따라 다릅니다 ss(그리고 커널에 따라서도 마찬가지인 것 같습니다). 제가 원래 이 답변을 썼을 때, 전에2017년, ss"sctp"는 지원되지 않습니다. netstat그때부터 지원하세요2014년 2월). sctp는 구체적으로 예상됨~에전화 회사. 전화 회사 이외의 VOIP는 일반적으로 UDP를 사용합니다.

불행하게도 에서 전체 목록을 찾으면 man netstat매우 혼란스러워집니다. sctp 및 udplite에 대한 옵션은 tcp, udp 및 raw와 함께 첫 번째 줄에 표시됩니다. 더 자세히 살펴보면 전체 프로토콜 목록이 있습니다.가족: [-4|--inet] [-6|--inet6] [--unix|-x] [--inet|--ip|--tcpip] [--ax25] [--x25] [--rose] [--ash] [--bluetooth] [--ipx] [--netrom] [--ddp|--appletalk] [--econet|--ec].

udplite 및 sctp는 지원 되지만 netstat"dccp"는 지원되지 않습니다. 또한 netstat는 .NET Framework와 같은 패킷 소켓(원시 소켓과 같지만 링크 수준 헤더 포함)을 지원하지 않습니다 ss -l -0.

ssBluetooth 소켓도 지원 되지 않습니다 . Bluetooth 소켓은 전통적인 의미에서 문제가 되지 않습니다. 이는 전체 검토를 수행하는 경우 관련이 있을 수 있습니다. 그러나 Bluetooth 보안은 매우 구체적인 질문이므로 여기서는 답변하지 않겠습니다.

localhost를 생략하시겠습니까 netstat?

netstat소켓을 localhost에 바인딩하는 것을 생략하는 특별한 방법은 없습니다. | grep -v마지막에 사용하시면 됩니다 . -pnetstat /ss 옵션을 사용할 경우 주의하십시오. 프로세스 이름이 일치하면 실수로 일부 프로세스를 제외할 수 있습니다. grep -v localhost:기본적으로 숫자 주소를 표시하는 것 외에도 패턴에 콜론을 포함시키므로 ss, 이 경우 | grep -vE (127.0.0.1|\[::1\]):실수로 제외되는 프로세스를 확인해 볼 수 있습니다 ps ax | grep -E (127.0.0.1|\[::1\]):.

더 간단한 명령이 있습니까?

불행히도 패킷 소켓의 경우. 그렇지 않으면 간단한 netstat -l명령을 제안할 수도 있습니다. netstat요청을 예측하고 출력을 "인터넷 연결", "UNIX 도메인 소켓" 및 "블루투스 연결"로 분리하는 데 도움이 됩니다. 첫 번째 부분만 확인하면 됩니다. 넷링크 소켓 부분이 없습니다.

tcp, udp, raw 및 패킷 소켓에만 관심이 있다고 가정합니다. 처음 세 가지 유형의 소켓에는 netstat -l -46.

패킷 소켓이 일반적으로 사용됩니다. 따라서 달리기 ss -l -0(또는 ss -l --packet) 훈련도 필요합니다.

불행히도 이로 인해 큰 함정이 발생합니다. 문제는 이제 이 두 명령을 결합하려고 한다는 것입니다.

피해야 할 함정ss

ss -l -046단일 명령으로서의 대답은 매력적으로 보입니다. 그러나 이것은아니요진짜. ss -46IPv6 소켓만 표시됩니다. ss -64IPv4 소켓만 표시됩니다.

항상 결과에 대해 온전한 점검을 수행하는 것이 좋습니다. 무엇을 기대해야 하는지 파악하십시오. 각 프로토콜을 확인하여 누락된 것이 있는지 확인하십시오. IPv4 주소가 없거나, IPv6 주소가 없다면 매우 의심스럽습니다. 대부분의 서버에는 두 가지 모두를 수신하는 SSH 서비스가 있을 것으로 예상할 수 있습니다. DHCP가 사용되므로 서버가 아닌 대부분의 경우 패킷이나 원시 소켓도 표시되어야 합니다.

두 가지 다른 명령의 출력을 해석하지 않으려면 netstat명령을 로 대체하는 것이 대안일 수 있습니다 ss -l -A inet. 이는 netstat를 실행할 때 정확히 동일한 옵션이 ipv6 소켓을 제외하기 때문에 약간 불행한 일입니다.

따라서 단일 명령의 경우 ss -l -A inet,packet ....

ss -l | grep ...IMO, 첫 번째 부분에서 제안한 방식으로 사용할 수도 있습니다 . 이 명령은 기억하기 쉬우며 선택 옵션에서 모든 혼란스러운 동작을 방지합니다 ss.

이 출력을 사용하여 무언가를 자동화하는 스크립트를 작성하는 경우 아마도 필터링을 선호해야 할 것입니다.긍정적인대신 소켓 유형 목록입니다. 그렇지 않으면 ss새 로컬 전용 소켓에 대한 지원이 시작될 때 스크립트가 중단될 수 있습니다.

ss -a -A raw -f link및 에서 오는 소켓 조합을 표시한다고 언급했습니까 ? 그리고 보여줘ss -a -A rawss -a -f linkss -a -A inet -f inet6더 적은소켓 비율 ss -a -A inet? 나는 -f inet6and 가 -f inet정확하게 문서화되지 않은 특별한 경우라고 생각합니다 .

( -0, -4및 는 , 및 의 별칭 -6입니다 .)-f link-f inet-f inet6

ss -A packet헤더는 표시 되지만 소켓은 표시되지 않는다고 언급했습니까 ? strace실제로 아무것도 읽지 않는다는 것을 나타냅니다. 이는 패킷 소켓을 항상 "듣고 있는" 것으로 간주하기 때문인 것 같습니다. ss이에 대한 경고를 제공하기에는 너무 게으르다. 이는 ss다음과 같이 처리되는 원시 소켓과 다릅니다.동시에"듣다" 그리고 "듣지 않는다".

( man 7 raw원래 소켓이아니요특정 프로토콜에 바인딩되어 있지만 특정 IP 프로토콜에는 바인딩되지 않은 경우 전송 전용입니다. 이것이 청취 소켓으로만 간주되는지 확인하지 않았습니다)

관련 정보