Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:time_protocol_archlinux

Time Protocol ArchLinux

Das sogenannte Time Protocol ist im RFC868 - deutsch beschrieben und ist eine ältere Möglichkeit, einen Zeitserver zu realisieren, ähnlich wie das NTP (Network Time Protocol) jedoch mit anderer Protokoll-Spezifikation, entwickelt um die einzelnen Uhren jedes an ein Netzwerk angeschlossenen Computers, synchron zu halten. Alle in diesem Netzwerk befindlichen Computer, haben dann eine einheitliche Zeit, wenn diese an der Verteilung der Zeitinformationen eines sogenannten „Zeitservers“, teilnehmen.

Es kann unter Umständen sehr wichtig sein, das alle Computer in einem Netzwerk die selbe Zeit zur Verfügung haben, da sonst z.B. der Austausch von DNS Informationen, bei einer zu hoher Zeitabweichung der einzelnen am DNS beteiligten Computer, nicht durchgeführt werden kann.

Das „Time Protocol“ sieht eine Website-unabhängige, maschinenlesbare Datum- und Zeitübermittlung vor. Der „Zeitserver“ sendet die Zeit, gerechnet in Sekunden seit Mitternacht des 1. Januar 1900, als 32-Bit-Binärzahl.

Um einen „Zeitserver“ im Time Protocol unter ArchLinux zu realisieren, kann der xinetd-Dienst/Daemon verwendet werden. Nachfolgen soll veranschaulicht werden, wie unter Zuhilfenahme des xinetd-Dienstes/Daemon dies realisiert werden kann.

:!: HINWEIS - Nachfolgend soll die Installation eines „Zeitservers“ für eine privates Netzwerk beschrieben werden!

Ab hier werden zur Ausführung nachfolgender Befehle root-Rechte benötigt. Um der Benutzer root zu werden, melden Sie sich bitte als root-Benutzer am System an, oder wechseln mit nachfolgendem Befehl zum Benutzer root:

$ su -
Password:

Installation

Zur Installation eines „Zeitservers“ wird nachfolgendes Paket benötigt:

  • xinetd - ist im extra-Repository von ArchLinux enthalten

installiert werden.

Um eine „Zeitabfrage“ gegen den „Zeitserver“ durchführen zu können, kann das Paket

installiert werden.

Mit nachfolgendem Befehl, wird das Pakete xinetd installiert:

# pacman --noconfirm -S xinetd

Installationsverlauf

Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket xinetd installiert wurden.

# pacman -Qil xinetd

Installierte Dateien

Mit nachfolgendem Befehl, wird das Pakete rdate installiert:

# pikaur --noconfirm -S rdate

Installationsverlauf

Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket rdate installiert wurden.

# pikaur -Qil rdate

Installierte Dateien

Konfiguration

Um einen „Zeitserver“, welcher als Dienst/Deamon als Hintergrundprozess läuft, auch nach einem Neustart des Servers zur Verfügung zu haben, soll der Dienst/Daemon mit dem Server mit gestartet werden, was mit nachfolgendem Befehl eingerichtet werden kann:

# systemctl enable xinetd.service
Created symlink /etc/systemd/system/multi-user.target.wants/xinetd.service → /usr/lib/systemd/system/xinetd.service.

Eine Überprüfung, ob beim Neustart des Server der xinetd-Dienst/Deamon wirklich mit gestartet wird, kann mit nachfolgendem Befehl erfolgen und sollte eine Anzeige, wie ebenfalls nachfolgend dargestellt ausgeben:

# systemctl list-unit-files --type=service | grep -E ^xinetd
xinetd.service                             enabled         disabled

bzw.

# systemctl is-enabled xinetd.service
enabled

Der Dienst/Deamon xinetd.service sollte aktuelle nicht gestartet sein, was mit nachfolgendem Befehl überprüft werden kann:

# systemctl status xinetd
● xinetd.service - A secure replacement for inetd
     Loaded: loaded (/usr/lib/systemd/system/xinetd.service; enabled; vendor pr>
     Active: inactive (dead)

:!: HINWEIS - Ein Start des Dienstes/Deamons xinetd.service, sollte erst nach nachfolgender Konfiguration erfolgen!

/etc/xinetd.d

Mit nachfolgendem Befehl, kann in das Konfigurationsverzeichnis

  • /etc/xinetd.d

gewechselt werden:

# cd /etc/xinetd.d

Innerhalb des Verzeichnisses, dessen Inhalt mit nachfolgendem Befehl aufgelistet werden kann und eine Ausgabe in etwa wie nachfolgende erzeugen sollte,

# ls -l /etc/xinetd.d
total 52
-rw-r--r-- 1 root root 293 Aug 17 14:48 chargen
-rw-r--r-- 1 root root 313 Aug 17 14:48 chargen-udp
-rw-r--r-- 1 root root 293 Aug 17 14:48 daytime
-rw-r--r-- 1 root root 313 Aug 17 14:48 daytime-udp
-rw-r--r-- 1 root root 293 Aug 17 14:48 discard
-rw-r--r-- 1 root root 312 Aug 17 14:48 discard-udp
-rw-r--r-- 1 root root 285 Aug 17 14:48 echo
-rw-r--r-- 1 root root 304 Aug 17 14:48 echo-udp
-rw-r--r-- 1 root root 253 Aug 17 14:48 servers
-rw-r--r-- 1 root root 254 Aug 17 14:48 services
-rw-r--r-- 1 root root 158 Sep  6 17:32 tftp
-rw-r--r-- 1 root root 319 Aug 17 14:48 time
-rw-r--r-- 1 root root 313 Aug 17 14:48 time-udp

sind die beiden Konfigurationsdateien

  • /etc/xinetd.d/time
  • /etc/xinetd.d/time-udp

von Bedeutung!

Änderungen und persönliche Anpassungen sind mit einem voranstehenden Kommentar, welche wie nachfolgend dargestellt aussieht

# Tachtler

gekennzeichnet.

/etc/xinetd.d/time

Nachfolgend dargestellte Änderungen sollten an der Konfigurationsdatei durchgeführt werden (komplette Konfigurationsdatei):

# default: off
# description: An RFC 868 time server. This is the tcp version,
# which is used by rdate.
 
service time
{
    type        = INTERNAL
    id          = time-stream
    socket_type = stream
    protocol    = tcp
    user        = root
    wait        = no
    # Tachtler
    # default:  disable     = yes
    disable     = no
}

/etc/xinetd.d/time-udp

Nachfolgend dargestellte Änderungen sollten an der Konfigurationsdatei durchgeführt werden (komplette Konfigurationsdatei):

# default: off
# description: An RFC 868 time server. This is the udp version.
 
service time
{
    type        = INTERNAL UNLISTED
    id          = time-dgram
    socket_type = dgram
    protocol    = udp
    user        = root
    wait        = yes
    # Tachtler
    # default: disable      = yes
    disable     = no
    port        = 37
}

iptables Regel

:!: WICHTIG - Nur relevant beim Einsatz von iptables als Firewall!

Damit der „Zeitserver“ auch erreichbar ist und nicht die Weitergab der Zeitinformationen via Time Protocol vom Paketfilter iptables blockiert wird, muss nachfolgende Regel zum iptables-Regelwerk hinzugefügt werden.

Um die aktuellen iptables-Regeln erweitern zu können, sollten diese erst einmal aufgelistet werden, was mit nachfolgendem Befehl durchgeführt werden kann:

# iptables -L -nv --line-numbers
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1     2420  321K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
2        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0
3        0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
4        1    60 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
5       28   896 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT 2246 packets, 823K bytes)
num   pkts bytes target     prot opt in     out     source               destination

Nachfolgende Befehle, fügen folgende iptables-Regeln dem iptables-Regelwerk nach der Position 4 hinzu, ohne das der Paketfilter angehalten werden muss:

  • -A INPUT -p tcp --dport 37 -j ACCEPT
  • -A INPUT -p udp --dport 37 -j ACCEPT

und hier die Befehle:

# iptables -I INPUT 4 -p tcp --dport 37 -j ACCEPT
# iptables -I INPUT 4 -p udp --dport 37 -j ACCEPT

Ein erneute Abfrage des iptables-Regelwerts, sollte dann nachfolgend dargestellte Ausgabe ergeben, was mit folgendem Befehl durchgeführt werden kann:

# iptables -L -nv --line-numbers
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1     2571  334K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
2        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0
3        0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
4        1    60 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
5        0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp dpt:37
6        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:37
7       31   992 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT 6 packets, 800 bytes)
num   pkts bytes target     prot opt in     out     source               destination

Die neuen Zeilen sind an Position 5 und Postition 6 zu sehen, hier nachfolgend zur Verdeutlichung noch einmal dargestellt (nur relevanter Ausschnitt):

...
5        0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp dpt:37
6        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:37
...

Um diese iptables-Regel dauerhaft, auch nach einem Neustart des Server, weiterhin im iptables-Regelwerk zu speichern, muss nachfolgend dargestellter Befehl abschließend noch ausgeführt werden:

# iptables-save -f /etc/iptables/iptables.rules

Zeitserver starten

Um einen „Zeitserver“ zu starten muss der xinetd-Dienst/Deamon mit nachfolgendem Befehl gestartete werden:

# systemctl start xinetd.service

Ob der „Zeitserver“, sprich der xinetd-Dienst/Deamon auch tatsächlich als Hintergrundprozess läuft, kann mit nachfolgendem Befehl überprüft werden (Es sollte eine Ausgabe wie nachfolgend dargestellt, erfolgen - es kommt auf die zweite Zeile an!):

# ps auxwf | grep xinetd
root        8334  0.0  0.1   6684  2336 pts/1    S+   11:21   0:00                      \_ grep xinetd
root        8332  0.4  0.1   8720  2980 ?        Ss   11:20   0:00 /usr/bin/xinetd -dontfork

bzw. nachfolgendem Befehl überprüft werden:

# systemctl status xinetd.service
● xinetd.service - A secure replacement for inetd
     Loaded: loaded (/usr/lib/systemd/system/xinetd.service; enabled; vendor pr>
     Active: active (running) since Thu 2020-12-31 11:20:59 CET; 24s ago
   Main PID: 8332 (xinetd)
      Tasks: 1 (limit: 2358)
     Memory: 484.0K
     CGroup: /system.slice/xinetd.service
             └─8332 /usr/bin/xinetd -dontfork

Dec 31 11:20:59 vml010 xinetd[8332]: Reading included configuration file: /etc/>
Dec 31 11:20:59 vml010 xinetd[8332]: Reading included configuration file: /etc/>
Dec 31 11:20:59 vml010 xinetd[8332]: Reading included configuration file: /etc/>
Dec 31 11:20:59 vml010 xinetd[8332]: Reading included configuration file: /etc/>
Dec 31 11:20:59 vml010 xinetd[8332]: Reading included configuration file: /etc/>
Dec 31 11:20:59 vml010 xinetd[8332]: Reading included configuration file: /etc/>
Dec 31 11:20:59 vml010 xinetd[8332]: Reading included configuration file: /etc/>
Dec 31 11:20:59 vml010 xinetd[8332]: Reading included configuration file: /etc/>
Dec 31 11:20:59 vml010 xinetd[8332]: 2.3.15.4 started with loadavg options comp>
Dec 31 11:20:59 vml010 xinetd[8332]: Started working: 2 available services

Auf welchen Ports der chronyd-Dienst/Deamon auch tatsächlich als Hintergrundprozess lauscht, kann mit nachfolgendem Befehl überprüft werden:

# ss -taubpn | grep xinetd
udp   UNCONN 0      0                   *:37               *:*     users:(("xinetd",pid=8332,fd=6))
tcp   LISTEN 0      64                  *:37               *:*     users:(("xinetd",pid=8332,fd=5))

Zeitserver überprüfen

Unter Zuhilfenahme des Befehls rdate, kann überprüft werden, ob der „Zeitserver“ zur Auslieferung der Zeit im Stande ist.

Nachfolgende Befehle, können auf dem Server auf dem der „Zeitserver“ läuft, oder auf einem sich im Netzwerk befindlichen Server durchgeführt werden:

Befehl zu Abfrage gegen den Zeitserver via TCP:

# rdate 192.168.0.20
rdate: [192.168.0.20]	Thu Dec 31 11:28:39 2020

Befehl zu Abfrage gegen den Zeitserver via UDP:

# rdate -u 192.168.0.20
rdate: [192.168.0.20]	Thu Dec 31 11:29:05 2020
Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
tachtler/time_protocol_archlinux.txt · Zuletzt geändert: 2022/03/31 05:27 von klaus