Linux 에서 포트가 열려 있는지 확인하는 방법

LinuxBeginner
지금 연습하기

소개

이 랩에서는 Linux 시스템에서 네트워크 포트의 상태를 확인하는 데 필요한 기술을 배우게 됩니다. 어떤 포트가 열려 있는지 이해하는 것은 네트워크 관리, 문제 해결 및 보안 분석에 필수적입니다.

먼저, netstat 명령을 특정 옵션과 함께 사용하여 수신 상태에 있는 모든 열린 TCP 및 UDP 포트를 나열합니다. 다음으로, 유사한 네트워크 통계를 제공하는 보다 현대적인 ss 명령을 사용하여 포트 상태를 확인합니다. 마지막으로, nc (netcat) 명령을 사용하여 특정 포트에 대한 연결을 적극적으로 테스트하여 클라이언트 관점에서 접근 가능하고 열려 있는지 확인합니다. 이러한 단계를 완료함으로써 Linux 환경에서 열린 포트를 식별하고 확인하는 실질적인 기술을 습득하게 됩니다.

netstat -tuln 으로 열린 포트 목록 확인

이 단계에서는 netstat 명령을 사용하여 Linux 시스템에서 열린 포트를 나열하는 방법을 배우게 됩니다. 어떤 포트가 열려 있는지 이해하는 것은 네트워크 문제 해결 및 보안에 매우 중요합니다.

netstat 명령 (네트워크 통계) 은 네트워크 연결, 라우팅 테이블, 인터페이스 통계, 마스커레이드 연결 및 멀티캐스트 멤버십을 표시하는 명령줄 도구입니다.

netstat과 함께 다음 옵션을 사용합니다.

  • -t: TCP 연결을 표시합니다.
  • -u: UDP 연결을 표시합니다.
  • -l: 수신 소켓 (열린 포트) 을 표시합니다.
  • -n: 호스트 이름 및 서비스 이름을 확인하는 대신 숫자 주소를 표시합니다.

아직 열려 있지 않다면 터미널을 엽니다. 데스크탑 왼쪽에서 Xfce 터미널 아이콘을 찾을 수 있습니다.

이제 다음 명령을 입력하고 Enter 키를 누릅니다.

netstat -tuln

다음과 유사한 출력을 볼 수 있습니다.

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN
udp        0      0 127.0.0.53:53           0.0.0.0:*
udp        0      0 0.0.0.0:68              0.0.0.0:*

출력을 분석해 보겠습니다.

  • Proto: 소켓의 프로토콜 (예: tcp, udp).
  • Local Address: 로컬 IP 주소 및 포트 번호. 형식은 IP_Address:Port입니다. 0.0.0.0은 서비스가 사용 가능한 모든 IPv4 인터페이스에서 수신 대기 중임을 의미하고, :::는 사용 가능한 모든 IPv6 인터페이스에서 수신 대기 중임을 의미합니다.
  • Foreign Address: 원격 IP 주소 및 포트 번호. 0.0.0.0:* 또는 :::*는 소켓이 특정 원격 주소에 연결되지 않았음을 나타냅니다 (수신 대기 중).
  • State: 소켓의 상태. LISTEN은 포트가 열려 있고 들어오는 연결을 기다리고 있음을 의미합니다.

예제 출력에서 포트 53 (DNS) 및 포트 22 (SSH) 가 IPv4 및 IPv6 모두에 대해 LISTEN 상태임을 확인할 수 있습니다.

이 명령은 시스템에서 어떤 서비스가 실행 중이고 액세스 가능한지 빠르게 확인하는 데 매우 유용합니다.

다음 단계로 진행하려면 계속을 클릭하십시오.

ss -tuln 을 사용하여 포트 상태 확인

이전 단계에서는 netstat을 사용하여 열린 포트를 나열했습니다. 이제 동일한 목표를 달성하기 위해 ss (소켓 통계) 라는 더 현대적이고 종종 더 빠른 도구를 사용해 보겠습니다. ssnetstat을 대체하도록 설계되었으며 소켓에 대한 더 자세한 정보를 제공합니다.

netstat에서 사용했던 것과 유사한 옵션을 ss와 함께 사용합니다.

  • -t: TCP 소켓을 표시합니다.
  • -u: UDP 소켓을 표시합니다.
  • -l: 수신 소켓 (열린 포트) 을 표시합니다.
  • -n: 호스트 이름 및 서비스 이름을 확인하는 대신 숫자 주소를 표시합니다.

아직 열려 있지 않다면 터미널을 엽니다.

다음 명령을 입력하고 Enter 키를 누릅니다.

ss -tuln

다음과 유사한 출력을 볼 수 있습니다.

Netid  State      Recv-Q Send-Q Local Address:Port               Peer Address:Port
udp    UNCONN     0      0      127.0.0.53%lo:53                 0.0.0.0:*
udp    UNCONN     0      0      0.0.0.0:68                       0.0.0.0:*
tcp    LISTEN     0      128    127.0.0.53%lo:53                 0.0.0.0:*
tcp    LISTEN     0      128    0.0.0.0:22                       0.0.0.0:*
tcp    LISTEN     0      128    [::]:22                          [::]:*

출력은 netstat과 유사하며 프로토콜 (Netid), 상태 (State), 로컬 주소 및 포트 (Local Address:Port), 피어 주소 및 포트 (Peer Address:Port) 를 보여줍니다.

LISTEN으로 나열된 동일한 포트 (53 및 22) 를 볼 수 있으며, 이는 netstat의 결과를 확인합니다.

출력 형식은 약간 다르지만 ss는 수신 포트에 대한 유사한 정보를 제공하며 성능과 추가 기능 (이 소개 랩에서는 다루지 않음) 으로 인해 일반적으로 최신 Linux 시스템에서 선호됩니다.

netstatss를 모두 사용하면 정보를 상호 참조하고 Linux 에서 사용할 수 있는 다양한 도구에 익숙해지는 데 도움이 될 수 있습니다.

다음 단계로 이동하려면 계속을 클릭하십시오.

nc -zv 로 포트 연결 테스트

이전 단계에서는 netstatss를 사용하여 열린 포트를 나열하는 방법을 배웠습니다. 이제 nc 명령 (netcat) 을 사용하여 특정 포트에 실제로 연결할 수 있는지 테스트해 보겠습니다. nc는 TCP 또는 UDP 를 사용하여 네트워크 연결에서 읽고 쓸 수 있는 다용도 네트워킹 유틸리티입니다.

다음 옵션과 함께 nc를 사용합니다.

  • -z: nc가 데이터를 전송하지 않고 수신 데몬을 스캔하도록 지정합니다. 이는 포트가 열려 있는지 확인하는 데 유용합니다.
  • -v: 자세한 출력을 활성화하여 연결 시도에 대한 자세한 내용을 표시합니다.

이전 단계에서 수신 대기 중인 것을 확인한 포트 22(SSH) 에 대한 연결을 테스트합니다. IP 주소 127.0.0.1 또는 호스트 이름 localhost로 참조할 수 있는 로컬 머신에 대한 연결을 테스트합니다.

아직 열려 있지 않다면 터미널을 엽니다.

다음 명령을 입력하고 Enter 키를 누릅니다.

nc -zv 127.0.0.1 22

다음과 유사한 출력을 볼 수 있습니다.

Connection to 127.0.0.1 22 port [tcp/ssh] succeeded!

이 출력은 nc가 로컬 머신의 포트 22 에 성공적으로 연결할 수 있었음을 확인합니다.

이제 이 환경에서 기본적으로 웹 서버가 실행되지 않으므로 열려 있지 않을 가능성이 높은 포트, 예를 들어 포트 80(HTTP) 을 테스트해 보겠습니다.

다음 명령을 입력하고 Enter 키를 누릅니다.

nc -zv 127.0.0.1 80

다음과 유사한 연결 거부 또는 시간 초과를 나타내는 출력을 볼 수 있습니다.

nc: connect to 127.0.0.1 port 80 (tcp) failed: Connection refused

이 출력은 nc가 포트 80 에 연결할 수 없음을 보여줍니다. 이는 해당 포트에서 서비스를 수신 대기하지 않기 때문에 예상되는 결과입니다.

nc -zv를 사용하면 현재 위치에서 특정 포트에 도달하고 열려 있는지 빠르고 쉽게 확인할 수 있습니다.

이 랩을 완료하려면 계속을 클릭하십시오.

요약

이 랩에서는 명령줄 도구를 사용하여 Linux 에서 포트가 열려 있는지 확인하는 방법을 배웠습니다. 먼저 netstat -tuln 명령을 사용하여 수신 대기 상태에 있는 모든 열린 TCP 및 UDP 포트를 나열하고 프로토콜, 로컬 주소, 외부 주소 및 상태를 포함한 출력 형식을 이해했습니다.

다음으로, ss -tuln 명령을 사용하여 포트 상태를 확인했습니다. 이 명령은 netstat과 유사한 정보를 제공하지만 종종 더 현대적이고 빠른 대안으로 간주됩니다. 마지막으로, nc -zv 명령을 사용하여 특정 포트에 대한 연결을 테스트하는 방법을 배웠습니다. 이 명령은 연결을 설정하려고 시도하고 포트가 열려 있고 도달 가능한지 보고합니다. 이러한 단계는 Linux 시스템에서 네트워크 문제 해결 및 보안 분석에 필수적인 기술을 제공합니다.