Ubuntu 20.04 Üzerinde Zaman Senkronizasyonunu Kurulumu ve Yönetimi
Zaman, modern bilişim sistemlerinin temel taşlarından biridir. Sunucular, istemciler, ağ cihazları ve uygulamalar arasında doğru ve senkronize bir zaman, operasyonel bütünlük, güvenlik ve veri tutarlılığı açısından hayati öneme sahiptir. Ubuntu 20.04 gibi bir Linux dağıtımında zaman senkronizasyonunun doğru bir şekilde yapılandırılması, sistem günlüklerinin doğru sıralanmasından, dağıtık sistemlerdeki işlemlerin düzgün çalışmasına, güvenlik protokollerinin (örneğin Kerberos) işlevselliğine ve hatta dosya sistemlerindeki zaman damgalarının doğruluğuna kadar pek çok alanda kritik rol oynar. Bu makalede, Ubuntu 20.04 üzerinde zaman senkronizasyonunun neden bu kadar önemli olduğunu açıklayacak, farklı senkronizasyon yöntemlerini (systemd-timesyncd ve Chrony) detaylı bir şekilde ele alacak ve kurulum, yapılandırma, doğrulama ve sorun giderme adımlarını adım adım inceleyeceğiz.
Zaman Senkronizasyonunun Önemi
Zaman senkronizasyonu, bilgisayar sistemlerinin saatlerini bir referans zaman kaynağına göre ayarlama işlemidir. Bu referans genellikle atom saatlerine bağlı NTP (Network Time Protocol) sunucuları aracılığıyla sağlanır. Doğru zamanın olmaması veya sistemler arasında zaman farklarının oluşması, bir dizi ciddi soruna yol açabilir:
* Günlük Kayıtları (Loglar): Güvenlik olayları, sistem hataları veya uygulama sorunları gibi olayların günlük kayıtları, farklı sistemlerde farklı zaman damgalarına sahip olduğunda analiz edilmesi ve korelasyonu imkansız hale gelir. Bu durum, sorun giderme ve adli bilişim çalışmalarını sekteye uğratır.
* Veri Tutarlılığı: Veritabanları ve dağıtık depolama sistemleri gibi uygulamalar, işlemlerin doğru sırasını belirlemek için zaman damgalarına güvenir. Zaman senkronizasyonu eksikliği, veri bozulmasına veya tutarsızlığına neden olabilir.
* Güvenlik: Kerberos gibi kimlik doğrulama protokolleri, belirli bir zaman penceresi içinde geçerli olan biletler kullanır. Sistem saatleri senkronize olmadığında, kimlik doğrulama başarısız olabilir veya güvenlik açıkları oluşabilir. TLS/SSL sertifikalarının geçerliliği de zaman damgalarına bağlıdır.
* Ağ Protokolleri: Bazı ağ protokolleri ve hizmetler, düzgün çalışmak için senkronize zamana ihtiyaç duyar. Örneğin, DNSSEC gibi güvenlik uzantıları zaman damgalarını kullanır.
* Yasal Uyumluluk: Bazı endüstriler ve düzenlemeler (örneğin, finans veya sağlık sektörü), yasal uyumluluk gereklilikleri kapsamında sistemlerin zamanının doğru bir şekilde senkronize edilmesini zorunlu kılar.
Ubuntu 20.04, modern Linux dağıtımlarında olduğu gibi, zaman senkronizasyonu için öncelikli olarak systemd-timesyncd hizmetini kullanır. Ancak daha gelişmiş ve hassas senkronizasyon gereksinimleri için Chrony gibi alternatifler de mevcuttur.
systemd-timesyncd ile Zaman Senkronizasyonu
systemd-timesyncd, systemd paketinin bir parçası olan hafif bir NTP istemcisidir. Ubuntu 20.04 masaüstü ve çoğu küçük sunucu kurulumu için varsayılan zaman senkronizasyon mekanizmasıdır. Hafif yapısı, düşük kaynak tüketimi ve basit yapılandırması sayesinde birçok kullanım senaryosu için yeterlidir.
systemd-timesyncd’nin Durumunu Kontrol Etme
Sisteminizde systemd-timesyncd‘nin etkin olup olmadığını ve mevcut zaman durumunu kontrol etmek için timedatectl komutunu kullanabilirsiniz:
timedatectl status
Bu komutun çıktısı aşağıdaki gibi olacaktır:
Local time: Cum 2023-10-27 10:30:00 +03
Universal time: Cum 2023-10-27 07:30:00 UTC
RTC time: Cum 2023-10-27 07:30:00
Time zone: Europe/Istanbul (+03, +0300)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
Burada System clock synchronized: yes ve NTP service: active ifadeleri, systemd-timesyncd‘nin çalıştığını ve zamanın başarıyla senkronize edildiğini gösterir. Eğer NTP service: inactive veya System clock synchronized: no görüyorsanız, hizmetin etkinleştirilmesi veya yapılandırmasının kontrol edilmesi gerekebilir.
systemd-timesyncd hizmetinin durumunu doğrudan kontrol etmek için:
systemctl status systemd-timesyncd
Eğer hizmet etkin değilse, aşağıdaki komutla etkinleştirebilirsiniz:
sudo systemctl enable --now systemd-timesyncd
systemd-timesyncd Yapılandırması
systemd-timesyncd varsayılan olarak Ubuntu’nun veya genel NTP havuzunun (örneğin ntp.ubuntu.com veya pool.ntp.org) sağladığı NTP sunucularını kullanır. Özel NTP sunucuları belirtmek isterseniz, /etc/systemd/timesyncd.conf dosyasını düzenlemeniz gerekir.
1. Yapılandırma dosyasını bir metin düzenleyici ile açın:
sudo nano /etc/systemd/timesyncd.conf
2. Dosya genellikle yorum satırlarıyla doludur. [Time] bölümünde NTP= satırını bulun veya ekleyin. Buraya kullanmak istediğiniz NTP sunucularının IP adreslerini veya alan adlarını boşluklarla ayırarak yazın:
[Time]
NTP=ntp.example.com 192.168.1.10 time.windows.com
#FallbackNTP=0.pool.ntp.org 1.pool.ntp.org
NTP= satırına eklediğiniz sunucular birincil olarak kullanılacaktır. FallbackNTP= satırı ise birincil sunuculara ulaşılamadığında kullanılacak yedek sunucuları belirtir. Genellikle NTP= yeterlidir.
3. Değişiklikleri kaydedip kapatın (Nano’da Ctrl+O, Enter, Ctrl+X).
4. Yapılandırma değişikliklerinin etkili olması için systemd-timesyncd hizmetini yeniden başlatın:
sudo systemctl restart systemd-timesyncd
5. Yeniden timedatectl status komutunu çalıştırarak senkronizasyonun durumunu tekrar kontrol edin. System clock synchronized: yes ve NTP service: active olarak görünmelidir.
systemd-timesyncd basit ve çoğu kullanım durumu için yeterli olsa da, yüksek hassasiyet, daha hızlı senkronizasyon, gelişmiş güvenlik özellikleri veya bir NTP sunucusu olarak çalışma yeteneği gerektiren durumlar için Chrony daha uygun bir seçenektir.
Chrony ile Gelişmiş Zaman Senkronizasyonu
Chrony, NTP protokolünü uygulayan, daha esnek ve gelişmiş bir NTP istemci ve sunucu uygulamasıdır. Özellikle sunucular, sanal makineler ve ağ koşullarının değişken olduğu ortamlar için systemd-timesyncd‘den daha iyi performans gösterir. Daha hızlı senkronizasyon, daha iyi saat istikrarı ve daha az sistem kaynağı tüketimi gibi avantajları vardır.
Chrony’nin Avantajları
* Daha Hızlı Senkronizasyon: Chrony, başlangıçta veya uzun bir bağlantı kesintisi sonrasında saati daha hızlı senkronize edebilir.
* Daha İyi Doğruluk: Değişken ağ gecikmelerine ve kesintilerine karşı daha dirençlidir, bu da daha doğru bir saat sağlar.
* Düşük Kaynak Tüketimi: Özellikle düşük bant genişliğine sahip veya aralıklı bağlantısı olan sistemler için daha verimlidir.
* Donanım Saati (RTC) Senkronizasyonu: Donanım saatini (BIOS/UEFI saati) sistem saatiyle senkronize etme yeteneğine sahiptir.
* Çevrimdışı Çalışma: NTP sunucularına erişim olmadığında bile saatin sapmasını tahmin ederek doğruluğunu korumaya çalışır.
* NTP Sunucusu Olarak Çalışma: Ağdaki diğer cihazlara zaman hizmeti sağlayabilir.
Chrony Kurulumu
Chrony varsayılan olarak Ubuntu 20.04’te yüklü gelmez, bu yüzden onu manuel olarak kurmanız gerekir.
1. Sisteminizin paket listesini güncelleyin:
sudo apt update
2. Chrony paketini kurun:
sudo apt install chrony
systemd-timesyncd’yi Devre Dışı Bırakma (Önemli!)
İki NTP istemcisinin aynı anda çalışması çakışmalara ve yanlış zaman senkronizasyonuna yol açabilir. Chrony‘yi kullanmaya karar verdiyseniz, systemd-timesyncd‘yi devre dışı bırakmanız çok önemlidir.
sudo timedatectl set-ntp false
Bu komut, timedatectl aracılığıyla NTP hizmetini devre dışı bırakır. Alternatif olarak, systemd komutlarıyla da yapabilirsiniz:
sudo systemctl disable --now systemd-timesyncd
Bu komut, systemd-timesyncd hizmetini durdurur ve bir daha sistem başlangıcında otomatik olarak başlamamasını sağlar.
Chrony Yapılandırması
Chrony‘nin ana yapılandırma dosyası /etc/chrony/chrony.conf adresindedir. Bu dosyayı düzenleyerek NTP sunucularını, senkronizasyon davranışını ve diğer ayarları yapılandırabilirsiniz.
1. Yapılandırma dosyasını bir metin düzenleyici ile açın:
sudo nano /etc/chrony/chrony.conf
2. NTP Sunucuları: Dosyada pool veya server direktiflerini bulacaksınız. Varsayılan olarak, Ubuntu’nun NTP havuzu sunucuları veya pool.ntp.org sunucuları listelenir. Kendi özel NTP sunucularınızı kullanmak isterseniz, mevcut pool satırlarını yorum satırı haline getirip kendi server direktiflerinizi ekleyebilirsiniz.
# Ubuntu'nun varsayılan havuz sunucuları
pool ntp.ubuntu.com iburst maxsources 4
pool 0.ubuntu.pool.ntp.org iburst maxsources 1
pool 1.ubuntu.pool.ntp.org iburst maxsources 1
pool 2.ubuntu.pool.ntp.org iburst maxsources 1
pool 3.ubuntu.pool.ntp.org iburst maxsources 1
# Veya kendi özel sunucularınızı ekleyin:
# server ntp.example.com iburst
# server 192.168.1.10 iburst
* pool: Bir NTP sunucuları havuzunu belirtir. Chrony bu havuzdan otomatik olarak en iyi sunucuları seçer.
* server: Tek bir belirli NTP sunucusunu belirtir.
* iburst: Chrony‘nin başlangıçta veya bir NTP sunucusuyla yeniden bağlantı kurduğunda daha hızlı senkronizasyon için daha fazla NTP paketi göndermesini sağlar.
* maxsources: Havuzdan kullanılacak maksimum sunucu sayısını belirler.
3. Başlangıç Senkronizasyonu (makestep): Chrony, küçük zaman kaymalarını yavaşça ayarlar. Ancak sistem saati çok fazla sapmışsa, hemen ayarlanması gerekebilir. makestep direktifi bunu sağlar. Genellikle ilk senkronizasyonda veya büyük bir saat farkında saati anında ayarlamak için kullanılır.
makestep 1 3
Bu, eğer saat farkı 1 saniyeden fazlaysa ve bu durum 3 kez üst üste gerçekleşirse, saatin anında ayarlanacağı anlamına gelir.
4. Donanım Saati (RTC) Senkronizasyonu (rtcsync): rtcsync direktifi, sistem saatinin periyodik olarak donanım saatine (gerçek zamanlı saat veya BIOS/UEFI saati) yazılmasını sağlar. Bu, sistem yeniden başlatıldığında donanım saatinin de doğru olmasını garanti eder.
rtcsync
5. NTP Sunucusu Olarak Çalışma (allow): Eğer bu Ubuntu makinesini ağınızdaki diğer cihazlar için bir NTP sunucusu olarak kullanmak istiyorsanız, allow direktifini kullanarak hangi IP adreslerinin veya ağların zaman sorgulamasına izin verildiğini belirtmelisiniz:
allow 192.168.1.0/24
Bu örnek, 192.168.1.0/24 ağı içindeki tüm cihazların bu sunucudan zaman almasına izin verir. Sadece belirli bir IP adresine izin vermek için allow 192.168.1.100 kullanabilirsiniz. Eğer bu makine sadece bir istemci olacaksa, bu satırı yorum satırı olarak bırakın veya silin.
6. Değişiklikleri Kaydetme: Değişiklikleri kaydedip dosyayı kapatın.
7. Chrony Hizmetini Başlatma ve Etkinleştirme: Yapılandırma değişikliklerinin etkili olması için Chrony hizmetini yeniden başlatın ve sistem başlangıcında otomatik olarak başlamasını sağlayın:
sudo systemctl enable --now chrony
Chrony Durumunu Doğrulama
Chrony‘nin düzgün çalışıp çalışmadığını ve senkronizasyon durumunu kontrol etmek için çeşitli chronyc komutları mevcuttur.
1. NTP Kaynaklarını Kontrol Etme: chronyc sources komutu, Chrony‘nin hangi NTP sunucularıyla iletişim kurduğunu ve bu sunucuların durumunu gösterir:
chronyc sources
Çıktı aşağıdaki gibi olacaktır:
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^+ 91.189.89.199 2 6 377 22 +117us[ +117us] +/- 14ms
^* 185.125.190.57 2 6 377 23 +108us[ +108us] +/- 13ms
^- 162.159.200.123 3 6 377 24 -122us[ -122us] +/- 16ms
* ^: Uzak sunucu
: Chrony‘nin şu anda senkronize olduğu sunucu
* +: Chrony tarafından seçilen aday sunucu
* ?: Senkronizasyon için uygun değil
* x: NTP sunucusu olarak reddedildi
* M: Manuel olarak işaretlenmiş
* Stratum: NTP sunucusunun katmanını gösterir (düşük sayı daha iyi doğruluk).
* Poll: Sorgulama aralığı (saniye cinsinden 2’nin üssü olarak).
* Reach: Son 8 sorgulamanın başarı durumunu gösteren sekizlik bir değer. 377 (oktal) = 11111111 (ikili), yani son 8 sorgu başarılı.
* LastRx: Son yanıtın alınmasından bu yana geçen saniye.
* Last sample: Son örnekteki zaman farkı.
2. Senkronizasyon Takibini Kontrol Etme: chronyc tracking komutu, sistem saatinin senkronizasyon durumu hakkında ayrıntılı bilgi verir:
chronyc tracking
Çıktı:
Reference ID : 4B7D2439 (185.125.190.57)
Stratum : 3
Ref time (UTC) : Fri Oct 27 07:30:00 2023
System time : 0.000000000 seconds fast of NTP time
Last offset : +0.000000000 seconds
RMS offset : 0.000000000 seconds
Frequency : 0.000 ppm slow
Residual freq : +0.000 ppm
Skew : 0.000 ppm
Root delay : 0.0100 seconds
Root dispersion : 0.0010 seconds
Update interval : 64.0 seconds
Leap status : Normal
* Reference ID: Senkronize olunan sunucunun kimliği.
* Stratum: Kendi sisteminizin NTP katmanı.
* System time: Sistem saatinin NTP zamanına göre ne kadar hızlı veya yavaş olduğunu gösterir. 0.000000000 seconds fast of NTP time ideal durumu gösterir.
* Leap status: Artık saniye durumu.
3. Diğer Faydalı chronyc Komutları:
* chronyc activity: NTP sunucusu etkinliğini gösterir.
* chronyc ntpdata: En iyi NTP sunucusundan alınan NTP verilerini gösterir.
* chronyc -n sources: IP adresleri yerine alan adlarını gösterir.
Güvenlik Duvarı Yapılandırması (NTP Sunucusu Olarak Kullanılıyorsa)
Eğer Ubuntu makinenizi ağınızdaki diğer cihazlara zaman hizmeti sağlayacak bir NTP sunucusu olarak yapılandırdıysanız, güvenlik duvarınızda NTP portunu (UDP 123) açmanız gerekir.
UFW (Uncomplicated Firewall) kullanıyorsanız:
sudo ufw allow ntp
sudo ufw enable # Eğer UFW etkin değilse
firewalld kullanıyorsanız (sunucu kurulumlarında daha yaygın olabilir):
sudo firewall-cmd --add-service=ntp --permanent
sudo firewall-cmd --reload
Bu adımlar, Chrony‘nin hem bir istemci olarak zamanı doğru bir şekilde senkronize etmesini hem de gerektiğinde bir sunucu olarak hizmet vermesini sağlayacaktır.
Zaman Dilimleri ve Donanım Saati (RTC)
Zaman senkronizasyonunun yanı sıra, doğru zaman diliminin ayarlanması ve donanım saatinin (Real-Time Clock – RTC) yönetimi de önemlidir.
Zaman Dilimini Ayarlama
timedatectl komutu, sistemin zaman dilimini ayarlamak için kullanılır. Mevcut zaman dilimlerini listelemek için:
timedatectl list-timezones
İstediğiniz zaman dilimini ayarlamak için (örneğin İstanbul için):
sudo timedatectl set-timezone Europe/Istanbul
Donanım Saati (RTC) Yönetimi
Donanım saati (BIOS/UEFI saati), bilgisayar kapalıyken bile zamanı tutan pille çalışan bir saattir. Linux sistemleri genellikle donanım saatini UTC (Coordinated Universal Time) olarak ayarlar ve yerel saati hesaplar. Bu, özellikle çift önyüklemeli sistemlerde (Linux ve Windows gibi) önemlidir. Windows genellikle donanım saatini yerel saate ayarlar.
* RTC’yi UTC olarak ayarla (Önerilen, Linux için standart):
sudo timedatectl set-local-rtc 0
* RTC’yi yerel saate ayarla (Çift önyüklemeli Windows sistemleri için):
sudo timedatectl set-local-rtc 1
timedatectl status çıktısında RTC in local TZ: no (UTC için) veya RTC in local TZ: yes (yerel saat için) ifadesini göreceksiniz. Chrony kullanıyorsanız ve rtcsync direktifi etkinse, Chrony periyodik olarak sistem saatini donanım saatine yazarak her ikisinin de senkronize kalmasını sağlar.
Sorun Giderme ve Yaygın Problemler
Zaman senkronizasyonu kurulumunda karşılaşabileceğiniz bazı yaygın sorunlar ve çözümleri:
* NTP Hizmeti Etkin Değil: timedatectl status çıktısında NTP service: inactive görüyorsanız, ilgili hizmetin (systemd-timesyncd veya chrony) etkinleştirildiğinden ve çalıştığından emin olun:
sudo systemctl status systemd-timesyncd # veya chrony
sudo systemctl enable --now systemd-timesyncd # veya chrony
* Birden Fazla NTP İstemcisi Çalışıyor: Aynı anda hem systemd-timesyncd hem de Chrony‘nin çalışması çakışmalara neden olur. Sadece birini kullanın ve diğerini devre dışı bırakın (yukarıda açıklandığı gibi timedatectl set-ntp false veya systemctl disable --now).
* Ağ Bağlantısı Sorunları: NTP sunucularına erişilemiyor olabilir. Ağ bağlantınızı kontrol edin ve NTP sunucularının pinglenebilir olduğundan emin olun.
ping ntp.ubuntu.com # veya yapılandırdığınız NTP sunucusu
* Güvenlik Duvarı Engeli: Eğer bir güvenlik duvarı kullanıyorsanız, UDP port 123’ün (NTP portu) giden bağlantılar için açık olduğundan emin olun. Eğer makineniz bir NTP sunucusu olarak hizmet veriyorsa, gelen bağlantılar için de açık olmalıdır.
sudo ufw status verbose # UFW için
sudo firewall-cmd --list-all # firewalld için
* Büyük Saat Farkı: Sistem saati NTP sunucularından çok fazla sapmışsa, Chrony yavaşça ayarlamak yerine makestep ile anında ayarlayabilir. Eğer makestep yapılandırılmamışsa veya sorun devam ediyorsa, hizmeti yeniden başlatmak yardımcı olabilir:
sudo systemctl restart chrony
* Günlük Kayıtlarını Kontrol Etme: Sorunları teşhis etmek için systemd günlüklerini inceleyin:
journalctl -u systemd-timesyncd # systemd-timesyncd için
journalctl -u chrony # chrony için
Hata mesajları veya uyarılar, sorunun kökeni hakkında ipuçları verebilir.
Güvenlik Hususları
Zaman senkronizasyonunda güvenlik de göz önünde bulundurulmalıdır:
* Güvenilir NTP Sunucuları Kullanın: NTP sunucularınızı dikkatlice seçin. Genellikle pool.ntp.org veya ülkenize özel NTP havuzları güvenilirdir. Kendi ağınızda bir NTP sunucusu kullanıyorsanız, o sunucunun güvenliğinden emin olun.
* NTP Amplifikasyon Saldırıları: Eğer sisteminiz bir NTP sunucusu olarak hizmet veriyorsa, allow direktifini kullanarak sadece belirli IP adreslerinin veya ağların sunucuya erişmesine izin verin. Açık bir NTP sunucusu, DDoS saldırılarında amplifikasyon vektörü olarak kullanılabilir.
* NTPsec: Daha yüksek güvenlik gereksinimleri olan ortamlar için NTPsec gibi daha güvenli NTP uygulamaları mevcuttur. NTPsec, NTP protokolünün bilinen güvenlik açıklarını gidermeye odaklanır. Ancak çoğu genel kullanım durumu için Chrony yeterince güvenlidir.
Sonuç
Ubuntu 20.04 üzerinde zaman senkronizasyonu, modern bilişim altyapısının vazgeçilmez bir parçasıdır. Bu makalede, systemd-timesyncd ve Chrony olmak üzere iki temel zaman senkronizasyon mekanizmasını ayrıntılı olarak inceledik.
* systemd-timesyncd: Masaüstü kullanıcıları ve küçük sunucular için basit, hafif ve yeterli bir çözümdür. Varsayılan olarak etkindir ve temel yapılandırma ihtiyaçları için kolayca ayarlanabilir.
* Chrony: Daha yüksek doğruluk, daha hızlı senkronizasyon, gelişmiş özellikler ve bir NTP sunucusu olarak çalışma yeteneği arayan sunucu yöneticileri ve karmaşık ortamlar için önerilir. Kurulumu biraz daha fazla adım gerektirir ancak sunduğu avantajlar bu çabaya değerdir.
Her iki durumda da, doğru NTP sunucularını seçmek, hizmetlerin doğru şekilde etkinleştirildiğinden ve yapılandırıldığından emin olmak ve güvenlik duvarı ayarlarını gözden geçirmek kritik öneme sahiptir. Zaman dilimi ayarları ve donanım saati yönetimi de, sisteminizin genel zaman doğruluğu için tamamlayıcı adımlardır. Bu adımları takip ederek, Ubuntu 20.04 sistemlerinizin her zaman doğru ve senkronize bir zamana sahip olmasını sağlayabilir, böylece operasyonel bütünlüğü, veri tutarlılığını ve güvenliği garanti altına alabilirsiniz.