NTP로 관리하는 네트워크 시간 동기화와 보안

NTP의 Stratum 구조와 시간 계산 방식, 서버·클라이언트 구성, monlist DDoS 위험 및 Linux 운영 설정을 정리한다.

2026-08-15 · 최초 발행 2025-08-10

시간 오차가 로그와 트랜잭션의 순서를 바꾼다

분산된 시스템에서는 같은 사건도 각 장비의 시간이 다르면 서로 다른 순서로 기록된다. 로그 분석, 트랜잭션 순서 판별, 보안 인증이 시간 동기화에 의존하는 이유다. NTP(Network Time Protocol)는 네트워크에 연결된 컴퓨터의 시간을 밀리초(ms) 단위로 맞추기 위한 표준 프로토콜이다.

NTP는 1985년 데이비드 밀스(David L. Mills)가 개발했으며 RFC 958에서 처음 정의됐다. NTP 버전 4의 사양은 RFC 5905에 정의돼 있다. UDP 123번 포트를 사용하고, 네트워크 전체가 공통의 시간 기준을 유지하도록 Stratum 계층을 둔다.

Stratum 계층에서 시간원을 내려보내는 방식

NTP의 시간 기준은 상위 계층에서 하위 계층으로 전달된다. Stratum은 이 경로에서 시간원의 거리를 나타내는 계층 구조다.

Stratum 0: 원자시계/GPSStratum 1: Primary TimeServerStratum 2: Secondary TimeServerStratum 3: ClientStratum 3: ClientStratum 2: Secondary TimeServerStratum 3: ClientStratum 3: Client

Stratum 0은 원자시계나 GPS처럼 매우 정확한 시간을 제공하는 레퍼런스 시계다. 이 장치에 직접 연결된 Stratum 1 서버는 보통 100마이크로초 이내의 정확도를 유지한다. Stratum 2~15는 상위 Stratum 서버에서 시간을 받아 동기화하는 서버 또는 클라이언트에 해당한다.

요청과 응답 사이의 지연을 함께 계산한다

클라이언트는 타임스탬프가 담긴 요청 패킷을 서버에 보낸다. 서버는 자신의 타임스탬프를 추가해 응답하고, 클라이언트는 왕복 지연을 계산해 시간 차이를 보정한다. 여러 서버의 시간 정보를 받았다면 필터링과 선택 과정을 거쳐 가장 정확한 시간을 고른다.

ServerClientServerClientT4: 클라이언트 도착 시간오프셋 = ((T2-T1)+(T3-T4))/2지연 = (T4-T1)-(T3-T2)요청 (T1: 클라이언트 출발 시간)응답 (T2: 서버 도착 시간, T3: 서버 출발 시간)

이 교환에서 T1은 클라이언트의 출발 시간, T2와 T3는 서버의 도착·출발 시간, T4는 클라이언트의 도착 시간이다. 오프셋은 ((T2-T1)+(T3-T4))/2로, 지연은 (T4-T1)-(T3-T2)로 계산한다.

서버와 클라이언트가 맡는 역할

시간을 제공하는 NTP 서버는 공용 NTP 서버 풀, 조직 내부의 로컬 NTP 서버, GPS 수신기 등을 내장한 하드웨어 NTP 서버로 구성할 수 있다. 공용 풀의 예로는 pool.ntp.org가 있다.

클라이언트 기능은 운영체제에도 포함돼 있다. Windows는 Windows Time 서비스(w32time)를 사용하며, Linux/Unix에서는 ntpd, chronyd 등을 사용할 수 있다. macOS에는 timed 서비스가 있다.

Windows는 Windows Time Service를 통해 NTP를 관리한다.

# NTP 서버 설정
w32tm /config /syncfromflags:manual /manualpeerlist:"0.pool.ntp.org 1.pool.ntp.org"

# 시간 서비스 재시작
net stop w32time && net start w32time

# 상태 확인
w32tm /query /status

동기화 관계는 클라이언트/서버 모드만으로 한정되지 않는다. 기본적인 요청·응답 방식 외에, 두 피어가 서로 시간을 맞추는 대칭 모드와 서버가 시간 정보를 브로드캐스트하는 브로드캐스트 모드도 있다.

시간 서버는 DDoS 경로가 될 수 있다

NTP의 monlist 명령어는 DDoS 증폭 공격에 악용될 수 있는 취약점이다. 이 명령은 NTP 서버에 최근 접속한 클라이언트 목록을 요청하며, 작은 요청 패킷으로 큰 응답을 유발한다. 증폭률은 최대 200배 이상이다.

소스 IP 위조증폭된 응답공격자취약한 NTP 서버피해자

대응에는 NTP 버전 4.2.7 이상으로의 업그레이드 또는 noquery 옵션 설정이 포함된다. 중간자 공격을 통한 시간 조작, 가짜 NTP 서버의 악의적인 시간 정보 제공도 고려해야 한다. NTP 인증 기능을 활성화하고 다중 시간 소스를 사용하면 이런 위험에 대응할 수 있다.

외부 시간원과 내부 시스템을 분리하는 구성

대규모 기업 환경에서는 외부 NTP 풀과 내부 클라이언트를 직접 연결하기보다 DMZ의 NTP 서버와 내부 NTP 서버를 계층으로 둔다.

외부 NTPDMZ의 NTP 서버내부 NTP 서버 1내부 NTP 서버 2사내 클라이언트 그룹 1사내 클라이언트 그룹 2

이 구조는 외부 NTP 서버 의존도를 낮추고 내부 시간 동기화 정확도를 높이며, 보안 경계를 유지하는 데 쓰인다.

금융 거래 시스템에서는 시간 정확도가 특히 중요하다. 마이크로초 단위의 고정밀 타임스탬프로 거래 시간을 기록하고, 여러 독립적인 시간 소스를 사용하며, 시간 동기화 이벤트를 상세히 로깅해 감사 추적에 활용한다. 금융 거래는 밀리초 단위의 정확한 시간 기록이 필요하고, 고빈도 거래(HFT) 환경에서는 나노초 수준의 정확도가 요구된다. 미국 FINRA(금융산업규제기구)는 모든 증권거래가 UTC 기준으로 50ms 이내의 정확도를 유지하도록 규정하고 있다.

대규모 분산 시스템에서는 로그 분석, 장애 추적, 트랜잭션 정합성을 위해 시간 동기화가 필요하다. AWS, Azure, GCP 등 주요 클라우드 제공업체는 인스턴스 간 시간 동기화를 지원하는 자체 NTP 서비스를 제공한다. 5G 네트워크와 같은 최신 통신 시스템은 마이크로초 수준의 정확한 시간 동기화를 요구하며, 기지국 간 핸드오버, 패킷 라우팅, QoS 보장도 정확한 시간 기준에 의존한다.

Linux 설정과 동기화 상태 확인

Linux 환경의 ntp.conf는 다음과 같이 구성할 수 있다.

# ntp.conf 예시
server 0.pool.ntp.org iburst
server 1.pool.ntp.org iburst
driftfile /var/lib/ntp/drift
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery

운영 중에는 ntpq -p로 피어 상태를 확인할 수 있다.

ntpstat은 NTP 동기화 상태 확인에 사용한다. 엔터프라이즈 환경에서는 Nagios/Zabbix 플러그인으로 NTP 상태를 모니터링할 수 있다.

가상화 환경에서 달라지는 시간 관리

NTPv1은 RFC 958로 1985년에 최초 표준화됐다. NTPv2는 RFC 1119로 1989년에 인증 메커니즘을 추가했고, NTPv3는 RFC 1305로 1992년에 필터링 알고리즘을 개선하며 대중화됐다. NTPv4는 RFC 5905로 2010년에 표준화됐으며 확장성, 정확도, 보안을 개선한 현재 표준이다.

NTPv4는 보안 강화와 성능 개선을 포함한다. NTS(Network Time Security)는 NTP를 위한 암호화 및 인증 확장이며, 더 높은 정밀도가 필요한 경우에는 PTP(Precision Time Protocol)를 고려할 수 있다. PTP는 IEEE 1588 표준으로, 하드웨어 지원으로 마이크로초~나노초 수준의 시간 동기화를 제공하며 금융 거래, 통신 네트워크, 산업 자동화에 활용된다. Chrony는 NTP 프로토콜의 현대적 구현체다. 간헐적으로만 네트워크에 연결되는 환경에서도 효과적으로 동기화하며, 시스템 시간 변화를 완만하게 조정한다.

클라우드에서는 가상화 계층의 시간 드리프트, 컨테이너화된 애플리케이션의 시간 동기화 전략, 서버리스 컴퓨팅에서의 정확한 시간 관리가 별도 과제가 된다. 분산화와 클라우드 전환이 진행될수록 NTP의 동작 방식과 보안 설정은 시스템 관리자와 네트워크 엔지니어가 계속 점검해야 할 운영 영역이다.

NTP시간 동기화네트워크보안시스템 운영