Logwatch/fail2ban
topic - Kurzbeschreibung
Beschreibung
- Logwatch
- Logwatch ist ein Tool, das logfiles ausliest und zusammenfasst
- Der so generierte Report kann zB per E-Mail versand werden
- Dadurch kann man die Aktivitäten auf einem Server durch Überfliegen des Reports bewerten und Probleme ggf. frühzeitig erkennen
- Fail2ban
- fail2ban ist ein Tool, um wiederholte scheiternde Loginversuche automatisch zu erkennen und danach die Quell-IP-Adresse für einen bestimmten Zeitraum zu sperren
- Wird eine IP-Adresse gesperrt, nennt sich das Ban (to ban - engl. für sperren)
- Wird eine IP-Adresse nach der Sperrfrist wieder entsperrt, so nennt sich das Unban
- Damit können zB brute force Attacken nach wenigen Versuchen unterbunden werden
Vorgehensweise
Ziele
- Die fail2ban Logfiles können von logwatch bereits von Haus aus ausgewertet werden
- Allerdings entspricht der Report nicht meinen Wünschen, denn man erhält eine Liste aller erkannten Login-Versuche und der Bans und Unbans - und das können recht viele sein
- Mein Wunsch: ich will nur Bans und Unbans sehen und eine Summe der Bans und Unbans
Einrichtung von logwatch
Logfile-Gruppe definieren
Dazu folgende Datei anlegen/bearbeiten: /etc/logwatch/conf/logfiles/fail2ban.conf
# /etc/logwatch/conf/logfiles/fail2ban.conf
# The LogFile path is relative to /var/log by default.
# You can change the default by setting LogDir.
LogFile = fail2ban.log
# This enables searching through zipped archives as well.
Archive = fail2ban.log.*.gz
# Expand the repeats (actually just removes them now).
*ExpandRepeats
Service definieren
Dazu folgende Datei anlegen/bearbeiten: /etc/logwatch/conf/services/fail2ban.conf
# /etc/logwatch//services/fail2ban.conf
# title shown in the report
Title = fail2ban-messages
# logfile group
LogFile = fail2ban
Parse-File
- Skript zum Auslesen und Zusammenfassen der Logfiles im gewünschten Umfang
Dazu folgende Datei anlegen/bearbeiten: /etc/logwatch/scripts/services/fail2ban
#!/usr/bin/env bash
# /etc/logwatch/scripts/services/fail2ban
# Change the line separator to split by new lines.
OLD_IFS=$IFS
IFS=$'\n'
# set vars to 0
BANS=0
UNBANS=0
# The contents of the log file are given in stdin.
for LINE in $( cat /dev/stdin ); do
# Only lines matching this regexp will be included.
if echo $LINE|egrep 'NOTICE' &> /dev/null; then
# Every line we echo here will be included in the logwatch report.
echo $LINE
fi
if echo $LINE|egrep 'NOTICE.*Ban' &> /dev/null; then
BAN=$[$BAN + 1]
fi
if echo $LINE|egrep 'NOTICE.*Unban' &> /dev/null; then
UNBAN=$[$UNBAN + 1]
fi
done
echo "$BAN Bans, $UNBAN Unbans"
- Hinweise
-
- Bei fail2ban werden die Bans und Unbans mit dem Tag NOTICE markiert
- Daher gibt dieses Skript nur Zeilen aus, die „NOTICE“ enthalten
- Für die Berechnung der Anzahl von Bans und Unbans prüft es die Zeilen mit „NOTICE“ ferner auf „Ban“ oder „Unban“ und zählt entsprechend die Variablen hoch
Test
Ein Test kann mit folgendem Kommando durchgeführt werden
logwatch --detail high --service fail2ban
# Ausgabe: IP-Adressen wurden anonymisiert, Ausgabe gekürzt
################### Logwatch 7.4.0 (05/29/13) ####################
Processing Initiated: Wed Feb 20 08:54:32 2019
Date Range Processed: yesterday
( 2019-Feb-19 )
Period is day.
Detail Level of Output: 10
Type of Output/Format: stdout / text
Logfiles for Host: host.host.tld
##################################################################
--------------------- fail2ban-messages Begin (detail=1) ------------------------
2019-02-19 00:03:59,539 fail2ban.actions [5355]: NOTICE [plesk-saslauth] Unban 190.220.147.x
2019-02-19 00:44:26,540 fail2ban.actions [5355]: NOTICE [plesk-postfix] Ban 190.220.147.x
[...]
2019-02-19 23:37:27,514 fail2ban.actions [5355]: NOTICE [plesk-saslauth] Unban 119.28.66.x
20 Bans, 24 Unbans
Anhang
Siehe auch
Links
Weblinks