Zentraler Log-Server für das Netzwerk

Je komplexer das Netzwerk wird, desto aufwändiger wird auch die Fehleranalyse. Da hilft es, das Logging aller Geräte an einem zentralen Punkt zu aggregieren. Genau diesen Ansatz verfolgt der hier installierte Logserver. Ziel der Installation ist ein komplett arbeitsfähiger rsyslogd auf Ubuntu-Server mit Webmin um die Administration etwas zu erleichtern. Weiter soll ein Cisco-Switch auf diesem Server seine Logs abliefern.

Ausgangspunkt ist hier eine funktionsfähige Grundinstallation vom Ubuntu-Server 20.04 LTS.
Als erstes nach der Ubuntu-Installation wird auf dem Server SSLeay installiert.

apt install -y libnet-ssleay-perl

Diese Bibliothek wird später für den SSL-Zugriff auf den Webmin benötigt. Nun kann auch das Gesamtsystem aktualisiert werden.

apt update
apt dist-upgrade
reboot

Nach dem Reboot steht ein voll gepatchtes, aktuelles System zur Verfügung auf dem Webmin installiert wird.

Installation Webmin

Webmin ist ein graphisches Frontend, mit dem ein Linux-Server und seine Dienste (fast) vollständig administriert werden kann. Aus Sicherheitsgründen soll der Zugriff über https erfolgen, daher wurde SSLeay schon installiert.

Damit sind die Voraussetzungen für die Installation von Webmin geschaffen. Webmin selbst kann als tar-File von www.webmin.com geladen werden.
Nach dem Download wird die Installationsdatei per SFTP (z.B. mittels Filezilla) in das Home-Verzeichnis des Server-Users tranferiert. Nun  wird die Datei für die Installation vorbereitet.

chmod 777 /home/RACF/webmin......tar.gz gibt alle Berechtigungen auf die Datei

mv /home/RACF/webmin.....tar.gz /opt verschiebt die Datei in /opt

cd /opt
tar -xzvf webmin.....tar.gz entpackt die Datei in das versionierte Unterverzeichnis

rm webmin....tar.gz Löscht die Installationsdatei
c
d webmin.....

./setup.sh startet die Installation



Dabei werden die Defaults übernommen, außer dem Usernamen. 
Es ist ein starkes Passwort zu verwenden und https sowie Autostart beim Boot aktiviert.

Nach Abschluss der Installation erfolgt der Zugriff im Browser via:

https://ip.adresse.des.servers:10000

Username und Passwort lauten wie in der Installation festgelegt.

Nach der Installation kann es vorkommen, dass im Dashboard angezeigt wird, dass man das OS aktualisieren soll.
Dazu wird unter Webmin -> Webmin Configuration der Pfad aktualisiert:

bin
/usr/bin
/sbin
/usr/sbin
/usr/local/bin

und den Systempfad einbeziehen (Checkbox unterhalb setzen.
Danach das Setup aus /opt/webmin-… erneut laufen lassen.
nun sollte das Problem gelöst sein.

Unter Hardware -> System Time -> Reiter Change Timezone die Zeitzone auf Europe/Berlin einstellen, sofern die Rechneruhr auf UTC läuft.

Installation und Konfiguration von rsyslogd

Der daemon (Dienst) sollte schon vorinstalliert sein, was sich wie folgt prüfen lässt:

user@server:~$ sudo -i 
[sudo] password for user:  root@server:~# rsyslogd -v
 rsyslogd  8.2001.0 (aka 2020.01) compiled with:
        PLATFORM:                               x86_64-pc-linux-gnu
        PLATFORM (lsb_release -d):
        FEATURE_REGEXP:                         Yes
        GSSAPI Kerberos 5 support:              Yes
        FEATURE_DEBUG (debug build, slow code): No
        32bit Atomic operations supported:      Yes
        64bit Atomic operations supported:      Yes
       memory allocator:                       system default
        Runtime Instrumentation (slow code):    No
        uuid support:                           Yes
        systemd support:                        Yes
        Config file:                            /etc/rsyslog.conf
        PID file:                               /run/rsyslogd.pid
        Number of Bits in RainerScript integers: 64

 

See https://www.rsyslog.com for more information.

Sollte rsyslogd -v mit einem Fehler abbrechen und der Dienst nicht installiert sein, kann er mittels

apt install rsyslog -y

installiert werden. Danach liefert rsyslogd -v die oben gezeigte Ausgabe.
Auch sollte der Dienst bei der Installtion schon aktiviert worden sein. Dies lässt sich wie folgt prüfen:

root@server:~# systemctl status rsyslog
 
● rsyslog.service - System Logging Service
 
    Loaded: loaded (/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
 
    Active: active (running) since Mon 2020-12-07 14:13:18 UTC; 23min ago 
TriggeredBy: 
● syslog.socket 
      Docs: man:rsyslogd(8) 
            https://www.rsyslog.com/doc/ 
  Main PID: 620 (rsyslogd) 
     Tasks: 4 (limit: 4619) 
    Memory: 2.9M 
    CGroup: /system.slice/rsyslog.service 
            └─620 /usr/sbin/rsyslogd -n -iNONE 

Dec 07 14:13:18 server systemd[1]: Starting System Logging Service... 
Dec 07 14:13:18 server rsyslogd[620]: imuxsock: Acquired UNIX socket '/run/systemd/journal/syslog' (fd 3) from systemd.  [v8.2001.0] 
Dec 07 14:13:18 server rsyslogd[620]: rsyslogd's groupid changed to 110 
Dec 07 14:13:18 server rsyslogd[620]: rsyslogd's userid changed to 104 
Dec 07 14:13:18 server rsyslogd[620]: [origin software="rsyslogd" swVersion="8.2001.0" x-pid="620" x-info="https://www.rsyslog.com"] start 
Dec 07 14:13:18 server systemd[1]: Started System Logging Service.

Sollte der Dienst zwar installiert, aber nicht aktiv sein, kann er mittels systemctl start rsyslog gestartet werden, Wenn er nach einem Reboot nicht aktiv ist, kann das mit systemctl enable rsyslog aktiviert werden. Der Syslog ist dann nach jedem Reboot wieder aktiv.

Wenn der Daemon dann läuft, muss er noch konfiguriert werden externe Logs anzunehmen. Die Ausgabe von rsyslogd -v zeigte, dass die Konfiguration in /etc/rsyslog.conf abgelegt ist. Diese Datei wird mit nano /etc/rsyslog.conf geöffnet und wie folgt editiert ….

# /etc/rsyslog.conf configuration file for rsyslog
# 
# For more information install rsyslog-doc and see
# /usr/share/doc/rsyslog-doc/html/configuration/index.html
# 
# Default logging rules can be found in /etc/rsyslog.d/50-default.conf
#################
#### MODULES ####
#################
module(load="imuxsock")
# provides support for local system logging
#module(load="immark")
# provides message capability 

# provides UDP syslog reception
module(load="imudp")
input(type="imudp" port="514")

# provides TCP syslog reception
module(load="imtcp")
input(type="imtcp" port="514")

# provides kernel logging support and enable non-kernel klog messages
module(load="imklog" permitnonkernelfacility="on")

# Quellen
# Lab-Zone
$AllowedSender TCP, 127.0.0.1, 172.16.199.0/24 *.digiliv.de
$AllowedSender UDP, 127.0.0.1, 172.16.199.0/24 *.digiliv.de

$AllowedSender TCP, 127.0.0.1, 172.16.200.0/24 *.digiliv.de
$AllowedSender UDP, 127.0.0.1, 172.16.200.0/24 *.digiliv.de

# provides kernel logging support and enable non-kernel klog messages
module(load="imklog" permitnonkernelfacility="on")
$template remote-incoming-logs,"/var/log/rsyslog/%HOSTNAME%.log" 
*.* ?remote-incoming-logs 

###########################
 #### GLOBAL DIRECTIVES ####
 ###########################
 
...........

Die ersten vier grün markierten Zeilen sind normalerweise auskommentiert (führendes #), was dazu führt, dass keinerlei Aktionen im Netzwerk möglich sind. Entfernt man die Kommentierung wird der Port 514 für UDP und TCP aktiv, allerdings fehlen noch die Definitionen, welche Geräte (Netzsegmente) Logs liefern dürfen und was der Server damit tun soll.
Diese Infos finden sich im Bereich Quellen (# Quellen) und hier sind als Beispiel zwei Netzbereiche eingetragen, deren Geräte per UDP und TCP Log abladen dürfen. Diese Liste kann entsprechend angepasst und/oder ergänzt werden.
Der dritte Bereich (ab $template) bestimmt, was der Server mit den eintreffenden Daten tun soll. In diesem Fall schreibt er sie, getrennt für jedes loggende Device, in eine eigene Datei. Dies wirde über die Variable %HOSTNAME% definiert. Ist der Hostname nicht zu ermitteln wird automatisch die IP verwendet. Setzt man statt der Variablen einen festen Dateinamen loggen alle Geräte in eine Datei. Die Datei wird gespeichert und systemctl restart rsyslog aktiviert die neue Konfiguration. Nun können das Log-Verzeichnis erstellt und die Berechtigungen gesetzt werden.

mkdir /var/log/rsyslogchown syslog:adm /var/log/rsyslog -R

Um die Konfiguration zu aktivieren und zu prüfen, muss der Dienst nach den Änderungen neu gestartet werden.

systemctl restart rsyslog
systemctl status rsyslog

Damit ist der Log-Server arbeitsbereit und es können die Geräte für das Remote-Logging konfiguriert werden. Sehr wichtig ist allerdings, dass danach noch ein Logrotate für die Log-Files eingestellt wird, da der Server sonst schnell seine HDD füllt.

Konfiguration der Geräte auf Remote-Logging

Ubiquiti UniFi Netzwerke

Hier ist die Umstellung eines ganzen Netzwerkes besonders einfach. Ich gehe hier von den New Settings des bei mir installierten Controllers 6.0.41 (Stand 7.12.2020) aus.
Unter Settings (Zahnrad-Icon) wechselt man zu den System Settings und hier zu Controller Configuration. Dort gibt es den Menüpunkt Controller Configuration mit dem Remote Logging.
Hier aktviert man die Option Syslog; Debug- und Netconsole-Log können deaktiviert bleiben. Unter Syslog Host wird IP oder DNS-Name des oben installierten Servers eingetragen.
Kurz nach dem Speichern sollten im Syslog-Server-Verzeichnis /var/log/rsyslog die ersten Dateien auftauchen.
Die Einstellung gilt für die eine Controller-Site, auf der es eingestellt wurde.

Cisco- Geräte

Cisco WirelessLAN Controller (WLC)

Um das Logging eines Cisco WLC auf einen Syslog umzuleiten klickt man auf dem Tab Management in den Bereich Logs -> Config

Zuerst wirdder Logging-Host zugefügt, der nach einem Klick auf Add der Liste zugefügt wird. Nun muss noch die Art derzu loggenden Informationen ausgewählt werden. Dabei bietet es sich an das Syslog des Controllers als Log zu schicken. Der Dialog wird dazu gefüllt wie gezeigt.
Nach dem Klick auf Apply sollten kurz danach auch das Logfile und die ersten Daten auf dem Log-Server auftauchen. Anzahl und Art (Logging-Level ) der Log-Daten können im Nachgang aufdem WLC angepasst werden.
Die Logs eines WLCsehen etwa wie folgt aus:

2020-12-09T07:52:23.724764+00:00 172.16.199.20 ede-test: *emWeb: Dec 09 08:52:23.499: %AAA-5-AAA_AUTH_ADMIN_USER: aaa.c:3083 Authentication succeeded for admin user 'userxyz>  

2020-12-09T07:56:16.661885+00:00 172.16.199.20 ede-test: *spamApTask2: Dec 09 08:56:16.413: %DTLS-5-ESTABLISHED_TO_PEER: openssl_dtls.c:906 DTLS connection established to 172> 

2020-12-09T07:56:16.793510+00:00 172.16.199.20 ede-test: *spamApTask2: Dec 09 08:56:16.547: %LWAPP-3-VENDOR_PLD_VALIDATE_ERR: spam_lrad.c:12016 Validation of SPAM_VENDOR_SPEC>

Die erste Zeile zeigt das Login auf dem WLC und die folgenden die Anmeldung eines AP am WLC.

Cisco Router und Switches

Hier werden die Eistellungen am besten über die Konsole im privilegierten Modus vorgenommen. Nach dem Anmelden gibt man dazu enable (kurz ena) ein, oder gelangt direkt dorthin, wenn man ein entspechendes Admin-Konto auf dem Switch hat.

conf tlogging origin-id string LabSwitch1 
logging facility syslog 
logging host 172.16.199.9

Mittels configure terminal (conf t) wechselt man in den Konfigurationsmodus und stellt das Remote-Logging ein. Logging host definiert den Zielhost, logging facility die Quelle der Daten, in diesem Fall das Syslog des Switches. Die origin-id string ist eine Kennung, die in das Log eingefügt wird um die Datenherkunft kenntlich zu machen.

Für einen Switch sehen die Daten dann etwa so aus:

2020-12-08T11:00:04.308078+00:00 172.16.200.5 46: LabSwitch1: Dec  8 11:00:03.301: %SYS-6-LOGGINGHOST_STARTSTOP: Logging to host 172.16.199.9 port 514 started - CLI initiated 

2020-12-08T11:00:07.167095+00:00 172.16.200.5 47: LabSwitch1: Dec  8 11:00:06.160: %SYS-5-CONFIG_I: Configured from console by userabc on vty0 (192.168.xxx.yyy)

2020-12-09T07:47:52.174328+00:00 172.16.200.5 48: LabSwitch1: Dec  9 07:47:51.174: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet1/0/3, changed state to down 

2020-12-09T07:47:53.184573+00:00 172.16.200.5 49: LabSwitch1: Dec  9 07:47:52.180: %LINK-3-UPDOWN: Interface GigabitEthernet1/0/3, changed state to down 

2020-12-09T07:47:59.256049+00:00 172.16.200.5 50: LabSwitch1: Dec  9 07:47:58.255: %LINK-3-UPDOWN: Interface GigabitEthernet1/0/3, changed state to up 

2020-12-09T07:48:01.458207+00:00 172.16.200.5 51: LabSwitch1: Dec  9 07:48:00.458: %LINK-3-UPDOWN: Interface GigabitEthernet1/0/3, changed state to down 

2020-12-09T07:48:05.103492+00:00 172.16.200.5 52: LabSwitch1: Dec  9 07:48:04.096: %LINK-3-UPDOWN: Interface GigabitEthernet1/0/3, changed state to up 

2020-12-09T07:48:07.104448+00:00 172.16.200.5 53: LabSwitch1: Dec  9 07:48:06.099: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet1/0/3, changed state to up

Bei einem Router:

2020-12-08T10:49:51.604551+00:00 172.16.199.2 33: LabRouter1: Dec  8 10:49:50.597: %SYS-5-CONFIG_I: Configured from console by userxyz on vty0 (192.168.xxx.yyy) 

2020-12-08T10:54:05.683461+00:00 172.16.199.2 34: LabRouter1: Dec  8 10:54:04.675: %SYS-5-CONFIG_I: Configured from console by userxyz on vty0 (192.168.xxx.yyy)

Womit das Logging komplett wäre. Damit fehlt nur noch das Logrotate.

Logrotate

Das Rotieren der Logs wird am einfachsten über Webmin eingestellt. Im Bereich System klickt man auf Log File Rotation und fügt mit einem Klick auf Add a new log file to rotate eine neue Definition hinzu.  Wie im Screenshot gezeigt lasse ich im Verzeichnis /var/log/rsyslog alle Logfiles (*.log) wöchentlich archivieren und behalte 6 diese Logs bevor sie gelöscht werden. Die Parameter lassen sich sehr einfach andie eigenen Erfordernisse anpassen.

Nächster Schritt ist die Auswertung und grafische Darstellung der Logs um gezielt nach speziellen Ereignissen suchen zu können, aber das wird ein eigener Post.