Linux 에서 네트워크 인터페이스가 Promiscuous 모드인지 확인하는 방법

LinuxBeginner
지금 연습하기

소개

이 랩에서는 Linux 에서 네트워크 인터페이스가 promiscuous 모드 (무차별 모드) 로 작동하는지 확인하는 방법을 배우게 됩니다. Promiscuous 모드는 네트워크 인터페이스가 대상 주소에 관계없이 수신하는 모든 네트워크 트래픽을 캡처할 수 있도록 하며, 이는 네트워크 모니터링 및 분석에 필수적입니다.

인터페이스 플래그를 검사하기 위해 ip link show 명령을 사용하고, 패킷 캡처 동작을 관찰하기 위해 tcpdump 명령을 활용하며, /sys/class/net 파일 시스템 내에서 인터페이스의 구성을 검사하는 세 가지 다른 방법을 탐구할 것입니다. 이러한 단계를 완료함으로써 Linux 환경에서 네트워크 인터페이스 구성을 확인하는 실질적인 기술을 습득하게 됩니다.

이 단계에서는 ip link show 명령을 사용하여 네트워크 인터페이스의 promiscuous 모드 상태를 확인하는 방법을 배우게 됩니다. Promiscuous 모드는 네트워크 인터페이스 컨트롤러 (NIC) 의 설정으로, 컨트롤러가 특별히 주소를 지정받은 프레임뿐만 아니라 수신하는 모든 트래픽을 중앙 처리 장치 (CPU) 로 전달할 수 있도록 합니다. 이는 종종 네트워크 모니터링 및 분석에 사용됩니다.

먼저, 아직 열지 않았다면 터미널을 엽니다. 데스크탑 왼쪽의 Xfce Terminal 아이콘을 클릭하여 터미널을 열 수 있습니다.

이제 ip link show 명령을 사용하여 네트워크 인터페이스의 상태를 확인해 보겠습니다. 다음 명령을 입력하고 Enter 키를 누르십시오.

ip link show

다음과 유사한 출력을 보게 됩니다.

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff

이 환경에서는 일반적으로 eth0으로 명명되는 기본 네트워크 인터페이스에 해당하는 줄을 찾습니다. 꺾쇠 괄호 (< >) 내의 플래그를 검사합니다. 이러한 플래그에 PROMISC가 있으면 인터페이스가 promiscuous 모드에 있는 것입니다. 위의 예제 출력에서는 PROMISC가 없으므로 eth0이 promiscuous 모드에 있지 않음을 나타냅니다.

ip link show 명령은 Linux 에서 네트워크 인터페이스 구성을 검사하기 위한 기본적인 도구입니다. 다양한 플래그와 상태를 포함하여 해당 출력을 이해하는 것은 네트워크 문제 해결 및 관리에 매우 중요합니다.

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

tcpdump -i 로 확인

이 단계에서는 tcpdump 명령을 사용하여 네트워크 인터페이스의 promiscuous 모드 상태를 확인합니다. tcpdump는 강력한 명령줄 패킷 분석기입니다. 네트워크를 통해 전송되거나 수신되는 패킷을 캡처하고 표시할 수 있습니다. 인터페이스가 promiscuous 모드에 있으면 tcpdump는 대상 주소에 관계없이 네트워크 세그먼트의 모든 패킷을 캡처할 수 있습니다.

먼저, tcpdump를 설치해야 합니다. 이전 랩에서 htop을 설치한 방법과 유사하게 sudo apt install 명령을 사용합니다.

sudo apt update
sudo apt install tcpdump -y

-y 플래그는 설치 중에 발생하는 모든 프롬프트에 자동으로 예 (yes) 로 응답합니다.

이제 tcpdump를 사용하여 eth0 인터페이스를 모니터링해 보겠습니다. -i 옵션을 사용하여 인터페이스를 지정하고, -n 옵션을 사용하여 DNS 조회를 방지하여 출력을 더 깔끔하게 만듭니다.

sudo tcpdump -i eth0 -n

tcpdumpeth0에서 모니터링하고 있음을 나타내는 출력을 보게 됩니다.

tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth0, link-type ETHERNET (100Mbps), snapshot length 262144 bytes

인터페이스가 promiscuous 모드에 있으면 tcpdump는 보이는 모든 트래픽을 캡처합니다. promiscuous 모드가 아니면 해당 MAC 주소로 지정된 트래픽 또는 브로드캐스트/멀티캐스트 트래픽만 캡처합니다.

일부 트래픽을 생성하기 위해 다른 터미널 창 (또는 현재 터미널의 새 탭) 을 열고 웹사이트를 ping 해 볼 수 있습니다. 예를 들어:

ping -c 4 google.com

tcpdump 터미널에서 출력을 관찰합니다. 패킷이 캡처되는 것을 볼 수 있습니다.

중요: tcpdump를 중지하려면 tcpdump가 실행 중인 터미널에서 Ctrl + C를 누르십시오.

tcpdump 자체는 초기 출력에서 "promiscuous mode"를 명시적으로 표시하지 않지만, 인터페이스로 특별히 지정되지 않은 트래픽을 캡처하는 기능은 promiscuous 모드가 활성 상태인지 확인하는 실용적인 방법입니다. 자체 시스템의 통신과 관련이 없는 트래픽 (예: 네트워크 세그먼트의 다른 장치에서 보낸 ARP 요청) 이 보이면 promiscuous 모드의 강력한 지표입니다.

다음으로 이동하려면 **계속 (Continue)**을 클릭하십시오.

/sys/class/net 에서 인터페이스 검사

이 단계에서는 /sys 파일 시스템을 탐색하여 promiscuous 모드 상태를 포함한 네트워크 인터페이스에 대한 정보를 찾습니다. /sys 파일 시스템은 커널 및 장치 드라이버와 상호 작용할 수 있는 방법을 제공하는 Linux 의 가상 파일 시스템입니다. 하드웨어 장치 및 해당 구성에 대한 정보를 노출합니다.

/sys 내의 네트워크 인터페이스 디렉토리로 이동합니다. cd 명령을 사용하여 현재 디렉토리를 변경합니다.

cd /sys/class/net/

이제 ls 명령을 사용하여 이 디렉토리의 내용을 나열합니다.

ls

ip link show의 출력과 유사한 네트워크 인터페이스 목록을 볼 수 있습니다. eth0lo를 볼 수 있습니다.

eth0  lo

여기 각 디렉토리는 네트워크 인터페이스에 해당합니다. eth0 디렉토리 내부를 살펴보겠습니다.

cd eth0

이제 eth0 디렉토리 내의 파일을 나열합니다.

ls

eth0 인터페이스에 대한 정보가 포함된 많은 파일과 디렉토리를 볼 수 있습니다. 우리는 promiscuous 모드 상태를 나타내는 파일에 관심이 있습니다. 이 정보는 종종 장치 플래그 또는 상태와 관련된 파일에서 찾을 수 있습니다.

정확한 파일 이름은 커널 버전에 따라 약간 다를 수 있지만, 이 정보를 찾을 수 있는 일반적인 위치는 플래그 또는 상태 정보를 포함할 수 있는 파일의 내용을 검사하는 것입니다.

상태 또는 플래그를 나타낼 수 있는 파일의 내용을 읽어보겠습니다. cat 명령을 사용하여 파일의 내용을 표시합니다. 예를 들어, flags 또는 이와 유사한 이름의 파일을 찾을 수 있습니다.

cat flags

cat flags 명령의 출력은 16 진수입니다. 이 숫자는 다양한 인터페이스 플래그의 비트마스크를 나타냅니다. 이를 해석하려면 일반적으로 특정 플래그 및 해당 비트 값에 대한 커널 문서를 참조해야 합니다. 그러나 특히 promiscuous 모드를 확인하기 위해 /sys 내에서 더 직접적인 방법이 있는 경우가 많습니다.

/sys 내에서 promiscuous 모드를 확인하는 더 신뢰할 수 있는 방법은 promiscuous 플래그 수를 명시적으로 나타내는 파일을 찾는 것입니다. 이 파일은 일반적으로 flags 또는 이와 유사한 이름으로 지정되며, 내용을 올바르게 해석하면 promiscuous 플래그가 설정되었는지 여부를 표시합니다.

아직 /sys/class/net/eth0 디렉토리에 있지 않은 경우 다시 이동합니다.

cd /sys/class/net/eth0

이제 flags 파일을 다시 검사해 보겠습니다. flags 파일의 16 진수 값은 다양한 인터페이스 상태를 나타냅니다. 16 진수 값을 직접 해석하려면 커널 플래그에 대한 지식이 필요하지만, ip link show 출력 (1 단계에서) 에 PROMISC 플래그가 있는지 확인하는 것이 promiscuous 모드를 확인하는 더 사용자 친화적인 방법입니다. /sys 파일 시스템은 ip와 같은 도구에서 사용하는 원시 커널 데이터를 제공합니다.

/sys 내에서 직접 확인하려면 일반적으로 promiscuous 카운트 또는 상태를 특별히 나타내는 파일을 찾습니다. 그러나 이 환경에서 표준 도구를 사용하여 promiscuous 모드를 확인하는 가장 간단한 방법은 1 단계에서 설명한 대로 ip link show를 사용하는 것입니다. /sys 파일 시스템은 기본 데이터를 제공하지만, 특정 커널 문서가 없으면 해석이 더 복잡할 수 있습니다.

이 단계에서는 /sys 파일 시스템이 장치 정보에 대한 낮은 수준의 액세스를 제공하는 방법을 보여줍니다. /sys의 단일 파일을 통해 promiscuous 모드를 직접 확인하는 것은 복잡할 수 있지만, 이 파일 시스템을 이해하는 것은 고급 Linux 시스템 분석에 유용합니다.

이 단계를 완료하려면 **계속 (Continue)**을 클릭하십시오.

요약

이 랩에서는 ip link show 명령을 사용하여 Linux 에서 네트워크 인터페이스가 promiscuous 모드인지 확인하는 방법을 배웠습니다. 이 명령은 네트워크 인터페이스 구성을 표시하며, PROMISC 플래그가 있으면 promiscuous 모드임을 나타냅니다. 또한 네트워크 트래픽을 캡처하여 promiscuous 모드 상태를 확인하는 또 다른 방법으로 tcpdump 명령 사용을 시작했습니다.