Seite 1 von 3

Import Blocklist to fail2ban (PHP Cronjob)

Verfasst: 16. Mai 2012, 16:10
von Kapsonfire
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.

Re: Import Blocklist to fail2ban (PHP Cronjob)

Verfasst: 16. Mai 2012, 17:20
von Martin
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

Re: Import Blocklist to fail2ban (PHP Cronjob)

Verfasst: 1. Jun 2012, 14:51
von Kapsonfire
Gibt es hier etwas neues?

Re: Import Blocklist to fail2ban (PHP Cronjob)

Verfasst: 2. Jun 2012, 00:36
von Martin
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

Re: Import Blocklist to fail2ban (PHP Cronjob)

Verfasst: 3. Jun 2012, 23:05
von Kapsonfire
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 ?

Re: Import Blocklist to fail2ban (PHP Cronjob)

Verfasst: 4. Jun 2012, 16:47
von Martin
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.

Re: Import Blocklist to fail2ban (PHP Cronjob)

Verfasst: 20. Jun 2012, 11:43
von Martin
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.

Re: Import Blocklist to fail2ban (PHP Cronjob)

Verfasst: 10. Okt 2012, 13:44
von derheiko
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

Re: Import Blocklist to fail2ban (PHP Cronjob)

Verfasst: 10. Okt 2012, 13:52
von Falconbase
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.

Re: Import Blocklist to fail2ban (PHP Cronjob)

Verfasst: 10. Okt 2012, 13:57
von derheiko
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);

Re: Import Blocklist to fail2ban (PHP Cronjob)

Verfasst: 10. Okt 2012, 14:01
von Falconbase
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);

Re: Import Blocklist to fail2ban (PHP Cronjob)

Verfasst: 10. Okt 2012, 14:09
von derheiko
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

Re: Import Blocklist to fail2ban (PHP Cronjob)

Verfasst: 10. Okt 2012, 14:22
von Falconbase
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.

Re: Import Blocklist to fail2ban (PHP Cronjob)

Verfasst: 10. Okt 2012, 14:39
von derheiko
Ja, ich führe den Befehl via Shell aus.
Stehe wieder auf dem Schlauch. Was meinst du mit "export" ?

Re: Import Blocklist to fail2ban (PHP Cronjob)

Verfasst: 10. Okt 2012, 14:44
von Falconbase
Über diesen Befehl kannst du sehen welche Variablen bei deiner Shell eingestellt sind.

Re: Import Blocklist to fail2ban (PHP Cronjob)

Verfasst: 10. Okt 2012, 14:47
von derheiko
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 / #

Re: Import Blocklist to fail2ban (PHP Cronjob)

Verfasst: 10. Okt 2012, 14:48
von derheiko
Guten Morgen *Kopfklatsch*

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

Re: Import Blocklist to fail2ban (PHP Cronjob)

Verfasst: 10. Okt 2012, 15:23
von Falconbase
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.

Re: Import Blocklist to fail2ban (PHP Cronjob)

Verfasst: 11. Okt 2012, 07:05
von derheiko
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?

Re: Import Blocklist to fail2ban (PHP Cronjob)

Verfasst: 11. Okt 2012, 07:24
von Falconbase
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.