Linux 에서 SNMPv3 를 사용한 안전한 네트워크 모니터링

CompTIABeginner
지금 연습하기

소개

이 랩에서는 Simple Network Management Protocol version 3 (SNMPv3) 를 사용하여 Linux 시스템에서 안전한 네트워크 모니먼트를 구현하는 방법을 배웁니다. SNMP 에이전트 (snmpd) 를 구성하여 강력한 인증 및 암호화를 적용하는 데 중점을 두어, 관리 데이터가 전송 중에 보호되도록 하고 이전 SNMP 버전의 보안 취약점을 극복할 것입니다.

프로세스는 시스템에 필요한 SNMP 에이전트 및 클라이언트 도구를 설치하는 것부터 시작됩니다. 그런 다음 구성 파일 내에서 직접 안전한 자격 증명을 가진 전용 SNMPv3 사용자를 생성합니다. 마지막으로 snmpwalk 명령줄 도구를 사용하여 구성된 에이전트에 대해 안전한 쿼리를 수행하고, 설정을 확인하며, Object Identifiers (OIDs) 를 사용하여 특정 시스템 정보를 검색하는 방법을 탐색합니다.

SNMP 에이전트 및 클라이언트 도구 설치

이 단계에서는 Simple Network Management Protocol (SNMP) 를 사용하여 네트워크 모니터링에 필요한 핵심 구성 요소를 설치합니다. 모니터링할 장치에서 실행되는 SNMP 에이전트와 에이전트를 쿼리하는 데 사용되는 클라이언트 도구를 모두 설치할 것입니다.

먼저, 시스템의 패키지 목록을 업데이트하는 것이 표준적인 모범 사례입니다. 이렇게 하면 리포지토리에서 사용 가능한 최신 및 가장 안전한 버전의 소프트웨어를 얻을 수 있습니다.

시스템에서 패키지 인덱스를 업데이트하려면 다음 명령을 실행하십시오.

sudo apt update

Ubuntu 리포지토리에서 패키지 목록을 가져오는 출력이 표시됩니다.

Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Get:2 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [119 kB]
...
Fetched 1,587 kB in 2s (924 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
All packages are up to date.

패키지 목록이 업데이트되었으므로 SNMP 에이전트 (데몬) 와 클라이언트 유틸리티를 설치할 수 있습니다. 에이전트는 snmpd 패키지에서 제공되며, 클라이언트 도구 (예: snmpwalk, snmpget) 는 snmp 패키지에 있습니다.

두 패키지를 모두 설치하려면 아래 명령을 실행하십시오. -y 플래그는 설치를 자동으로 확인하므로 프롬프트가 표시되지 않습니다.

sudo apt install snmpd snmp -y

설치 프로세스는 필요한 파일을 다운로드하고 구성합니다. 완료되면 에이전트 데몬인 snmpd 서비스가 자동으로 시작되어야 합니다.

SNMP 에이전트가 올바르게 실행되고 있는지 확인하려면 systemctl을 사용하여 snmpd 서비스의 상태를 확인할 수 있습니다.

sudo systemctl status snmpd

출력에서 서비스가 active (running)으로 표시되어야 합니다. 이는 SNMP 에이전트가 요청을 받을 준비가 되었음을 확인합니다.

● snmpd.service - Simple Network Management Protocol (SNMP) Daemon.
     Loaded: loaded (/lib/systemd/system/snmpd.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2023-10-30 08:30:00 UTC; 5s ago
   Main PID: 1234 (snmpd)
      Tasks: 1 (limit: 4595)
     Memory: 9.8M
        CPU: 35ms
     CGroup: /system.slice/snmpd.service
             └─1234 /usr/sbin/snmpd -Lsd -Lf /dev/null -u Debian-snmp -g Debian-snmp -I -smux mteTrigger mteTriggerConf -f

상태 화면이 표시되면 키보드에서 q를 눌러 종료하고 명령 프롬프트로 돌아갈 수 있습니다.

에이전트가 실행 중이고 클라이언트 도구가 설치되었으므로 이제 SNMP 구성 및 통신을 위한 환경이 준비되었습니다.

snmpd.conf 에 안전한 SNMPv3 사용자 생성

이 단계에서는 SNMPv3 를 사용하도록 SNMP 에이전트 (snmpd) 를 구성합니다. SNMPv3 는 필수적인 보안 기능을 제공합니다. 이전 버전과 달리 SNMPv3 는 인증 (보낸 사람의 신원 확인) 과 개인 정보 보호 (데이터 암호화) 를 지원합니다. 에이전트의 구성 파일인 /etc/snmp/snmpd.conf에 직접 새 사용자를 생성하여 이를 수행합니다.

변경하기 전에 원본 구성 파일의 백업을 만드는 것이 중요합니다. 이렇게 하면 문제가 발생했을 때 쉽게 복원할 수 있습니다.

다음 명령을 실행하여 구성 파일을 복사하십시오.

sudo cp /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.bak

이제 새 SNMPv3 사용자를 추가하기 위해 기본 구성 파일 /etc/snmp/snmpd.conf를 편집합니다. 이 작업을 위해 nano 텍스트 편집기를 사용할 것입니다.

sudo 권한으로 파일을 열려면 이 명령을 실행하십시오.

sudo nano /etc/snmp/snmpd.conf

파일의 맨 끝으로 스크롤하여 다음 줄을 추가합니다. 이 줄은 강력한 인증 (SHA) 및 개인 정보 보호 (AES) 프로토콜을 사용하는 labexuser라는 새 사용자를 정의합니다.

  • createUser: 이 지시문은 SNMPv3 사용자를 생성합니다.
    • labexuser: SNMPv3 사용자의 사용자 이름입니다.
    • SHA: 인증 프로토콜입니다 (MD5 보다 안전함).
    • AuthPassLabEx: 인증 암호입니다 (최소 8 자여야 함).
    • AES: 개인 정보 보호 (암호화) 프로토콜입니다 (DES 보다 안전함).
    • PrivPassLabEx: 개인 정보 보호 암호입니다 (최소 8 자여야 함).
  • rwuser: 이 지시문은 priv 보안 수준 (인증 및 개인 정보 보호) 을 사용할 때 사용자에게 전체 OID 트리에 대한 읽기 - 쓰기 액세스 권한을 부여합니다.

다음 구성 블록을 파일 끝에 복사하여 붙여넣으십시오.

## --- LabEx SNMPv3 사용자 구성 ---
## 모니터링을 위한 안전한 SNMPv3 사용자 생성
createUser labexuser SHA "AuthPassLabEx" AES "PrivPassLabEx"

## 새 사용자에게 개인 정보 보호를 통한 읽기-쓰기 액세스 권한 부여
rwuser labexuser priv
## --- 구성 종료 ---

텍스트를 추가한 후 Ctrl+O를 눌러 파일을 저장하고 nano를 종료한 다음, Enter 를 눌러 파일 이름을 확인하고 마지막으로 Ctrl+X를 눌러 종료합니다.

이제 SNMPv3 통신을 위한 안전한 사용자를 성공적으로 구성했습니다. 다음 단계에서는 서비스를 다시 시작하여 이러한 변경 사항을 적용합니다.

snmpd 서비스 재시작 및 확인

이 단계에서는 이전 단계에서 추가한 새 사용자 구성을 적용합니다. snmpd와 같이 실행 중인 서비스의 구성 파일을 수정할 때마다 변경 사항이 자동으로 적용되지 않습니다. 서비스가 구성 파일을 다시 읽고 새 설정을 로드하려면 서비스를 다시 시작해야 합니다.

먼저 systemctl 명령을 사용하여 snmpd 서비스를 다시 시작합니다. 이렇게 하면 현재 프로세스가 중지되고 labexuser를 포함한 업데이트된 구성으로 새 프로세스가 시작됩니다.

sudo systemctl restart snmpd

이 명령은 성공적으로 실행되면 일반적으로 아무런 출력을 생성하지 않습니다.

다음으로, 서비스가 문제 없이 다시 시작되었는지 확인하는 것이 중요합니다. /etc/snmp/snmpd.conf 파일에 구문 오류가 있었다면 서비스가 시작되지 않을 수 있습니다. 현재 상태를 확인하여 올바르게 실행되고 있는지 확인할 수 있습니다.

sudo systemctl status snmpd

서비스가 active (running)으로 표시되는 출력을 보아야 합니다. 타임스탬프에 주의하십시오. 서비스가 매우 최근에 시작되었음을 나타내야 합니다.

● snmpd.service - Simple Network Management Protocol (SNMP) Daemon.
     Loaded: loaded (/lib/systemd/system/snmpd.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2023-10-30 08:35:00 UTC; 3s ago
   Main PID: 5678 (snmpd)
      Tasks: 1 (limit: 4595)
     Memory: 10.1M
        CPU: 40ms
     CGroup: /system.slice/snmpd.service
             └─5678 /usr/sbin/snmpd -Lsd -Lf /dev/null -u Debian-snmp -g Debian-snmp -I -smux mteTrigger mteTriggerConf -f

상태 보기를 종료하고 터미널로 돌아가려면 q를 누르십시오.

active (running) 상태를 보는 것은 구성 변경 사항이 유효했으며 SNMP 에이전트가 이제 새 labexuser와 함께 안전한 통신을 위해 준비되었음을 확인합니다.

SNMPv3 도구로 안전한 쿼리 수행

이 단계에서는 로컬 머신에서 실행 중인 SNMP 에이전트에 대해 안전한 쿼리를 수행하기 위해 SNMP 클라이언트 도구를 사용합니다. snmpd.conf에서 구성한 labexuser 자격 증명을 사용하여 안전한 SNMPv3 통신을 테스트합니다. 이는 안전한 구성을 실제로 확인하는 순간입니다.

SNMPv3 용 SNMP 명령은 인증 및 개인 정보 보호를 처리하기 위해 몇 가지 특정 플래그가 필요합니다. 사용할 매개변수는 다음과 같습니다.

  • -v 3: SNMP 버전 3 을 사용하고 있음을 지정합니다.
  • -l authPriv: 보안 수준을 authPriv로 설정합니다. 이는 통신에 인증개인 정보 보호(암호화) 가 모두 필요함을 의미합니다. 이것이 가장 높은 보안 수준입니다.
  • -u labexuser: 생성한 labexuser인 사용자 이름을 지정합니다.
  • -a SHA: 인증 프로토콜을 SHA 로 정의합니다. 이는 snmpd.conf에서 설정한 프로토콜과 일치해야 합니다.
  • -A "AuthPassLabEx": 인증 암호를 제공합니다.
  • -x AES: 개인 정보 보호 (암호화) 프로토콜을 AES 로 정의합니다. 이 역시 구성과 일치해야 합니다.
  • -X "PrivPassLabEx": 개인 정보 보호 암호를 제공합니다.
  • localhost: SNMP 에이전트가 실행 중인 대상 호스트입니다. 이 경우 자체 머신입니다.

먼저 전체 시스템 트리를 워크하여 연결을 테스트해 보겠습니다. snmpwalk 명령은 OID 트리를 탐색하고 분기 내의 모든 객체를 반환합니다.

OID 구조 이해: 객체 식별자 (OID) 는 계층적 번호 시스템을 사용합니다. OID 1.3.6.1.2.1.1은 표준 SNMP MIB-II 의 "system" 그룹을 나타냅니다.

  • 1.3.6.1 = internet
  • 1.3.6.1.2 = mgmt (management)
  • 1.3.6.1.2.1 = mib-2 (standard MIB)
  • 1.3.6.1.2.1.1 = system group (기본 시스템 정보 포함)

시스템 MIB 트리를 워크하려면 다음 명령을 실행하십시오.

snmpwalk -v 3 -l authPriv -u labexuser -a SHA -A "AuthPassLabEx" -x AES -X "PrivPassLabEx" localhost 1.3.6.1.2.1.1

명령이 성공하면 여러 시스템 관련 OID 와 해당 값이 표시됩니다. 이는 SNMP 관리자가 에이전트 (snmpd) 와 성공적으로 인증되었고 쿼리가 안전하고 암호화된 채널을 통해 수행되었음을 확인합니다.

SNMPv2-MIB::sysDescr.0 = STRING: Linux labex-vm 5.15.0-XX-generic #XX-Ubuntu SMP ...
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-TC::linux
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (123456) 0:20:34.56
SNMPv2-MIB::sysContact.0 = STRING: Me <me@example.org>
SNMPv2-MIB::sysName.0 = STRING: labex-vm
SNMPv2-MIB::sysLocation.0 = STRING: Sitting on the Dock of the Bay
...

성공적인 응답은 전체 SNMPv3 설정이 올바르게 작동하고 있음을 증명합니다. 잘못된 자격 증명이나 프로토콜을 사용했다면 명령이 인증 오류와 함께 실패했을 것입니다.

snmpget 을 사용하여 특정 OID 쿼리

이 단계에서는 snmpget 명령을 사용하여 특정 시스템 정보를 검색하는 방법을 배웁니다. snmpwalk가 전체 OID 트리를 탐색하는 반면, snmpget은 정확한 정보 검색을 위해 특정 **객체 식별자 (OID)**를 쿼리하도록 설계되었습니다.

작동하고 안전한 SNMPv3 설정이 완료되었으므로 특정 시스템 정보를 쿼리할 수 있습니다. OID 는 장치의 관리 정보 베이스 (MIB) 내의 정보 조각을 고유하게 가리킵니다.

OID 계층 구조 설명: SNMP OID 트리는 국제 표준 ISO/IEC 객체 식별자 계층 구조를 따릅니다.

1 (iso)
└── 3 (org)
    └── 6 (dod)
        └── 1 (internet)
            └── 2 (mgmt)
                └── 1 (mib-2)
                    └── 1 (system)
                        ├── 1.0 (sysDescr)
                        ├── 3.0 (sysUpTime)
                        ├── 4.0 (sysContact)
                        ├── 5.0 (sysName)
                        └── 6.0 (sysLocation)

이것이 시스템 정보가 1.3.6.1.2.1.1로 시작하는 이유를 설명합니다. MIB-II 의 시스템 그룹에 대한 표준화된 경로입니다.

가장 일반적으로 사용되는 특정 OID 인 시스템 설명을 쿼리해 보겠습니다. 이 OID 는 관리 장치에 대한 기본 텍스트 설명을 검색합니다.

특정 OID 이해: 시스템 그룹 (1.3.6.1.2.1.1) 내에서 각 정보 조각에는 특정 하위 식별자가 있습니다.

  • 1.3.6.1.2.1.1.1.0 = sysDescr.0 (시스템 설명)
  • 1.3.6.1.2.1.1.3.0 = sysUpTime.0 (시스템 업타임)
  • 1.3.6.1.2.1.1.4.0 = sysContact.0 (시스템 연락처)
  • 1.3.6.1.2.1.1.5.0 = sysName.0 (시스템 이름)
  • 1.3.6.1.2.1.1.6.0 = sysLocation.0 (시스템 위치)

마지막의 .0은 테이블 항목이 아닌 스칼라 값 (단일 인스턴스) 임을 나타냅니다.

시스템 설명을 쿼리하려면 다음 명령을 실행하십시오.

snmpget -v 3 -l authPriv -u labexuser -a SHA -A "AuthPassLabEx" -x AES -X "PrivPassLabEx" localhost 1.3.6.1.2.1.1.1.0

출력에는 시스템 설명이 표시되어 SNMPv3 인증 및 개인 정보 보호가 올바르게 작동하고 있음을 확인합니다.

iso.3.6.1.2.1.1.1.0 = STRING: "Linux iZrj9ixg5sv0oem6yeu6aqZ 5.15.0-56-generic ..."

다음으로 숫자 OID 1.3.6.1.2.1.1.3.0 (이는 sysUpTime.0에 해당) 을 사용하여 시스템 업타임을 쿼리해 보겠습니다. 이 OID 는 네트워크 관리 부분의 시스템이 마지막으로 다시 초기화된 이후의 시간을 보고합니다.

snmpget -v 3 -l authPriv -u labexuser -a SHA -A "AuthPassLabEx" -x AES -X "PrivPassLabEx" localhost 1.3.6.1.2.1.1.3.0

출력에는 "Timeticks" 형식 (100 분의 1 초를 나타냄) 과 사람이 읽을 수 있는 형식으로 업타임이 표시됩니다.

iso.3.6.1.2.1.1.3.0 = Timeticks: (48642) 0:08:06.42

마지막으로, 끝에 나열하여 단일 명령으로 여러 OID 를 쿼리할 수 있습니다. 숫자 OID 를 사용하여 시스템 설명과 연락처 정보를 모두 검색해 보겠습니다.

숫자 OID 를 사용하는 이유: 일부 환경에서는 다음과 같은 이유로 sysDescr.0과 같은 기호 이름이 인식되지 않을 수 있습니다.

  • MIB 파일이 로드되거나 설치되지 않음
  • SNMP 클라이언트 구성에 필요한 MIB 정의가 포함되지 않음
  • 숫자 OID 를 사용하면 다양한 시스템 간의 호환성이 보장됩니다.

여러 OID 를 동시에 쿼리하려면 이 명령을 실행하십시오.

snmpget -v 3 -l authPriv -u labexuser -a SHA -A "AuthPassLabEx" -x AES -X "PrivPassLabEx" localhost 1.3.6.1.2.1.1.1.0 1.3.6.1.2.1.1.4.0

그러면 단일 응답으로 두 값이 반환됩니다.

iso.3.6.1.2.1.1.1.0 = STRING: "Linux iZrj9ixg5sv0oem6yeu6aqZ 5.15.0-56-generic ..."
iso.3.6.1.2.1.1.4.0 = STRING: "Me <me@example.org>"

이러한 특정 OID 를 성공적으로 쿼리함으로써 안전한 네트워크 모니터링을 위한 SNMP 의 핵심 기능을 시연했습니다. 이제 장치에서 정확한 운영 데이터를 안전하고 인증되고 암호화된 방식으로 검색할 수 있습니다.

요약

이 실습에서는 Linux 시스템에서 SNMPv3 를 사용하여 안전한 네트워크 모니터링을 구현하는 방법을 배웠습니다. 시스템의 패키지 저장소를 업데이트한 후 SNMP 에이전트 (snmpd) 및 클라이언트 도구 (snmp) 를 포함한 핵심 구성 요소를 설치하는 것으로 시작했습니다. 주요 초점은 보안이었으며, 전송 중인 데이터를 보호하기 위해 강력한 인증 및 개인 정보 보호 (암호화) 프로토콜을 갖춘 snmpd.conf 파일에 새 SNMPv3 사용자를 생성하여 구성했습니다.

안전한 사용자를 설정한 후 snmpd 서비스를 다시 시작하여 새 구성을 적용하고 올바르게 실행되고 있는지 확인했습니다. 그런 다음 SNMP 클라이언트 도구를 사용하여 에이전트에 대해 안전한 쿼리를 수행하고 생성한 SNMPv3 사용자의 자격 증명으로 인증했습니다. snmpwalk를 사용하여 전체 MIB 트리 분기를 탐색하고 snmpget을 사용하여 특정 객체 식별자 (OID) 를 검색하는 연습을 했습니다. 이를 통해 포괄적인 트리 워크와 정확한 개별 쿼리를 모두 사용하여 시스템 설명, 업타임 및 연락처 세부 정보와 같은 시스템 정보를 안전하게 모니터링하는 방법을 시연했습니다.