Import Blocklist to fail2ban (PHP Cronjob)

Anleitungen zu Fail2Ban, blocklist.de und x-arf
Kapsonfire
Beiträge: 3
Registriert: 15. Mai 2012, 17:18

Import Blocklist to fail2ban (PHP Cronjob)

Beitrag von Kapsonfire » 16. Mai 2012, 16:10

Folgendes der /etc/fail2ban/jail.local hinzufügen

Code: Alles auswählen

[blocklist]
enabled  =  true
port     =  ssh
filter   =  sshd
logpath  =  /etc/fail2ban/empty.log
maxretry =  1
bantime  =  3600
action   = %(action_)s
ssh ausführen:

Code: Alles auswählen

touch /etc/fail2ban/empty.log
/etc/fail2ban/blocklist.php erstellen

Code: Alles auswählen

<?php
$time = date("H:i",time()-3600);
$src = file_get_contents("https://api.blocklist.de/getlast.php?time=".$time);
$arr = explode("\n",$src);
foreach($arr as $ip) {
        if(trim($ip)=="") continue;
        $cmd = "fail2ban-client set blocklist banip $ip";
        exec($cmd);
}
exec("echo \"-\" > /etc/fail2ban/empty.log"); //force reload ip-locks
?>

/etc/cron.d/blocklist erstellen

Code: Alles auswählen

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
0 * * * *       root    /usr/bin/php /etc/fail2ban/blocklist.php

ssh ausführen:

Code: Alles auswählen

/etc/init.d/fail2ban restart
/etc/init.d/cron restart



getestet und funktioniert bei mir
fail2ban muss aber geupdated sein, da es noch ein bug in fail2ban-client gibt.
https://github.com/fail2ban/fail2ban/pull/50
Dieses Update muss eingespielt sein.

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

Re: Import Blocklist to fail2ban (PHP Cronjob)

Beitrag von Martin » 16. Mai 2012, 17:20

Hi Kapsonfile,

vielen Dank für die Anleitung.

Da es je nach Uhrzeit und Angriffe einige tausend IPs sein können, prüfen wir gerade noch ob man noch den Service-Name übergeben kann, damit man z.B. nur die letzten des Typs "mail" oder "ssh" laden kann.
Wenn das online ist, schreib ich es noch mal.
Mfg Martin
Mfg Martin
http://www.blocklist.de/de/ Fail2Ban Reporting Service

Kapsonfire
Beiträge: 3
Registriert: 15. Mai 2012, 17:18

Re: Import Blocklist to fail2ban (PHP Cronjob)

Beitrag von Kapsonfire » 1. Jun 2012, 14:51

Gibt es hier etwas neues?

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

Re: Import Blocklist to fail2ban (PHP Cronjob)

Beitrag von Martin » 2. Jun 2012, 00:36

Hi,

ist drin mit $_GET['service'].
Folgende Dienste sind enthalten:
apache
bots
mail
imap
ftp
ssh
voip
je nach Art, ist bei imap auch sasl, pop3 usw. enthalten.....

Bsp:
http://api.blocklist.de/getlast.php?tim ... rvice=bots
http://api.blocklist.de/getlast.php?tim ... rvice=mail
Mfg Martin
http://www.blocklist.de/de/ Fail2Ban Reporting Service

Kapsonfire
Beiträge: 3
Registriert: 15. Mai 2012, 17:18

Re: Import Blocklist to fail2ban (PHP Cronjob)

Beitrag von Kapsonfire » 3. Jun 2012, 23:05

kleiner Bug drinne.. wenn es 00:00 ist kann man die Abfrage nicht für die letzte Stunde machen, weil er davon ausgeht dass mit 23:00 der Zeitpunkt in der Zukunft gemeint ist und nicht der, vor einer Stunde...
Wäre es nicht allgemin Schlau die Zeitspanne in Sekunden als Parameter zu übergeben.. z.B. time=3600 -> gibt die Bans der letzten stunde aus bis maximal time=86400 ?

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

Re: Import Blocklist to fail2ban (PHP Cronjob)

Beitrag von Martin » 4. Jun 2012, 16:47

Hi,

ich wandle die Zeiten in Zeitstempel um (utc) und prüfen dann mit Sekunden.... mhhhh. wenn jemand eine andere Zeitzone nimmt, könnte das natürlich zu falschen Ergebnissen führen.
Aktuell kann man das Datum/Zeitpunkt auch als unixtimestamp übergeben.
Das man selbst die Differenz angibt, werde ich so wie den Bug heute Abend prüfen und beheben.
Mfg Martin
http://www.blocklist.de/de/ Fail2Ban Reporting Service

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

Re: Import Blocklist to fail2ban (PHP Cronjob)

Beitrag von Martin » 20. Jun 2012, 11:43

kurzes Upate.
Wenn man bei $time keinen Unix-Time, sondern die Differenz in Sekunden angibt, wird time() - $_GET['time'] genommen.
Das maximun ist allerdings 50000 Sekunden.
Fehler konnte ich beim testen nicht feststellen... falls welche gefunden werden, bitte hier melden. Danke.
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 (PHP Cronjob)

Beitrag von derheiko » 10. Okt 2012, 13:44

Hallo,

vielen Dank für die Anleitung.

Ich bin heute per Zufall auf euch gestoßen.
Ich bin noch relativ neu in dem Thema und wollte gerne meinen Server etwas besser absichern.
Fail2Ban läuft schon auf meinem Debian 6 Server und sperrt auch fleißig.

Seit ein paar Tagen hat uns eine IP Adresse fleißig gescannt, wurde aber nicht gesperrt.
Das Log sagte aus:

Code: Alles auswählen

Oct  7 16:37:07 hetznerone proftpd[24676]: **.***.**.*** (**.***.**.***[**.***.**.***]) - FTP session closed.
Oct  7 16:37:08 hetznerone proftpd[24693]: **.***.**.*** (**.***.**.***[**.***.**.***]) - FTP session opened.
Oct  7 16:37:30 hetznerone proftpd[24693]: **.***.**.*** (**.***.**.***[**.***.**.***]) - FTP session closed.
Oct  7 16:37:30 hetznerone proftpd[24769]: **.***.**.*** (**.***.**.***[**.***.**.***]) - FTP session opened.
Oct  7 16:37:31 hetznerone proftpd[24769]: **.***.**.*** (**.***.**.***[**.***.**.***]) - FTP session closed.
Oct  7 16:37:32 hetznerone proftpd[24775]: **.***.**.*** (**.***.**.***[**.***.**.***]) - FTP session opened.
Oct  7 16:37:33 hetznerone proftpd[24775]: **.***.**.*** (**.***.**.***[**.***.**.***]) - FTP session closed.
Oct  7 16:37:33 hetznerone proftpd[24781]: **.***.**.*** (**.***.**.***[**.***.**.***]) - FTP session opened.
Oct  7 16:37:34 hetznerone proftpd[24781]: **.***.**.*** (**.***.**.***[**.***.**.***]) - FTP session closed.
Oct  7 16:37:35 hetznerone proftpd[24791]: **.***.**.*** (**.***.**.***[**.***.**.***]) - FTP session opened.
Oct  7 16:37:36 hetznerone proftpd[24791]: **.***.**.*** (**.***.**.***[**.***.**.***]) - FTP session closed.
Oct  7 16:37:36 hetznerone proftpd[24795]: **.***.**.*** (**.***.**.***[**.***.**.***]) - FTP session opened.
Über google anhand der IP habe ich euch dann gefunden und sah das ihr die IP Blacklistet.
Also wollte ich eure Liste so installieren, so das die IPs gleich gesperrt sind.

Nun wollte ich gerne, das auch die Blocklist IPAdressen drin stehen.
Ich bin der Anleitung oben gefolgt und wollte dann man testen was passiert und habe per Root in der Shell folgendes eingegeben
/usr/bin/php /etc/fail2ban/blocklist.php
Ich bekomme dann die Meldung

Code: Alles auswählen

sh: /fail2ban-client: not found
sh: /fail2ban-client: not found
sh: /fail2ban-client: not found
sh: /fail2ban-client: not found
sh: /fail2ban-client: not found
sh: /fail2ban-client: not found
sh: /fail2ban-client: not found
sh: /fail2ban-client: not found
sh: /fail2ban-client: not found
sh: /fail2ban-client: not found
sh: /fail2ban-client: not found
sh: /echo: not found
Was habe ich falsch gemacht?
Vielen Dank vorab für die Hilfe.

Gruß Heiko

Falconbase
Beiträge: 97
Registriert: 14. Sep 2010, 11:20
Wohnort: Wallersdorf
Kontaktdaten:

Re: Import Blocklist to fail2ban (PHP Cronjob)

Beitrag von Falconbase » 10. Okt 2012, 13:52

HI derheiko,

hast du auch die Path mit übernommen, sonst klappt das PHP-Script nicht, alternativ kannste bei "$cmd = "fail2ban-client set blocklist banip $ip";" den Pfad fest eintragen.
Grüße Falconbase

http://www.kunesch.net

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

Re: Import Blocklist to fail2ban (PHP Cronjob)

Beitrag von derheiko » 10. Okt 2012, 13:57

Danke für die rasche Antwort.
Entschuldige, irgendwie stehe ich gerade auf dem Schlauch ;)

Du meinst ich soll den Pfad von dem fail2ban setzen?
Also

Code: Alles auswählen

        if(trim($ip)=="") continue;
        $cmd = "/etc/fail2ban set blocklist banip $ip";
        exec($cmd);

Falconbase
Beiträge: 97
Registriert: 14. Sep 2010, 11:20
Wohnort: Wallersdorf
Kontaktdaten:

Re: Import Blocklist to fail2ban (PHP Cronjob)

Beitrag von Falconbase » 10. Okt 2012, 14:01

Hi derheiko,

sorry hatte mich falsch ausgedrückt. Die Zeile sollte dann so lauten:

Code: Alles auswählen

if(trim($ip)=="") continue;
$cmd = "/usr/bin/fail2ban set blocklist banip $ip";
 exec($cmd);
Grüße Falconbase

http://www.kunesch.net

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

Re: Import Blocklist to fail2ban (PHP Cronjob)

Beitrag von derheiko » 10. Okt 2012, 14:09

Danke, es mag nicht ;)

Code: Alles auswählen

/usr/bin/fail2ban 
und

Code: Alles auswählen

/usr/bin/fail2ban-client 
kommt mit "not found"

Im /usr/bin ist aber eine fail2ban-client

Wenn ich nun

Code: Alles auswählen

        $cmd = "/etc/fail2ban/ set blocklist banip $ip";
Also an das Ende noch ein / sezte kommt die Meldung

Code: Alles auswählen

sh: /: Permission denied
Nur, das ich es richtig verstehe - wenn ich es mit deiner Lösung ans laufen bekomme - dann lädt er per Cron immer die aktuellen Ips von BLockliste.de runter und sperrt sie via IPTables aus. So das sie nicht mal mehr scannen können?

Danke vorab für die freundliche Hilfe und große Geduld ;)

Heiko

Falconbase
Beiträge: 97
Registriert: 14. Sep 2010, 11:20
Wohnort: Wallersdorf
Kontaktdaten:

Re: Import Blocklist to fail2ban (PHP Cronjob)

Beitrag von Falconbase » 10. Okt 2012, 14:22

Führst du das Script direkt auf der Shell aus?
Wenn ja mach mal bitte ein export und schau ob die Zeile

Code: Alles auswählen

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
vorhanden ist.
Grüße Falconbase

http://www.kunesch.net

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

Re: Import Blocklist to fail2ban (PHP Cronjob)

Beitrag von derheiko » 10. Okt 2012, 14:39

Ja, ich führe den Befehl via Shell aus.
Stehe wieder auf dem Schlauch. Was meinst du mit "export" ?

Falconbase
Beiträge: 97
Registriert: 14. Sep 2010, 11:20
Wohnort: Wallersdorf
Kontaktdaten:

Re: Import Blocklist to fail2ban (PHP Cronjob)

Beitrag von Falconbase » 10. Okt 2012, 14:44

Über diesen Befehl kannst du sehen welche Variablen bei deiner Shell eingestellt sind.
Grüße Falconbase

http://www.kunesch.net

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

Re: Import Blocklist to fail2ban (PHP Cronjob)

Beitrag von derheiko » 10. Okt 2012, 14:47

Meinst du das ?

Code: Alles auswählen

root@hetznerone / # path ?
-bash: path: command not found
root@hetznerone / # PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
root@hetznerone / #

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

Re: Import Blocklist to fail2ban (PHP Cronjob)

Beitrag von derheiko » 10. Okt 2012, 14:48

Guten Morgen *Kopfklatsch*

declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

Falconbase
Beiträge: 97
Registriert: 14. Sep 2010, 11:20
Wohnort: Wallersdorf
Kontaktdaten:

Re: Import Blocklist to fail2ban (PHP Cronjob)

Beitrag von Falconbase » 10. Okt 2012, 15:23

hi derheiko,

mhh bei mir geht das auch via shell, hast du auch das eine Update gemacht??
getestet und funktioniert bei mir
fail2ban muss aber geupdated sein, da es noch ein bug in fail2ban-client gibt.
https://github.com/fail2ban/fail2ban/pull/50
Dieses Update muss eingespielt sein.
Grüße Falconbase

http://www.kunesch.net

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

Re: Import Blocklist to fail2ban (PHP Cronjob)

Beitrag von derheiko » 11. Okt 2012, 07:05

Danke dir noch mal für die Antwort.

Das Update kann ich auf der Seite nicht entdecken, aber ich habe Fail2Ban auf dem Server erst vor 5 Tagen installiert, also müsste es ja eh die aktuelle Version sein?

Das komische ist ja, das er angeblich ja den fail2ban-client nicht findet. Wäre den die DNS Alternative das gleich?
Also das alles geblockt wird, was in der Liste steht?

Falconbase
Beiträge: 97
Registriert: 14. Sep 2010, 11:20
Wohnort: Wallersdorf
Kontaktdaten:

Re: Import Blocklist to fail2ban (PHP Cronjob)

Beitrag von Falconbase » 11. Okt 2012, 07:24

Hi derheiko,

die DNS-Listen wären eine Alternative, wenn es die jeweilige Anwendung unterstützt.
Alternativ gibt es noch ein Shell-Script das die IPTables regeln manuell erstellt, diese werden dann von Fail2ban jedoch nicht entfernt.
Grüße Falconbase

http://www.kunesch.net

Antworten