Möchtest Du informiert werden, wenn ein Client eine IP aus dem Bereich „range“ erhält? Hilfreich, wenn ein neuer Client eingepflegt werden soll. Interressant, wenn sich jemand ohne Dein Wissen „einstöpselt“ !
Swatch ist jetzt Dein Freund, ein kleines Programm, daß, ähnlich wie Logwatch, die Logfiles überwachen kann, aber sofort Alarm via E-Mail schlägt.
Bauen wir uns dazu noch eine Regel um einer IP-zuteilung aus dem Range einfach alles zu verbieten, dann kommt kein neues Gerät mehr „ungepflegt“ ins Netz, wir bekommen automatisch die MAC-Adresse…
gateway: ~ #apt install swatch
Die Einrichtung für Swatch ist etwas ungewöhnlich, es muss für jeden Beobachtungsposten ein eigener Prozess eingerichtet werden, dazu noch ein eigenes Startscript.
Womit wir eine neue Tür, das Shellscripting, aufmachen. Das heisst wir erstellen eine Datei mit einer Abfolge von Befehlen und Bedingungen und machen sie ausführbar. Kurz: wir schreiben ein Programm.
Wir legen sowohl die Prozessbeschreibung ( die Konfiguration ), als auch das Startscript in unserem Homeverzeichnis ( /root ) an.
gateway: ~ #nano .swatchrc
# Swatch Konfig für permanentes Beobachten der Logs auf DHCP Zuteilungen 10.0.0.180-189
watchfor /DHCPACK on 10.0.0.18[0-9]/
#mail
mail addresses=ich\@meinemailadresse.de,subject=swatch\ alarm
#echo normal
exec exim4 -q
speichern und schliessen
watchfor gefolgt vom Suchmuster, in Form eines „regulären Ausdrucks“
also: suche alles was auf /zwischen zwei slashes/ zutrifft
und schicke das per Mail an mich.
Beachte: vor dem @ steht ein backslash, wichtig!
Nun das Startscript dazu:
gateway: ~ #nano start.swatch.sh
#!/bin/bash
/usr/bin/swatchdog -c /root/.swatchrc --daemon -t /var/log/syslog
speichern und schliessen
Am Beginn eines Shellscripts steht immer
#!/bin/bash
wenn das ausführende Programm die Shell selber sein soll, sonst
#!/Pfad-zum-Programm
#! = shebang
damit wird der Shell mitgeteilt wie sie mit dem Script umgehen soll.
Dann folgt die Anweisung:
starte Swatch als Daemon im Hintergrund mit den Anweisungen aus der Datei .swatchrc und beobachte die syslog ( wo die neuen DHCP-leases vermerkt werden )
Dieses Script muss ausführbar gemacht werden:
gateway: ~ #chmod +x start.swatch.sh
Damit kann Swatch gestartet werden.
gateway: ~ #./start.swatch.sh
gateway: ~ #ps -ef | grep swatch muss jetzt auswerfen:
root 6904 1 0 18:34 ? 00:00:00 /usr/bin/swatch -c /root/.swatchrc –daemon -t /var/log/syslog
root 6930 6891 0 19:08 pts/0 00:00:00 grep swatch
gateway: ~ #prima swatch läuft
Muß aber nach jedem Neustart manuell gestartet werden, doof.
Hoppla! Ein Zopf ist mal wieder weg.
Nicht schlecht, mit Debian10 ist die rc.local verschwunden!
Bisher war es ganz einfach einen Startbefehl in die Datei rc.local einzutragen, um ihn beim Systemstart aufrufen zu lassen.
Nun wird es also Zeit mit systemd vertraut zu werden. Allzu schwer ist das auch nicht.
Wir brauchen eine Datei für Systemd, damit er den Dienst erkennt.
Dazu wird eine Datei /lib/systemd/system/startswatch.service mit folgendem Inhalt angelegt:
[Unit] Description=start swatch for dhcp watch. After=syslog.target network.target auditd.service sshd.service [Service] ExecStart=/usr/bin/swatchdog -c /root/.swatchrc --daemon -t /var/log/syslog ExecStop=/bin/kill -9 $MAINPID Type=forking [Install] WantedBy=multi-user.target
Der Aufbau einer Service-Datei für Systemd ist immer ähnlich:
[Unit] beschreibt den Service ( Ausgabe bei Aufruf status ) und bestimmt was vorher gestartet sein muß. ( Jetzt kommt einer der Streitpunkte: systemd stoppt die Prozesse nun auch in umgekehrter Reihenfolge, was nicht immer gut sein muss. )
[Service] beinhaltet die Anweisungen zum Start und Stop.
Hier müssen die eckigen Klammern übrigens/natürlich stehen bleiben.
Die Datei braucht Ausführungsrechte und muss nach /etc/systemd/system kopiert werden:
gateway: ~ # chmod 644 /lib/systemd/system/startswatch.service
gateway: ~ # cp -ax /lib/systemd/system/startswatch.service /etc/systemd/system/
dann muss der Dienst bekanntgemacht werden:
gateway: ~ # systemctl daemon-reload
und nun sollte ein
gateway: ~ # systemctl start startswatch.service
unseren swatchdaemon starten.
gateway: ~ # systemctl status startswatch.service ● startswatch.service - start swatch for dhcp watch. Loaded: loaded (/etc/systemd/system/startswatch.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2019-11-08 21:50:54 CET; 2s ago Process: 4488 ExecStart=/usr/bin/swatchdog -c /root/.swatchrc --daemon -t /var/log/syslog (code=exited, status=0/SUCCESS) Main PID: 4490 (/usr/bin/swatch) Tasks: 2 (limit: 1140) Memory: 16.6M CGroup: /system.slice/startswatch.service ├─4490 /usr/bin/swatchdog -c /root/.swatchrc --daemon -t /var/log/syslog └─4491 /usr/bin/tail -n 0 -F /var/log/syslog Nov 08 21:50:54 gateway systemd[1]: Starting start swatch for dhcp watch.... Nov 08 21:50:54 gateway systemd[1]: Started start swatch for dhcp watch.. gateway: ~ # systemctl stop startswatch.service gateway: ~ # systemctl status startswatch.service ● startswatch.service - start swatch for dhcp watch. Loaded: loaded (/etc/systemd/system/startswatch.service; enabled; vendor preset: enabled) Active: failed (Result: signal) since Fri 2019-11-08 21:51:05 CET; 1s ago Process: 4488 ExecStart=/usr/bin/swatchdog -c /root/.swatchrc --daemon -t /var/log/syslog (code=exited, status=0/SUCCESS) Process: 4496 ExecStop=/bin/kill -9 $MAINPID (code=exited, status=0/SUCCESS) Main PID: 4490 (code=killed, signal=KILL) Nov 08 21:50:54 gateway systemd[1]: Starting start swatch for dhcp watch.... Nov 08 21:50:54 gateway systemd[1]: Started start swatch for dhcp watch.. Nov 08 21:51:05 gateway systemd[1]: Stopping start swatch for dhcp watch.... Nov 08 21:51:05 gateway systemd[1]: startswatch.service: Main process exited, code=killed, status=9/KILL Nov 08 21:51:05 gateway systemd[1]: startswatch.service: Failed with result 'signal'. Nov 08 21:51:05 gateway systemd[1]: Stopped start swatch for dhcp watch..
Swatch startet sauber und stoppt brutal, lassen wir das mal so.
Ein systemctl enable startswatch.service startet den Service beim Systemstart,
teste mit reboot. Das Startscript unter /root kann jetzt gelöscht werden, die Datei .swatchrc muss aber stehen bleiben. Wem jetzt unwohl ist, daß der Prozess als root läuft, darf sich gerne eine Notiz machen:
1. Systemnutzer swatch anlegen
2. swatch zur Gruppe adm hinzufügen
3. swatchdaemon als user swatch ausführen
Wer nach dieser Anleitung ein Gateway aufgebaut haben wird, wird das auch hinkriegen können. 😉 ok, Spaß, solange ein Programm via apt installiert wird, kann man der Paketverwaltung von Debian durchaus zutrauen, daß sie den Besitzer korrekt und sicher setzt. ( siehe gleich mal bei DNS nach dem Besitzer des Prozesses bind ) Aber behalte das im Hinterkopf! Sicherheit geht nur mit korrekten Rechten und manchmal ( oft ) auch nur mit eingeschränkten Nutzern. Exponierte Dienste sollten soweit irgend möglich nicht als root laufen.
next> DNS