Logwatch/fail2ban: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
Zeile 4: Zeile 4:
* Der so generierte Report kann zB per E-Mail versand werden
* 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
* Dadurch kann man die Aktivitäten auf einem Server durch Überfliegen des Reports bewerten und Probleme ggf. frühzeitig erkennen
* Mehr Infos dazu im blog: [https://it-muecke.de/start?do=search&id=logwatch logwatch]
 
; Fail2ban
; Fail2ban
* [https://de.wikipedia.org/wiki/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
* [https://de.wikipedia.org/wiki/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
Zeile 19: Zeile 19:
=== Einrichtung von logwatch ===
=== Einrichtung von logwatch ===
==== Logfile-Gruppe definieren ====
==== Logfile-Gruppe definieren ====
Dazu folgende Datei anlegen/bearbeiten: <tt>/etc/logwatch/conf/logfiles/fail2ban.conf</tt><br/><nowiki># /etc/logwatch/conf/logfiles/fail2ban.conf</nowiki><br/>
Dazu folgende Datei anlegen/bearbeiten: <tt>/etc/logwatch/conf/logfiles/fail2ban.conf</tt>


<nowiki># The LogFile path is relative to /var/log by default.</nowiki><br/><nowiki># You can change the default by setting LogDir.</nowiki><br/>LogFile = fail2ban.log<br/>
<syntaxhighlight lang="bash" highlight="1" line>
<nowiki># This enables searching through zipped archives as well.</nowiki><br/>Archive = fail2ban.log.*.gz<br/>
# /etc/logwatch/conf/logfiles/fail2ban.conf
<nowiki># Expand the repeats (actually just removes them now).</nowiki><br/><nowiki>*ExpandRepeats</nowiki>
 
 
# 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
</syntaxhighlight>


==== Service definieren ====
==== Service definieren ====
* Dazu folgende Datei anlegen/bearbeiten: <tt>/etc/logwatch/conf/services/fail2ban.conf</tt><br/><nowiki># /etc/logwatch//services/fail2ban.conf</nowiki><br/>
Dazu folgende Datei anlegen/bearbeiten: <tt>/etc/logwatch/conf/services/fail2ban.conf</tt>
<nowiki># title shown in the report</nowiki><br/>Title = fail2ban-messages<br/>
<syntaxhighlight lang="bash" highlight="1" line>
<nowiki># logfile group</nowiki><br/>LogFile = fail2ban
# /etc/logwatch//services/fail2ban.conf
 
# title shown in the report
Title = fail2ban-messages
 
# logfile group
LogFile = fail2ban
</syntaxhighlight>


==== Parse-File ====
==== Parse-File ====
* Skript zum Auslesen und Zusammenfassen der Logfiles im gewünschten Umfang
; Skript zum Auslesen und Zusammenfassen der Logfiles im gewünschten Umfang
* Dazu folgende Datei anlegen/bearbeiten: <tt>/etc/logwatch/scripts/services/fail2ban</tt><br/><nowiki>#!/usr/bin/env bash</nowiki><br/><nowiki># /etc/logwatch/scripts/services/fail2ban</nowiki><br/>
Dazu folgende Datei anlegen/bearbeiten: <tt>/etc/logwatch/scripts/services/fail2ban</tt>
<nowiki># Change the line separator to split by new lines.</nowiki><br/>OLD_IFS=$IFS<br/>IFS=$'\n'<br/>
 
<nowiki># set vars to 0</nowiki><br/>BANS=0<br/>UNBANS=0<br/>
<syntaxhighlight lang="bash" highlight="1" line>
<nowiki># The contents of the log file are given in stdin.</nowiki><br/>for LINE in $( cat /dev/stdin ); do<br/> <nowiki># Only lines matching this regexp will be included.</nowiki><br/> if echo $LINE|egrep 'NOTICE' &> /dev/null; then<br/> <nowiki># Every line we echo here will be included in the logwatch report.</nowiki><br/> echo $LINE<br/> fi<br/>
#!/usr/bin/env bash
  if echo $LINE|egrep 'NOTICE.*Ban' &> /dev/null; then<br/> BAN=$[$BAN + 1]<br/> fi<br/> if echo $LINE|egrep 'NOTICE.*Unban' &> /dev/null; then<br/> UNBAN=$[$UNBAN + 1]<br/> fi<br/>done<br/>
# /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"
echo "$BAN Bans, $UNBAN Unbans"
</syntaxhighlight>


; Hinweise
; Hinweise
Zeile 45: Zeile 89:


=== Test ===
=== Test ===
* Ein Test kann mit folgendem Kommando durchgeführt werden<br/>logwatch --detail high --service fail2ban<br/>
Ein Test kann mit folgendem Kommando durchgeführt werden
<nowiki># Ausgabe: IP-Adressen wurden anonymisiert, Ausgabe gekürzt</nowiki><br/>
<syntaxhighlight lang="bash" highlight="1" line>
<nowiki>################### Logwatch 7.4.0 (05/29/13) ####################</nowiki><br/> Processing Initiated: Wed Feb 20 08:54:32 2019<br/> Date Range Processed: yesterday<br/> ( 2019-Feb-19 )<br/> Period is day.<br/> Detail Level of Output: 10<br/> Type of Output/Format: stdout / text<br/> Logfiles for Host: host.host.tld<br/> <nowiki>##################################################################</nowiki><br/>
logwatch --detail high --service fail2ban
<nowiki>--------------------- fail2ban-messages Begin (detail=1) ------------------------</nowiki><br/>
 
2019-02-19 00:03:59,539 fail2ban.actions [5355]: NOTICE [plesk-saslauth] Unban 190.220.147.x<br/> 2019-02-19 00:44:26,540 fail2ban.actions [5355]: NOTICE [plesk-postfix] Ban 190.220.147.x<br/>[...]<br/> 2019-02-19 23:37:27,514 fail2ban.actions [5355]: NOTICE [plesk-saslauth] Unban 119.28.66.x<br/> 20 Bans, 24 Unbans
# 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
</syntaxhighlight>


== Quellen ==
== Quellen ==

Version vom 14. Oktober 2024, 08:47 Uhr

Einführung

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

Quellen