Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:time_protocol_centos_7

Time Protocol CentOS 7

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 CentOS 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!

:!: HINWEIS - IPv6 soll NICHT genutzt 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 base-Repository von CentOS enthalten

installiert werden.

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

  • rdate - ist ebenfalls im base-Repository von CentOS enthalten

installiert werden.

Mit nachfolgendem Befehl, wird das Pakete xinetd installiert:

# yum install xinetd
Loaded plugins: fastestmirror
base                                                     | 3.6 kB     00:00     
epel                                                     | 4.4 kB     00:00     
extras                                                   | 3.4 kB     00:00     
updates                                                  | 3.4 kB     00:00     
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package xinetd.x86_64 2:2.3.15-12.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package         Arch            Version                    Repository     Size
================================================================================
Installing:
 xinetd          x86_64          2:2.3.15-12.el7            base          128 k

Transaction Summary
================================================================================
Install  1 Package

Total download size: 128 k
Installed size: 261 k
Is this ok [y/d/N]: y
Downloading packages:
xinetd-2.3.15-12.el7.x86_64.rpm                            | 128 kB   00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : 2:xinetd-2.3.15-12.el7.x86_64                                1/1 
  Verifying  : 2:xinetd-2.3.15-12.el7.x86_64                                1/1 

Installed:
  xinetd.x86_64 2:2.3.15-12.el7                                                 

Complete!

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

# rpm -qil xinetd
Name        : xinetd
Epoch       : 2
Version     : 2.3.15
Release     : 12.el7
Architecture: x86_64
Install Date: Thu 11 Sep 2014 04:44:45 PM CEST
Group       : System Environment/Daemons
Size        : 266816
License     : xinetd
Signature   : RSA/SHA256, Fri 04 Jul 2014 07:46:43 AM CEST, Key ID 24c6a8a7f4a80eb5
Source RPM  : xinetd-2.3.15-12.el7.src.rpm
Build Date  : Mon 09 Jun 2014 08:55:07 PM CEST
Build Host  : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://www.xinetd.org
Summary     : A secure replacement for inetd
Description :
Xinetd is a secure replacement for inetd, the Internet services
daemon. Xinetd provides access control for all services based on the
address of the remote host and/or on time of access and can prevent
denial-of-access attacks. Xinetd provides extensive logging, has no
limit on the number of server arguments, and lets you bind specific
services to specific IP addresses on your host machine. Each service
has its own specific configuration file for Xinetd; the files are
located in the /etc/xinetd.d directory.
/etc/sysconfig/xinetd
/etc/xinetd.conf
/etc/xinetd.d/chargen-dgram
/etc/xinetd.d/chargen-stream
/etc/xinetd.d/daytime-dgram
/etc/xinetd.d/daytime-stream
/etc/xinetd.d/discard-dgram
/etc/xinetd.d/discard-stream
/etc/xinetd.d/echo-dgram
/etc/xinetd.d/echo-stream
/etc/xinetd.d/tcpmux-server
/etc/xinetd.d/time-dgram
/etc/xinetd.d/time-stream
/usr/lib/systemd/system/xinetd.service
/usr/sbin/xinetd
/usr/share/doc/xinetd-2.3.15
/usr/share/doc/xinetd-2.3.15/CHANGELOG
/usr/share/doc/xinetd-2.3.15/COPYRIGHT
/usr/share/doc/xinetd-2.3.15/README
/usr/share/doc/xinetd-2.3.15/empty.conf
/usr/share/doc/xinetd-2.3.15/sample.conf
/usr/share/man/man5/xinetd.conf.5.gz
/usr/share/man/man5/xinetd.log.5.gz
/usr/share/man/man8/xinetd.8.gz

Mit nachfolgendem Befehl, wird das Pakete rdate installiert:

# yum install rdate
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package rdate.x86_64 0:1.4-25.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package          Arch              Version               Repository       Size
================================================================================
Installing:
 rdate            x86_64            1.4-25.el7            base             19 k

Transaction Summary
================================================================================
Install  1 Package

Total download size: 19 k
Installed size: 29 k
Is this ok [y/d/N]: y
Downloading packages:
rdate-1.4-25.el7.x86_64.rpm                                |  19 kB   00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : rdate-1.4-25.el7.x86_64                                      1/1 
  Verifying  : rdate-1.4-25.el7.x86_64                                      1/1 

Installed:
  rdate.x86_64 0:1.4-25.el7                                                     

Complete!

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

# rpm -qil rdate
Name        : rdate
Version     : 1.4
Release     : 25.el7
Architecture: x86_64
Install Date: Thu 11 Sep 2014 04:46:02 PM CEST
Group       : Applications/System
Size        : 29251
License     : GPLv2+
Signature   : RSA/SHA256, Fri 04 Jul 2014 06:47:26 AM CEST, Key ID 24c6a8a7f4a80eb5
Source RPM  : rdate-1.4-25.el7.src.rpm
Build Date  : Tue 10 Jun 2014 04:26:22 AM CEST
Build Host  : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : ftp://people.redhat.com/sopwith/
Summary     : Tool for getting the date/time from a remote machine
Description :
The rdate utility retrieves the date and time from another machine on
your network, using the protocol described in RFC 868. If you run
rdate as root, it will set your machine's local time to the time of
the machine that you queried.
/usr/bin/rdate
/usr/share/doc/rdate-1.4
/usr/share/doc/rdate-1.4/COPYING
/usr/share/man/man1/rdate.1.gz

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 überprüft werden kann:

# systemctl is-enabled xinetd
enabled
* Die Antwort sollte, wie dargestellt, enabled / eingeschaltet sein!

:!: HINWEIS - Falls die Antwort disabled sein sollte, kann nachfolgender Befehl dies beheben.

# systemctl enable xinetd
ln -s '/usr/lib/systemd/system/xinetd.service' '/etc/systemd/system/multi-user.target.wants/xinetd.service'

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

# systemctl status xinetd
xinetd.service - Xinetd A Powerful Replacement For Inetd
   Loaded: loaded (/usr/lib/systemd/system/xinetd.service; enabled)
   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 44
-rw-------. 1 root root 1157 Jun  9 20:55 chargen-dgram
-rw-------. 1 root root 1159 Jun  9 20:55 chargen-stream
-rw-------. 1 root root 1157 Jun  9 20:55 daytime-dgram
-rw-------. 1 root root 1159 Jun  9 20:55 daytime-stream
-rw-------. 1 root root 1157 Jun  9 20:55 discard-dgram
-rw-------. 1 root root 1159 Jun  9 20:55 discard-stream
-rw-------. 1 root root 1148 Jun  9 20:55 echo-dgram
-rw-------. 1 root root 1150 Jun  9 20:55 echo-stream
-rw-------. 1 root root 1212 Jun  9 20:55 tcpmux-server
-rw-------. 1 root root 1149 Jun  9 20:55 time-dgram
-rw-------. 1 root root 1150 Jun  9 20:55 time-stream
sind die beiden Konfigurationsdateien

  • /etc/xinetd.d/time-dgram
  • /etc/xinetd.d/time-stream

von Bedeutung!

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

# Tachtler
gekennzeichnet.

/etc/xinetd.d/time-dgram

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

# This is the configuration for the udp/dgram time service. 
 
service time
{
# This is for quick on or off of the service
# Tachtler
# default:      disable         = yes
        disable         = no
 
# The next attributes are mandatory for all services
        id              = time-dgram
        type            = INTERNAL
        wait            = yes
        socket_type     = dgram
#       protocol        =  socket type is usually enough
 
# External services must fill out the following
#       user            =
#       group           =
#       server          =
#       server_args     =
 
# External services not listed in /etc/services must fill out the next one
#       port            =
 
# RPC based services must fill out these
#       rpc_version     =
#       rpc_number      =
 
# Logging options
#       log_type        =
#       log_on_success  =
#       log_on_failure  =
 
# Networking options
# Tachtler
# default: #    flags           =
        flags           = IPv4
#       bind            =
#       redirect        =
#       v6only          = 
 
# Access restrictions
#       only_from       =
#       no_access       =
#       access_times    =
#       cps             = 50 10
#       instances       = UNLIMITED
#       per_source      = UNLIMITED
#       max_load        = 0
#       deny_time       = 120
#       mdns            = yes 
 
# Environmental options
#       env             =
#       passenv         =
#       nice            = 0
#       umask           = 022
#       groups          = yes
#       rlimit_as       =
#       rlimit_cpu      =
#       rlimit_data     =
#       rlimit_rss      =
#       rlimit_stack    =
 
# Banner options. (Banners aren't normally used)
#       banner          =
#       banner_success  =
#       banner_fail     =
}

/etc/xinetd.d/time-stream

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

# This is the configuration for the tcp/stream time service.
 
service time
{
# This is for quick on or off of the service
# Tachtler
# default:      disable         = yes
        disable         = no
 
# The next attributes are mandatory for all services
        id              = time-stream
        type            = INTERNAL
        wait            = no
        socket_type     = stream
#       protocol        =  socket type is usually enough
 
# External services must fill out the following
#       user            =
#       group           =
#       server          =
#       server_args     =
 
# External services not listed in /etc/services must fill out the next one
#       port            =
 
# RPC based services must fill out these
#       rpc_version     =
#       rpc_number      =
 
# Logging options
#       log_type        =
#       log_on_success  =
#       log_on_failure  =
 
# Networking options
# Tachtler
# default: #    flags           =
        flags           = IPv4
#       bind            = 
#       redirect        =
#       v6only          = 
 
# Access restrictions
#       only_from       =
#       no_access       =
#       access_times    =
#       cps             = 50 10
#       instances       = UNLIMITED
#       per_source      = UNLIMITED
#       max_load        = 0
#       deny_time       = 120
#       mdns            = yes 
 
# Environmental options
#       env             =
#       passenv         =
#       nice            = 0
#       umask           = 022
#       groups          = yes
#       rlimit_as       =
#       rlimit_cpu      =
#       rlimit_data     =
#       rlimit_rss      =
#       rlimit_stack    =
 
# Banner options. (Banners aren't normally used)
#       banner          =
#       banner_success  =
#       banner_fail     =
}

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      106  8056 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp dpt:123
6       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 5 -p tcp --dport 37 -j ACCEPT
# iptables -I INPUT 5 -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      115  8740 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp dpt:123
8       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:

# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]

Zeitserver starten

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

# systemctl start xinetd

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     25944  0.0  0.0 112640   976 pts/0    S+   17:01   0:00          \_ grep --color=auto xinetd
root     25942  0.0  0.0  29768  1008 ?        Ss   17:01   0:00 /usr/sbin/xinetd -stayalive -pidfile /var/run/xinetd.pid
bzw. nachfolgendem Befehl überprüft werden:

# systemctl status xinetd
xinetd.service - Xinetd A Powerful Replacement For Inetd
   Loaded: loaded (/usr/lib/systemd/system/xinetd.service; enabled)
   Active: active (running) since Thu 2014-09-11 17:01:40 CEST; 2min 48s ago
  Process: 25941 ExecStart=/usr/sbin/xinetd -stayalive -pidfile /var/run/xinetd.pid $EXTRAOPTIONS (code=exited,
status=0/SUCCESS)
 Main PID: 25942 (xinetd)
   CGroup: /system.slice/xinetd.service
           └─25942 /usr/sbin/xinetd -stayalive -pidfile /var/run/xinetd.pid

Sep 11 17:01:40 centos7.localdomain xinetd[25942]: removing daytime
Sep 11 17:01:40 centos7.localdomain xinetd[25942]: removing daytime
Sep 11 17:01:40 centos7.localdomain xinetd[25942]: removing discard
Sep 11 17:01:40 centos7.localdomain xinetd[25942]: removing discard
Sep 11 17:01:40 centos7.localdomain xinetd[25942]: removing echo
Sep 11 17:01:40 centos7.localdomain xinetd[25942]: removing echo
Sep 11 17:01:40 centos7.localdomain xinetd[25942]: removing tcpmux
Sep 11 17:01:40 centos7.localdomain xinetd[25942]: xinetd Version 2.3.15 started with libwrap loadavg labele...
Sep 11 17:01:40 centos7.localdomain xinetd[25942]: Started working: 2 available services
Sep 11 17:01:40 centos7.localdomain systemd[1]: Started Xinetd A Powerful Replacement For Inetd.

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

# netstat -tulpen | grep xinetd
tcp        0      0 0.0.0.0:37              0.0.0.0:*    LISTEN      0          1152455814 25942/xinetd        
udp        0      0 0.0.0.0:37              0.0.0.0:*                0          1152455813 25942/xinetd

:!: HINWEIS - Falls der Befehl netstat nicht zur Verfügung stehen sollte, muss das rpm-Paket net-tools installiert werden.

Eine weitere Überprüfung, ob auch die entsprechenden Services des inetd-Dienstes/Daemon gestartete werden, kann mit nachfolgendem Befehl herausgefunden werden:

# chkconfig --list | tail -n 12

Note: This output shows SysV services only and does not include native
      systemd services. SysV configuration data might be overridden by native
      systemd configuration.

      If you want to list systemd services use 'systemctl list-unit-files'.
      To see services enabled on particular target use
      'systemctl list-dependencies [target]'.

xinetd based services:
	chargen-dgram: 	off
	chargen-stream:	off
	daytime-dgram: 	off
	daytime-stream:	off
	discard-dgram: 	off
	discard-stream:	off
	echo-dgram:    	off
	echo-stream:   	off
	tcpmux-server: 	off
	time-dgram:    	on
	time-stream:   	on

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 Sep 11 17:12:07 2014

Befehl zu Abfrage gegen den Zeitserver via UDP:

# rdate -u 192.168.0.20
rdate: [192.168.0.20]	Thu Sep 11 17:12:24 2014

Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
tachtler/time_protocol_centos_7.txt · Zuletzt geändert: 2014/10/16 10:49 von klaus