. .

Perl: automatisch iptables Drop-Regeln aus Vorkommnissen in Logdateien erstellen


Inhalt

Beschreibung

Das folgende Script ist eine Weiterentwicklung des „w00tw00t.pl„-Scripts. Ziel ist es weiterhin, automatisiert auf Spam oder Angriffe auf bestimmte Dienste zu reagieren, in dem die verursachende IP-Adresse über iptables ausgesperrt wird.
Das Script beschränkt sich nun nicht mehr auf nur ein Logfile – es können beliebig viele Logdateien auf verdächtige Aktivitäten überwacht werden.
Das Script setzt sich in den Hintergrund und forkt sich für jede konfigurierte Logdatei. Ist eine Logdatei nicht vorhanden, wird alle 30 Sekunden versucht, die Logdatei zu öffnen – zum Beispiel beim Einsatz von logrotate notwendig.

Hier ein kleines Beispiel zur Konfiguration eines zu überwachenden Logfiles an Hand des Standardlogformats von proftpd:

my %logs = ( 
    'ftp' => {
        'logfile' => '/chroot/ftp/var/log/proftpd.log',
        'columnnumber' => 6,
        'ipdelimiter' => [ '\[', '\]' ],
        'regexp_searches' => [
                [ 5, '.*: no such user found from .*' ],
                [ 2, '.*SECURITY VIOLATION:.*' ],
            ],  
    }
);

Die entsprechenden Angaben haben folgende Auswirkungen

  • Keyname „ftp“: erstellt ein Logfile der Sperrungen in /var/log namens „ol_ftp.log“
    • „logfile“: das Logfile, das überwacht werden soll
    • „columnnumber“: die Spalte, in der die IP steht, die unter Umständen geblockt werden soll
    • „ipdelimiter“: die Delimiter, die die IP umschließen – zwei regulärere Ausdrücke; gibt es keine Zeichen, reicht ‚^‘ und ‚$‘
    • „regexp_searches“: eine Liste (von Listen) an regulären Ausdrücken, die verdächtige Logeinträge identifiziert:
      • erster Wert: wie oft muss der Ausdruck vorkommen, ab dem die IP gesperrt wird (1 => sofort)
      • zweiter Wert: der eigentliche reguläre Ausdruck

Da ein entfernter Rechner mehrere Aktionen durchführen kann, wird der höchste Wert aller konfigurierten regulären Ausdrücke als Grenze der maximal erlaubten Vorkommnisse verwendet. In diesem Beispiel also „5“ – trifft viermal der erste Ausdruck zu und dann einmal der zweite, ist die Gesamtzahl der Vorkommnisse erreicht und der Host wird gesperrt, obwohl beide Ausdrücke ihr konfiguriertes eigenes Limit noch nicht erreicht hatten.

Das Perl-Script verwendet die Pakete File::Tail, Net::Whois::IANA und Log::Log4perl, die unter Umständen nicht installiert sind.
Diese können eventuell vom Paketverwaltungssystem des Betriebssystems installiert werden, alternativ aber natürlich auch über `cpan':

cpan[1]> install File::Tail
cpan[2]> install Net::Whois::IANA
cpan[3]> install Log::Log4perl

Sollten die Paketinstallation über cpan fehlschlagen, kann versucht werden, mit `force install File::Tail‘ die Installation zu erzwingen.


Getestet wurde das Script mit Perl v5.18.2 (gentoo Linux).

In den entsprechenden Logfiles kann man dann beobachten, ob eine verdächtige Aktion vorgekommen ist und ob eine IP gesperrt wurde. Hier ein Screenshot von ‚multitail /var/log/ol_*':

observeLogfiles_logging



Wurde eine IP gesperrt, sehen die iptables-Regeln im Laufe der Zeit so aus:

observeLogfiles_iptables



Bei einer Sperrung wird ebenfalls eine eMail verschickt:

observeLogfiles_email


Hin und wieder sollte man allerdings die Firewall-Regeln resetten, da ansonsten auch Besucher betroffen sein können, die durch Zuweisung einer geblockten dynamischen IP-Adresse „fälschlicherweise“ ausgesperrt werden.
Will man eine bestimmte IP-Adresse aus den DROP-Regeln wieder entfernen, bietet es sich an, iptables mit der Option –line-numbers auszuführen und die entsprechende Zeilennummer wieder zu entfernen:

iptables --line-numbers -vnL INPUT
iptables -D INPUT 5

Mit dem zweiten Befehl wird aus der Chain „INPUT“ die fünfte Zeile entfernt.



Quellcode

Der Quellcode zu observeLogfiles ist hier verfügbar:
https://gitorious.org/observelogfiles.

Mit git kann der Quellcode ohne Schlüsselpaar so geladen werden:
    git clone https://git.gitorious.org/observelogfiles/observelogfiles.git



Projektdaten

Curl-Fehler: Connection timeout after 5003 ms
Daten aus https://gitorious.org/observelogfiles.xml

Eingestellt am: 04.12.2021 um 04:03:36
Lizenz:
Owner:
Repositories:


Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>