Linux Enginner

리눅스의 대한 모든 지식들을 공유하고 배울 수 있는 블로그입니다.

리눅스에서 NTP 서버 설정하여 시간 동기화

리눅스 시스템에서 시간을 정확하게 동기화하는 것은 서버 운영과 관련된 중요한 작업 중 하나입니다. 시스템 시간이 틀어지면 여러 가지 문제가 발생할 수 있는데, 예를 들어 로그 파일이 정확하지 않거나, 일정한 시간에 실행해야 하는 작업이 제대로 실행되지 않을 수 있습니다. 그래서 NTP(Network Time Protocol) 서버를 설정하여 시스템 시간을 정확하게 동기화하는 방법에 대해 알아보겠습니다.

 

NTP 서버란 무엇인가?

NTP(Network Time Protocol)는 컴퓨터 시스템 간에 시간을 동기화하는 데 사용되는 프로토콜입니다. 이는 인터넷 또는 로컬 네트워크를 통해 정확한 시간을 동기화하기 위해 사용되며, 서버는 "시간 서버" 또는 "NTP 서버"라고 불립니다. 이러한 서버들은 원자시계나 GPS 장비와 연결되어 매우 정확한 시간을 제공합니다.

 

왜 NTP 서버가 중요한가?

시간 동기화는 단순히 서버나 컴퓨터의 시계를 맞추는 것 이상입니다. 정확한 시간이 없으면 데이터베이스, 웹 서버, 클라우드 서비스 등에서 발생하는 작업들이 잘못 처리될 수 있습니다. 또한 보안적인 측면에서도 중요한데, 잘못된 시간이 로그에 기록되면 해커가 침입한 증거를 숨길 수 있기 때문에 시간을 정확히 맞추는 것은 필수적입니다.

 

리눅스에서 NTP 서버 설정하기

리눅스에서 NTP 서버를 설정하는 방법은 크게 두 가지로 나눌 수 있습니다. 하나는 ntpd 서비스(전통적인 방법)를 사용하는 것이고, 다른 하나는 chrony를 사용하는 방법입니다. chrony는 비교적 최신의 NTP 동기화 서비스로, 더 빠르고 정확한 시간 동기화를 제공합니다.

 

1. ntpd를 이용한 NTP 서버 설정

NTP 서버 설치

우선, ntpd를 설치해야 합니다. 대부분의 리눅스 배포판에서는 기본적으로 제공되므로, 설치만 하면 됩니다.

 

sudo apt update
sudo apt install ntp

NTP 서버 설정 파일 수정

설치가 완료되면, NTP 서버 설정 파일을 수정해야 합니다. 이 파일은 /etc/ntp.conf에 위치하고 있으며, 여기서 시간 서버를 지정할 수 있습니다.

 

sudo nano /etc/ntp.conf

설정 파일 안에서 server 항목을 찾아 시간을 동기화할 서버를 지정합니다. 예를 들어, 공용 NTP 서버를 사용할 경우 다음과 같이 설정할 수 있습니다:

 

server 0.pool.ntp.org
server 1.pool.ntp.org
server 2.pool.ntp.org

이렇게 하면 리눅스 시스템이 pool.ntp.org에서 제공하는 시간 서버와 동기화됩니다. 공용 NTP 서버 외에도 특정 NTP 서버를 사용할 수도 있습니다.

 

NTP 서비스 시작 및 활성화

설정을 마친 후에는 NTP 서비스를 시작하고 부팅 시 자동으로 시작되도록 설정해야 합니다.

 

sudo systemctl start ntp
sudo systemctl enable ntp

NTP 서버 상태 확인

NTP 서버가 정상적으로 작동하는지 확인하려면 다음 명령어를 사용하여 동기화 상태를 확인할 수 있습니다.

 

ntpq -p

이 명령어는 NTP 서버와 동기화된 상태를 표시합니다. 출력 결과에서 서버의 상태와 동기화 정확도를 확인할 수 있습니다.

 

2. chrony를 이용한 NTP 서버 설정

Chrony 설치

chrony는 최신 NTP 서버 동기화 도구로, ntpd보다 더 빠르고 정확한 동기화를 제공합니다. chrony를 설치하려면 아래 명령어를 입력합니다:

 

sudo apt update
sudo apt install chrony

Chrony 설정 파일 수정

설치가 완료되면 chrony의 설정 파일을 수정해야 합니다. 설정 파일은 /etc/chrony/chrony.conf에 위치합니다.

 

sudo nano /etc/chrony/chrony.conf

설정 파일 내에서 server 항목을 찾아 동기화할 NTP 서버를 지정합니다. 예를 들어, 다음과 같이 공용 NTP 서버를 지정할 수 있습니다:

 

server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst

이 설정을 통해 chrony는 지정된 NTP 서버와 동기화됩니다.

 

Chrony 서비스 시작 및 활성화

설정을 마친 후에는 chrony 서비스를 시작하고 자동으로 부팅 시 실행되도록 설정합니다.

 

sudo systemctl start chrony
sudo systemctl enable chrony

Chrony 상태 확인

chrony가 제대로 동기화되고 있는지 확인하려면 다음 명령어를 사용합니다:

 

chronyc tracking

이 명령어는 chrony가 동기화한 시간의 정확도와 상태를 확인할 수 있게 해줍니다.

 

NTP 서버와 클라이언트 동기화 상태 확인

NTP 서버가 제대로 동기화되었는지 확인하는 것은 중요합니다. 이를 확인하는 방법은 간단합니다.

 

ntpq 명령어 사용

ntpq -p 명령어는 서버와 동기화된 상태를 출력해줍니다. 만약 동기화된 서버가 표시되면 정상적으로 작동하고 있다는 의미입니다.

 

ntpq -p

chronyc 명령어 사용

chronyc를 사용할 경우, chronyc tracking 명령어를 통해 동기화 상태를 확인할 수 있습니다.

 

chronyc tracking

이 명령어는 동기화 상태, 오차 및 정확도를 보여줍니다.

 

NTP 서버 보안 강화

NTP 서버를 설정할 때 보안을 강화하는 것이 중요합니다. 기본적인 보안 설정을 통해 서버의 무단 접근을 방지할 수 있습니다.

 

방화벽 설정

리눅스 서버에서 NTP 포트인 123번 포트를 열어야 동기화가 가능합니다. 하지만 불필요한 네트워크 공격을 막기 위해 방화벽을 설정하는 것이 좋습니다. ufw를 사용하여 NTP 포트를 열 수 있습니다:

 

sudo ufw allow 123/udp

접속 제한 설정

/etc/ntp.conf 또는 /etc/chrony/chrony.conf에서 특정 IP 주소에서만 접속할 수 있도록 제한을 설정할 수 있습니다. 예를 들어, restrict 옵션을 사용하여 특정 네트워크 대역만 허용할 수 있습니다.

 

restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

이렇게 설정하면 192.168.1.0/24 네트워크에서만 NTP 서버에 접근할 수 있습니다.

 

결론

리눅스에서 NTP 서버를 설정하여 시간 동기화를 하는 것은 서버의 안정성과 보안을 유지하는 데 매우 중요한 작업입니다. ntpdchrony를 이용한 방법은 각각의 장단점이 있지만, 두 가지 모두 시간 동기화의 정확도를 높여줍니다. 또한, NTP 서버를 설정하면서 보안에 신경 쓰는 것이 중요하며, 불필요한 접근을 막는 설정을 추가해야 합니다.

 

시간은 단순한 숫자가 아니며, 서버와 서비스의 정확성과 신뢰성을 보장하는 핵심 요소입니다. 따라서 주기적으로 NTP 서버가 제대로 동기화되고 있는지 확인하는 것이 좋습니다.

 


추가 팁: 리눅스 시스템에서 NTP 서버를 설정할 때, 서버와 클라이언트 간의 네트워크 지연 시간이나 장애를 고려해 다양한 설정을 시도해보는 것도 좋은 방법입니다.