Import Blocklist to fail2ban (Shell Script / Cronjob)

Anleitungen zu Fail2Ban, blocklist.de und x-arf
jenszrockt
Beiträge: 7
Registriert: 13. Apr 2013, 21:21

Import Blocklist to fail2ban (Shell Script / Cronjob)

Beitrag von jenszrockt » 14. Apr 2013, 14:51

Da auf meinem Server kein PHP installiert ist, habe ich mir ein Shell Skript geschrieben:

DIE ROT MARKIERTEN TEXTSTELLEN ANPASSEN:

jail.local:
[SERVICE-blocklist]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/empty.log
maxretry = 1
bantime = 86400
action = %(action_)s
IN DER LETZTEN ZEILE MUSS DER PFAD ZUR LOGDATEI ANGEPASST WERDEN. (Wie in der jail.local definiert)

blocklist.sh:
#!/bin/sh

iplist=`mktemp`
service=$1
blocklist=$2
time=$3
url="http://api.blocklist.de/getlast.php?tim ... e=$service"

wget $url -O $iplist
while read ip
do
fail2ban-client set $blocklist banip $ip
done < $iplist
rm $iplist

touch /var/log/empty.log
Aufgerufen werden muss es mit folgenden Argumenten:

Code: Alles auswählen

./blocklist.sh SERVICE BLOCKLIST TIME
SERVICE: apache, bots, mail, imap, ftp, ssh oder voip, all
BLOCKLIST: Jail-Name von der entsprechenden Blockliste (Aufpassen, was man hier angibt!)
TIME: Unix-Zeit, hh:ii, hh.ii, Differenz in Sekunden

Beispiele:

Code: Alles auswählen

./blocklist.sh ssh ssh-blocklist 3600
./blocklist.sh apache apache-blocklist `date "+%H:%M" --date="15 minutes ago"` (müsste gehen :D)
Beispiel für die "weltweite" crontab:

Code: Alles auswählen

[...]
# m h dom mon dow user	command
0 * * * * root /path/blocklist.sh ssh ssh-blocklist 3600  > /dev/null 2>&1
#
"wget" muss installiert sein, für curl einfach umschreiben.
Die Liste mit den IPs wird in einer temporären Datei gespeichert, die anschließen nach der Ausführung des Cronjobs gelöscht wird.

Viel Spaß damit ;)
Zuletzt geändert von jenszrockt am 15. Nov 2014, 06:18, insgesamt 1-mal geändert.

derheiko
Beiträge: 15
Registriert: 10. Okt 2012, 13:35

Re: Import Blocklist to fail2ban (Shell Script / Cronjob)

Beitrag von derheiko » 2. Mai 2013, 08:42

Danke für die Anleitung.

Ich erhalte beim ausführen von

Code: Alles auswählen

./blocklist.sh ssh ssh-blocklist
die Meldung

Code: Alles auswählen

global name 'time' is not defined
Google bot mir leider auch keine Lösung.
Weißt du evtl. woran das liegen könnte?

Danke vorab für die Hilfe und Gruß

Heiko

Benutzeravatar
Martin
Beiträge: 400
Registriert: 14. Sep 2010, 11:54
Kontaktdaten:

Re: Import Blocklist to fail2ban (Shell Script / Cronjob)

Beitrag von Martin » 2. Mai 2013, 09:11

Hallo Heiko,

als dritter Parameter fehlt noch die Übergabe der Zeit z.B. in Sekunden.
Für die IPs, welche in der letzten Stunde hinzugekommen sind 3600:

Code: Alles auswählen

./blocklist.sh ssh ssh-blocklist 3600
Mfg Martin
http://www.blocklist.de/de/ Fail2Ban Reporting Service

derheiko
Beiträge: 15
Registriert: 10. Okt 2012, 13:35

Re: Import Blocklist to fail2ban (Shell Script / Cronjob)

Beitrag von derheiko » 2. Mai 2013, 09:45

Danke wie immer für die sehr schnelle Antwort :D

Ich habe falsch geqoutet. Jetzt noch mal richtig.

Code: Alles auswählen

root@***:/etc/fail2ban# ./blocklist.sh ssh ssh-blocklist 3600

--2013-05-02 10:39:40--  http://api.blocklist.de/getlast.php?time=3600&service=ssh
Resolving api.blocklist.de... ***.***.***.***
Connecting to api.blocklist.de|***.***.***.***|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/plain]
Saving to: `/tmp/tmp.N8cFokFJQy'

    [ <=>                                                                                       ] 723         --.-K/s   in 0s

2013-05-02 10:39:40 (137 MB/s) - `/tmp/tmp.N8cFokFJQy' saved [723]

global name 'time' is not defined
global name 'time' is not defined
global name 'time' is not defined
global name 'time' is not defined
global name 'time' is not defined

jenszrockt
Beiträge: 7
Registriert: 13. Apr 2013, 21:21

Re: Import Blocklist to fail2ban (Shell Script / Cronjob)

Beitrag von jenszrockt » 2. Mai 2013, 10:24

Hallo,

es scheint Probleme zu geben, wenn fail2ban-client aufgerufen wird, um die IPs zu bannen. Ich bin mir nicht sicher, ich meine die Fehlermeldung kommt von Python. Und fail2ban ist wie ich meine in Python geschrieben.

Eventuell überprüfen, was in der Datei jail.local für eine bantime definiert ist.

Edit:

Bin eben darauf gestoßen: https://github.com/fail2ban/fail2ban/issues/11

Welche fail2ban Version nutzt du?

derheiko
Beiträge: 15
Registriert: 10. Okt 2012, 13:35

Re: Import Blocklist to fail2ban (Shell Script / Cronjob)

Beitrag von derheiko » 2. Mai 2013, 10:44

Danke für die rasche Antwort :)

Den Beitrag hatte ich auch bei google entdeckt, aber er ist ja auch schon ein jahr alt und das bug wurde gefixt.

Ich habe die aktuelle Version von fail2ban

Code: Alles auswählen

root@lvps*******:/etc/fail2ban# apt-get install fail2ban
Reading package lists... Done
Building dependency tree
Reading state information... Done
fail2ban is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Wie finde ich die Versionsnummer raus? Sorry, bin nicht so der Linux experte :(


Nachtrag: Google mein Freund hat es mir gezeigt :)

Code: Alles auswählen

dpkg-query -W fail2ban
fail2ban        0.8.4-1ubuntu1

derheiko
Beiträge: 15
Registriert: 10. Okt 2012, 13:35

Re: Import Blocklist to fail2ban (Shell Script / Cronjob)

Beitrag von derheiko » 2. Mai 2013, 10:55

Ich habs. Der Bug ist wirklich noch drin.

https://github.com/fail2ban/fail2ban/co ... ae8d15edce

Als wenn es noch einer hat, dann unter

Code: Alles auswählen

 vi /usr/share/fail2ban/server/filter.py
unter

Code: Alles auswählen

import logging, re, os, fcntl, 
hinten noch den Eintrag "time" mit dran setzen.

also

Code: Alles auswählen

import logging, re, os, fcntl, time
fail2ban restart und es läuft :)

Danke.

jenszrockt
Beiträge: 7
Registriert: 13. Apr 2013, 21:21

Re: Import Blocklist to fail2ban (Shell Script / Cronjob)

Beitrag von jenszrockt » 3. Mai 2013, 10:49

Hallo,

gute Recherche. Der Bug trat in fail2ban 0.8.4-1 auf, welche auch die von dir verwendete fail2ban-Version ist.


Kommt auf die Linux-Distribution und Version dementsprechend an, welche fail2ban Version verwendet wird. Mit der Version 0.8.4-3 soll dieser Bug wohl behoben sein. Das ist bei der aktuellen stabilen Version von Debian der Fall (http://packages.debian.org/de/squeeze/fail2ban), ebenso bei den neusten Ubuntu Versionen (https://launchpad.net/ubuntu/+source/fail2ban).

Eventuell Distributionsupdate bzw. upgrade durchfrühren.

VBTECH
Beiträge: 32
Registriert: 26. Mär 2013, 15:54

Re: Import Blocklist to fail2ban (Shell Script / Cronjob)

Beitrag von VBTECH » 12. Nov 2014, 13:15

Hi Martin,

funktioniert der Abruf auch für den Service ALL, z.B. wie folgt:

./blocklist.sh all blocklist 3600

Gruss
Ulrich

jenszrockt
Beiträge: 7
Registriert: 13. Apr 2013, 21:21

Re: Import Blocklist to fail2ban (Shell Script / Cronjob)

Beitrag von jenszrockt » 14. Nov 2014, 20:24

Hallo,

ich habe soeben folgenden Link in den Browser eingegeben:

http://api.blocklist.de/getlast.php?tim ... ervice=all

Sollte funktionieren, da das Script genau diese URL abruft.

Mfg Jens

VBTECH
Beiträge: 32
Registriert: 26. Mär 2013, 15:54

Re: Import Blocklist to fail2ban (Shell Script / Cronjob)

Beitrag von VBTECH » 14. Nov 2014, 23:48

Danke 8-)

Bingo2000
Beiträge: 4
Registriert: 19. Nov 2014, 11:39

Re: Import Blocklist to fail2ban (Shell Script / Cronjob)

Beitrag von Bingo2000 » 19. Nov 2014, 11:46

Hi

leider klappt bei mir der Neustart von Fail2ban nicht, wenn ich in die local.conf folgendes eintrage:

Code: Alles auswählen

[ssh-blocklist]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/empty.log
maxretry = 1
bantime = 86400
action = %(action_)s
Bekomme dann die Ausgabe:

Code: Alles auswählen

# service fail2ban restart
Stopping fail2ban:                                         [  OK  ]
Starting fail2ban: ERROR  Failed during configuration: Bad value substitution:
	section: [ssh-blocklist]
	option : action
	key    : action_
	rawval : 

                                                           [FAILED]
Danke für die Hilfe!

jenszrockt
Beiträge: 7
Registriert: 13. Apr 2013, 21:21

Re: Import Blocklist to fail2ban (Shell Script / Cronjob)

Beitrag von jenszrockt » 19. Nov 2014, 11:54

Hallo,

welche Konfigurationsdatei von "Fail2ban" hast du verändert? "jail.conf" oder "jail.local"? (Edit: Schon gelesen, war die lokale, allerdings heißt diese bei mir jail.local und nicht local.conf)

Hast du die Logdatei "empty.log" schon angelegt bzw. existiert sie?
Hast du noch mehr Jails konfiguriert? Existiert ein Default-Bereicht in deiner "jail.local"?
Überprüfe mal den Default-Bereich in "jail.conf", vor allem wo "action_" definiert wird.
Im Default-Bereich "loglevel = 4" eintragen, eventuell gibt es speziellere Fehlermeldungen.

Normalerweise deutet der Fehler darauf hin, dass etwas mit der Definition des Jails bzw. einer Konfigrationsdatei nicht stimmt, falls du die "jail.conf" verändert hast, könnte sich dort ein Fehler eingeschlichen haben.

Mfg

Bingo2000
Beiträge: 4
Registriert: 19. Nov 2014, 11:39

Re: Import Blocklist to fail2ban (Shell Script / Cronjob)

Beitrag von Bingo2000 » 20. Nov 2014, 15:52

Danke für die Tipps.
Hat aber wohl mit der Plesk-Verwaltung zu tuen. Mann muss einen Jail in Plesk anlegen.
Dann funktioniert es!
Danke auch für das Script!

Bingo2000
Beiträge: 4
Registriert: 19. Nov 2014, 11:39

Noch ´ne Frage

Beitrag von Bingo2000 » 20. Nov 2014, 22:03

Ich bekomme jetzt, wo ich den Cron job ausführe immer eine Mail mit dem Ausgabetext

Code: Alles auswählen

--2014-11-20 21:00:01--  http://api.blocklist.de/getlast.php?time=3600&service=ssh
Resolving api.blocklist.de... 176.9.54.248
Connecting to api.blocklist.de|176.9.54.248|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/plain]
Saving to: “/tmp/tmp.aFI2QSRBYc”
Wie kann ich die Ausgabe unterdrücken?

jenszrockt
Beiträge: 7
Registriert: 13. Apr 2013, 21:21

Re: Import Blocklist to fail2ban (Shell Script / Cronjob)

Beitrag von jenszrockt » 21. Nov 2014, 05:17

0 * * * * root /path/blocklist.sh ssh ssh-blocklist 3600 > /dev/null 2>&1
Wichtig ist das rot markierte.

Hier auf die Schnell ein Link, wo erklärt wird, was das bedeutet:
http://www.sysadminslife.com/linux/quic ... abe-email/

Bingo2000
Beiträge: 4
Registriert: 19. Nov 2014, 11:39

Re: Import Blocklist to fail2ban (Shell Script / Cronjob)

Beitrag von Bingo2000 » 21. Nov 2014, 12:10

jenszrockt hat geschrieben:
0 * * * * root /path/blocklist.sh ssh ssh-blocklist 3600 > /dev/null 2>&1
Wichtig ist das rot markierte.

THX!!!! WORKS!!!! :)

wedeen
Beiträge: 5
Registriert: 6. Aug 2013, 16:11

Re: Import Blocklist to fail2ban (Shell Script / Cronjob)

Beitrag von wedeen » 3. Jul 2015, 13:12

Hallo Bingo2000,
ich stehe gerade vor dem gleichen Problem, dass ich blocklist mit Plesk nutzen will um die gelisteten IPs von vornherein abzublocken. Könntest Du bitte kurz Beschreiben was genau Du in dem Jail bei Plesk eingetragen hast, damit es funktioniert?
Das wäre klasse.

Grüße, Verena

wedeen
Beiträge: 5
Registriert: 6. Aug 2013, 16:11

Re: Import Blocklist to fail2ban (Shell Script / Cronjob)

Beitrag von wedeen » 4. Jul 2015, 11:49

Hallo nochmal,

also ich habe es jetzt hinbekommen, doch wenn Bingo2000 sich nochmal meldet um die Anleitung, die ich erstellt habe, zu bestätigen, wäre das super. Vielleicht schaust du ja in den nächsten Tagen nochmal hier vorbei und könntest mal mitteilen, ob Du das Gleiche oder ähnliches eingegeben hast.

Grüße, Verena

Aaron
Beiträge: 1
Registriert: 22. Jun 2016, 10:34

Re: Import Blocklist to fail2ban (Shell Script / Cronjob)

Beitrag von Aaron » 3. Jul 2016, 15:57

Hi Zusammen,

das Shell-Script funktioniert wunderbar, vielen Dank dafür.

Jedoch führt die Ausführung dazu, dass fail2ban für jede IP eine E-Mail (an mich und an Blocklist) versendet. Lässt sich das irgendwie unterbinden?

Danke und VG

Antworten