15.6 Zenoh 라우터 및 인프라 보안 설정 실무

15.6 Zenoh 라우터 및 인프라 보안 설정 실무

전장(15.2~15.5)에서 논의된 암호화(TLS) 및 접근 제어(ACL) 체계가 논리적 소프트웨어 계층의 방어 기제였다면, 본 절에서는 인프라 엔지니어 관점에서 호스트 운영체제(OS) 및 네트워크 인터페이스 컨트롤러(NIC) 계층의 물리적·환경적 취약점을 통제하는 디바이스 하드닝(Device Hardening) 런북(Runbook)을 전개한다.

단일 라우터 데몬(Router Daemon)의 환경 설정 결함은 애플리케이션 계층의 모든 암호학적 노력을 무력화할 수 있는 중대한 파급력을 지닌다. 클라우드 인스턴스 및 에지(Edge) 디바이스 환경에서 Zenoh 라우터 프로세스를 배포할 시 반드시 준수해야 할 필수 보안 설정 원칙을 확립한다.

1. 라우터 설정 파일(zenohd.json5) 내 보안 파라미터 최적화

zenohd.json5 파일은 라우터의 핵심 코어 파라미터를 정의한다. 기본(Default) 설정 상태로 라우터를 프로덕션(Production) 환경에 노출시키는 것은 인프라 장악을 허용하는 치명타가 될 수 있다.

1. 멀티캐스트(Multicast) 스캐닝 물리적 차단
Zenoh는 초기 편의성을 위해 인접 네트워크의 라우터를 자동 탐색하는 스카우팅(Scouting) 기능이 기본 활성화되어 있다. 프로덕션 환경에서 이는 공격자의 네트워크 정찰(Reconnaissance) 및 타겟팅을 원활하게 하는 역효과를 초래한다.

// zenohd.json5 설정 파일 내 스카우팅 전면 비활성화
scouting: {
  // 프로덕션 에지 환경 적용 시 멀티캐스트를 통한 피어 탐색을 차단한다.
  multicast: { enabled: false }
}

2. 고정 피어(Fixed Peer) 토폴로지 강제
동적 피어 탐색(Scouting)을 차단한 후, 라우터 데몬은 사전 정의된 인가된 좌표(예: 중앙 관제 서버 IP)로만 통신 세션을 수립하도록 명시적 토폴로지(Topology)를 강제해야 한다.

// 오직 인증된 마스터 라우터의 엔드포인트 주소만을 명시적으로 허용한다.
connect: [
  "tls/198.51.100.5:7447"
]

3. 메모리 자원 고갈(OOM) 방어
악의적 액터가 비정상적으로 거대한 더미 페이로드를 Put 오퍼레이션으로 주입할 시, 라우터가 이를 버퍼링하는 과정에서 메모리 부족(OOM, Out of Memory) 패닉이 발생하여 서비스 거부(DoS) 상태에 빠질 수 있다. 한계 용량을 선언하여 이를 예방한다.

transport: {
  link: {
    scout: {
      // 10MB(10,485,760 Bytes) 이상의 초대형 패킷 인입 시 즉각 소켓 계층에서 파기(Drop)한다.
      max_message_size: 10485760 
    }
  }
}

상기 파라미터 최적화를 통해, 네트워크 스캐너에 반응하지 않고 인가된 통신만 수용하는 스텔스(Stealth) 인프라를 구축할 수 있다.

2. 리스너(Listener) 바인딩 제한 및 네트워크 인터페이스 격리

다중 네트워크 인터페이스 카드(NIC)가 장착된 에지 및 서버 환경(예: 공용 인터넷망 1개, 내부 폐쇄망 1개)에서는 라우터 데몬이 바인딩(Binding)될 네트워크 대역을 극도로 제한해야 한다.

1. 0.0.0.0 바인딩 금지 및 로컬 호스트(Localhost) 감금 전술
가장 빈번한 보안 사고는 listen: ["tcp/0.0.0.0:7447"]과 같이 모든 인터페이스(ANY)에 대한 수신 대기 상태를 허용하는 설정에서 기인한다. 단독 릴레이 용도이거나 동일 호스트 내 프로세스 간 브릿지(Bridge)로만 활용되는 라우터는 외부 위협 표면적(Attack Surface) 자체를 제거해야 한다.

// 루프백(Loopback) 주소에만 소켓을 바인딩하여 외부 네트워크의 접근을 원천 차단한다.
listen: ["tcp/127.0.0.1:7447"]

2. 특정 랜 카드(NIC) 강제 타겟팅 지정
모바일 로봇(AMR)이 외부 원격 제어용 5G 모뎀망(10.0.x.x)과 내부 라이다(LiDAR) 센서 직결용 폐쇄 랜망(192.168.1.1)을 동시 운용한다고 가정한다.
외부 침입자가 5G망을 경유하여 내부 제어 데몬에 접근하는 횡적 이동(Lateral Movement)을 차단하기 위해, 제어/수집 데몬은 오로지 격리된 내부 랜 카드의 IP 주소에만 소켓 바인딩을 허용해야 한다.

// 내부망 전용 NIC 인터페이스(192.168.1.1)로만 Zenoh 라우팅 포트를 활성화한다.
listen: ["tcp/192.168.1.1:7447"]

이는 호스트 방화벽(OS Firewall, iptables 등)의 룰셋 오류와 무관하게 애플리케이션 데몬 구동 단에서 물리적 격리를 달성하는 구조적 하드닝 기법이다.

graph TD
    classDef danger fill:#ffebee,stroke:#c62828,stroke-width:2px;
    classDef safe fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px;
    classDef router fill:#e1f5fe,stroke:#0277bd,stroke-width:2px;

    Ethernet(External 5G Network<br>IP: 10.0.0.5)
    LocalNIC(Internal Sensor Net<br>IP: 192.168.1.1)
    
    Hacker[External Attacker]:::danger
    Sensor[LiDAR Sensor]:::safe

    subgraph Edge_Device [Edge Robot Controller]
        Router{Zenoh Router Daemon}:::router
        ListenBad[Binding: tcp/0.0.0.0:7447]:::danger
        ListenGood[Binding: tcp/192.168.1.1:7447]:::safe
    end

    Hacker -->|Internet| Ethernet
    Sensor --> LocalNIC
    Ethernet --> ListenBad
    LocalNIC --> ListenBad
    LocalNIC --> ListenGood

    ListenBad -->|Path Exposed| Router
    ListenGood -->|Path Secured| Router

    Ethernet -.->|Dropped: Unbound Interface| ListenGood

3. 로컬 API 및 관리자 포트 접근 통제

Zenoh 라우터 기동 시, 시스템 형상(Configuration) 및 플러그인을 원격 제어할 수 있는 관리자(Admin) 전용 REST API 포트(초기값 8000)가 개방된다. 해당 포트가 탈취될 경우 시스템 전반의 통제권이 하이재킹(Hijacking)된다.

1. 프로덕션 환경 관리자 포트 전면 폐쇄
런타임 중 동적 설정 변경(Hot-Swapping) 등 원격 관리 로직이 강제되지 않는 파이프라인 전용 프로덕션 라우터의 경우, 구동 시부터 관리자 플러그인 모듈 자체를 적재하지 않거나 리스너 요소를 공란으로 비워 포트 개방을 원천 무효화해야 한다.

// zenohd.json5 관리자 플러그인 설정 블록
plugins: {
  admin: {
    listen: [] // Array를 공란으로 두어 포트 소켓 바인딩을 무력화한다.
  }
}

2. 통제된 관리망 강제 및 인증 인가 (HTTP Basic Auth)
원격 디버깅 및 ACL 핫 리로드(Hot-Reload)를 위하여 관리자 API 개방이 불가피할 경우, 외부망 인터페이스(0.0.0.0) 접근을 금지하고 반드시 루프백(Localhost) 인터페이스로만 바인딩을 제한해야 한다. 또한, 무인증(Unauthenticated) 접근을 방어하기 위해 암호 프롬프트를 강제 이행한다.

plugins: {
  admin: {
    // 로컬 시스템 내부 격리 및 외부 노출 회피
    listen: ["http/127.0.0.1:8000"],
    
    // HTTP Basic Auth 규격의 자격 증명 요구
    auth: {
      password: "Strong_Super_Secret_Admin_Password_2026" 
    }
  }
}

본 런북을 적용할 경우, 시스템 엔지니어가 라우터를 원격 제어하기 위해서는 반드시 일차적으로 인가된 SSH(Secure Shell) 터널링을 통해 대상 호스트 운영체제에 진입(Bastion Host 우회)한 뒤, 로컬 콘솔 명령(curl)을 경유해야만 마스터 스위치 제어가 가능한 이중화된 통제 구조를 확보하게 된다.