Import Blocklist to fail2ban (PHP Cronjob)

Anleitungen zu Fail2Ban, blocklist.de und x-arf
derheiko
Beiträge: 15
Registriert: 10. Okt 2012, 13:35

Re: Import Blocklist to fail2ban (PHP Cronjob)

Beitrag von derheiko » 11. Okt 2012, 08:33

Danke.
Mit dem Shellscript habe ich es versucht.
Es gab ein paar Meldungen beim starten und 5 Minuten später hat sich der Server aufgehangen.
Habe ihn dann neu gestartet. Die IPTables war wieder leer und der Server zum Glück erreichbar.
Das war ein echter Schrecken.

Ich bleibe erstmal bei deiner Lösung ;)
Werde es später mal mit einem anderen Server probieren und mich dann wieder bei dir melden.

BraveSurfer
Beiträge: 31
Registriert: 14. Nov 2012, 20:39

Re: Import Blocklist to fail2ban (PHP Cronjob)

Beitrag von BraveSurfer » 15. Nov 2012, 20:01

derheiko hat geschrieben:
Ü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
Bei meinen Debian-Systemen gab es keinerlei Probleme mit fail2ban unter Suse habe ich aber identisches Problem. Auch mit Pfadangabe komme ich leider nicht weiter.

Hast du eine Lösung gefunden?
Mit freundlichen Grüßen

BraveSurfer

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

Re: Import Blocklist to fail2ban (PHP Cronjob)

Beitrag von Martin » 15. Nov 2012, 20:14

Hi,

hast du es schon mit folgendem Code versucht?

Code: Alles auswählen

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

BraveSurfer
Beiträge: 31
Registriert: 14. Nov 2012, 20:39

Re: Import Blocklist to fail2ban (PHP Cronjob)

Beitrag von BraveSurfer » 15. Nov 2012, 23:30

Hallo Martin,

ja ich habe dem Script auch schon den Pfad zur fail2ban-client wie geschildert mitgegeben. Leider mit dem selben Ergebnis
jede Menge Meldungen
sh: /fail2ban-client: No such file or directory
Mit freundlichen Grüßen

BraveSurfer

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

Re: Import Blocklist to fail2ban (PHP Cronjob)

Beitrag von Martin » 15. Nov 2012, 23:40

Hi BraveSurfer,

und wenn du das Skript einmal mit:
/bin/env -i /usr/bin/php5 -f /etc/pfad/fail2ban-skript.php

aufrufst?
Wenn das auch die Fehlermeldung ausgibt, dann mach mal ein:
strace php5 -f /etc/pfad/fail2ban-script.php

und schaue, was er genau macht...
Ist fail2ban per Paketmanager installiert oder manuell?
Bei meinen Debian-Root-Server, funktioniert es ohne Probleme. Die Meldung, das halt nur /fail2ban-client nicht findet, ist schon komisch.
Hast du evtl. in den php.ini-Settings irgendwelche Security-Einstellungen oder im System, das er Pfade abschneidet, bzw. nur im gleichen Verzeichnis sucht?
Mfg Martin
http://www.blocklist.de/de/ Fail2Ban Reporting Service

BraveSurfer
Beiträge: 31
Registriert: 14. Nov 2012, 20:39

Re: Import Blocklist to fail2ban (PHP Cronjob)

Beitrag von BraveSurfer » 16. Nov 2012, 00:13

Martin hat geschrieben: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.

Ich hatte soeben den ersten Tageswechsel und habe auf meinen Systemen ebenfalls das Problem dass das Script die Zeit als in der Zukunft befindlich ansieht
sh: -c: line 0: syntax error near unexpected token `<'
sh: -c: line 0: `fail2ban-client set blocklist banip <h3>ERROR:</h3>Your Timestamp is in the <strong>future.</strong><br /> YOUR Time is: 16.11.2012 23:00:00 +0100<br />OUR Time is: &nbsp;&nbsp; 16.11.2012 00:00:01 +0100<br /><br />'
sh: -c: line 0: syntax error near unexpected token `newline'
sh: -c: line 0: `fail2ban-client set blocklist banip <h2>Help:</h2>'
sh: -c: line 0: syntax error near unexpected token `<'
sh: -c: line 0: `fail2ban-client set blocklist banip Call: <strong>https://api.blocklist.de/getlast.php?<u ... u></strong>'
sh: -c: line 0: syntax error near unexpected token `newline'
sh: -c: line 0: `fail2ban-client set blocklist banip <br />'
sh: -c: line 0: syntax error near unexpected token `newline'
sh: -c: line 0: `fail2ban-client set blocklist banip time = <i>unixtime</i>'
Wie kann ich das verhindern, die o.g. Ausführungen habe ich leider nicht ganz verstanden (habe die Zeit in Sekunden angegeben). Ich nutze die blocklist.php aus diesem Thread
Mit freundlichen Grüßen

BraveSurfer

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

Re: Import Blocklist to fail2ban (PHP Cronjob)

Beitrag von Martin » 16. Nov 2012, 00:41

ahhh ok.
Das Skript nimmt die aktuelle Zeit minus die Sekunden, welche übergeben wurden, bzw. Zeit.
Das ergibt dann bei 00 Uhr - 1h = 23 Uhr. Da das aktuelle Datum genutzt wird, ergibt das so 16.11.2012 T23:00 statt 15.11.2012 T23:00 Uhr.
Ich werde das gleich fixen.
Mfg Martin
http://www.blocklist.de/de/ Fail2Ban Reporting Service

BraveSurfer
Beiträge: 31
Registriert: 14. Nov 2012, 20:39

Re: Import Blocklist to fail2ban (PHP Cronjob)

Beitrag von BraveSurfer » 16. Nov 2012, 00:42

Martin hat geschrieben:Hi BraveSurfer,
Hast du evtl. in den php.ini-Settings irgendwelche Security-Einstellungen oder im System, das er Pfade abschneidet, bzw. nur im gleichen Verzeichnis sucht?
Hab heute einfach wieder zu lange gemacht, der Tipp war goldrichtig. Unter cli-php war der safe_mode aktiv.
Nun läfts ohne Probleme, habe aber noch ein weiteres Problem.

Die fai2ban-Version ist schon etwas älter und hat nun mit dem Eintrag
[blocklist]
nabled = true
port = ssh
filter = sshd
logpath = /etc/fail2ban/empty.log
maxretry = 1
bantime = 3600
action = %(action_)s
ein Problem. Sobald ich den Jail-Blog zufüge weigert sich fail2ban zu starten.
Liegt wohl am Eintrag [blocklist]

Es handelt sich um die Version v0.8.4, die hier wohl seine Probleme hat.
action = %(action_)s
habe ich schon mal auskommentiert startet aber erst wenn ich [blocklist]entferne.
Mit freundlichen Grüßen

BraveSurfer

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

Re: Import Blocklist to fail2ban (PHP Cronjob)

Beitrag von Martin » 16. Nov 2012, 00:51

getlast.php fixed. Zeitüberschneidung bei 00 Uhr. Das muss ich dann nächste Wochen etwas verbessern, das es auch bei entsprechend größeren Zeitspannen passt....

Liegt es nur am "[blocklist]"? Was steht in der /var/log/fail2ban.log wenn du in der /etc/fail2ban/fail2ban.conf das Debug-Level auf 4 stellst?

Am action sollte es nicht liegen.
Mfg Martin
http://www.blocklist.de/de/ Fail2Ban Reporting Service

BraveSurfer
Beiträge: 31
Registriert: 14. Nov 2012, 20:39

Re: Import Blocklist to fail2ban (PHP Cronjob)

Beitrag von BraveSurfer » 16. Nov 2012, 12:50

Hallo Martin,

nachdem ich fail2ban auf dem betreffenden Server neu aufgesetzt habe nimmt er auch den [blocklist] Eintrag problemlos an uns startet korrekt.
Wenn er allerdings das die Blocklist einlesen soll erhalte ich im Debug-Modus folgende Fehlermeldungen für jede IP aus der Blocklist.
DEBUG Command: ['set', 'blocklist', 'banip', '123.26.41.204']
WARNING Invalid command: ['set', 'blocklist', 'banip', '123.26.41.204']
entsprechend finde ich die Liste im Anschluss leider auch nicht in meiner Firewall.
Mit freundlichen Grüßen

BraveSurfer

BraveSurfer
Beiträge: 31
Registriert: 14. Nov 2012, 20:39

Re: Import Blocklist to fail2ban (PHP Cronjob)

Beitrag von BraveSurfer » 16. Nov 2012, 14:08

Auch dieses Problem ist nun erledigt. Habe nun eine aktuellere Version von fail2ban im Einsatz soweit funktioniert nun alles.
Seltsamer weise passt da aber nun der Return-Path der fail2ban Nachrichten nicht, muss mal sehen wie ich den noch korrekt hin bekomme dann läuft fail2ban auch auf einem älteren SUSE wie es soll.
Mit freundlichen Grüßen

BraveSurfer

BraveSurfer
Beiträge: 31
Registriert: 14. Nov 2012, 20:39

Re: Import Blocklist to fail2ban (PHP Cronjob)

Beitrag von BraveSurfer » 17. Nov 2012, 00:21

So auch das mit sendmail und dem Return-Path passt nun. Die älteren Systeme arbeiten nun auch mit Blocklist zusammen.

Hatte allerdings soeben wieder das Time Problem in nun etwas abgeänderter Form
/usr/bin/fail2ban-client set blocklist banip <h3>ERROR:</h3>Please us the all.txt or use a younger timestamp (this is only for the lastest)<br /> YOUR time is: 16.11.2012 00:08:00 +0100 the differnce is over 50000sec...<br /><br />'
Vom Verständnis her müsste es doch funktionieren wenn man eine Differenz von maximal 86400 zulässt zumindest in der Zeit zwischen 00-01 Uhr.

Nachtrag:

Wenn ich in der Zeit zwischen 00-01 Uhr den Cronjob nicht ausführen lassen und danach dafür um 01.00 Uhr einmalig mit einem Wert von 3599
$time = date("H:i",time()-3599);
$src = file_get_contents("http://api.blocklist.de/getlast.php?time=".$time);
dann müsste das ja bereits 00:00:01 Uhr am identischen Tag ergeben und ich würde dadurch die Lücke der letzten Stunde schließen. Danach kann ich dann wieder einen kleineren Wert als 3599 wählen, oder mache ich da jetzt einen Denkfehler?
Mit freundlichen Grüßen

BraveSurfer

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

Re: Import Blocklist to fail2ban (PHP Cronjob)

Beitrag von Martin » 17. Nov 2012, 20:41

Hi,

ich werde es die nächste Woche fixen können.
Das Problem ist, das ich bei z.B. nur hh:ii die aktuelle Zeit nehme.
Ich wede es nächste Woche anpassen, das es dann immer korrekt auf Zeitstempel umwandelt, dann ist der Bug mit dem Zeitsprung auch behoben.
Mfg Martin
http://www.blocklist.de/de/ Fail2Ban Reporting Service

BraveSurfer
Beiträge: 31
Registriert: 14. Nov 2012, 20:39

Re: Import Blocklist to fail2ban (PHP Cronjob)

Beitrag von BraveSurfer » 18. Nov 2012, 01:48

Vielen Dank Martin.
Wie muss ich den die blocklist.php ändern um nach einem Neustart von fail2ban die gesamte Liste auf den Server zu holen?
Habs mit $time = date("H:i",time()-172800); versucht, scheint aber nicht zu klappen
Mit freundlichen Grüßen

BraveSurfer

BraveSurfer
Beiträge: 31
Registriert: 14. Nov 2012, 20:39

Re: Import Blocklist to fail2ban (PHP Cronjob)

Beitrag von BraveSurfer » 18. Nov 2012, 01:48

Vielen Dank Martin.

Wie muss ich den die blocklist.php ändern um nach einem Neustart von fail2ban die gesamte Liste auf den Server zu holen?
Habs mit
$time = date("H:i",time()-172800);
in der ersten Zeile versucht, das scheint er aber nicht umzusetzen.
Mit freundlichen Grüßen

BraveSurfer

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

Re: Import Blocklist to fail2ban (PHP Cronjob)

Beitrag von Martin » 20. Nov 2012, 03:52

Hi,

das Problem mit dem Tages-Wechsel sollte nun gelöst sein.

Bei der getlast.php, kann man die Daten nicht für einen kompletten Tag laden. Dafür müsstest du dann die all.txt verwenden.
Sprich, du müsstest bei einem restart dir merken, ob du die Liste noch mal komplett neubrauchst und dann z.b.
http://lists.blocklist.de/lists/all.txt
oder
http://lists.blocklist.de/lists/ssh.txt
nehmen statt getlast.php
Mfg Martin
http://www.blocklist.de/de/ Fail2Ban Reporting Service

Schorch
Beiträge: 4
Registriert: 25. Dez 2012, 11:29

Re: Import Blocklist to fail2ban (PHP Cronjob)

Beitrag von Schorch » 25. Dez 2012, 11:32

Hallo und frohe Weihnachten,

habe alles wie in Beitrag 1 eingerichtet, ich bekomme folgende Fehlermeldung:

Code: Alles auswählen

root@srv02 /etc/cron.d # /usr/bin/php5 /etc/fail2ban/blocklist.php
PHP Warning:  file_get_contents(https://api.blocklist.de/getlast.php?time=10:25): failed to open stream: Connection timed out in /etc/fail2ban/blocklist.php on line 3

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

Re: Import Blocklist to fail2ban (PHP Cronjob)

Beitrag von Martin » 25. Dez 2012, 14:43

Hi,
hast du ssl mit installiert?
Versuch mal folgendes:
...file_get_contents("http://api.blocklist.de/getlast.php?time=10:25");

Wenn es dann nicht geht, prüfe einmal bitte kurz, ob du per lynx oder wget die Daten auf dem Server laden kannst.
wget --verbose ---save-headers --output-document=./output.txt "http://api.blocklist.de/getlast.php?time=10:25"

mfg Martin
Mfg Martin
http://www.blocklist.de/de/ Fail2Ban Reporting Service

Schorch
Beiträge: 4
Registriert: 25. Dez 2012, 11:29

Re: Import Blocklist to fail2ban (PHP Cronjob)

Beitrag von Schorch » 26. Dez 2012, 10:16

Scheinbar liegt es an Ipv6, wget macht dann einen Fallback auf Ipv4:

Code: Alles auswählen

root@srv02 /etc/fail2ban # wget --verbose --save-headers --output-document=./output.txt "http://api.blocklist.de/getlast.php?time=08:25"
--2012-12-26 10:05:53--  http://api.blocklist.de/getlast.php?time=08:25
Resolving api.blocklist.de (api.blocklist.de)... 2a01:4f8:150:74e2::4, 176.9.54.248
Connecting to api.blocklist.de (api.blocklist.de)|2a01:4f8:150:74e2::4|:80... failed: Connection timed out.
Connecting to api.blocklist.de (api.blocklist.de)|176.9.54.248|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/plain]
Saving to: `./output.txt'

    [ <=>                                                                                                                                                                  ] 20.179      --.-K/s   in 0,001s

2012-12-26 10:06:57 (13,0 MB/s) - `./output.txt' saved [20179]
Ein Traceroute6 zu deinem Server ergibt folgendes:

Code: Alles auswählen

root@srv02 /etc/fail2ban # traceroute6 api.blocklist.de
»traceroute« zu api.blocklist.de (2a01:4f8:150:74e2::4) von 2a01:4f8:161:81e3::2, Port 33434, von Port 54871, maximal 30 Sprünge, 60 Byte Pakete
 1  2a01:4f8:161:81e0::1 (2a01:4f8:161:81e0::1)  4.319 ms  0.600 ms  0.670 ms
 2  2a01:4f8:0:16:5:0:16:3 (2a01:4f8:0:16:5:0:16:3)  0.347 ms  0.265 ms  0.223 ms
 3  2a01:4f8:0:2::15:2 (2a01:4f8:0:2::15:2)  0.627 ms  0.336 ms  13.255 ms
 4  * * *         ...
 5  * * *         ...

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

Re: Import Blocklist to fail2ban (PHP Cronjob)

Beitrag von Martin » 26. Dez 2012, 11:04

Hi,

das gleiche Problem hatte ich schon mal am 30.10. Da hat dann der Support einen Ping auf das Gateway ausgeführt, dann ging es wieder.
Dies hab ich auch gemacht und aktuell erreiche ich den Webserver wieder per ipv6, aber nur auf der ersten (::2).
Ich schau mir das heute Abend noch mal an und frag den Support.

Aktuell müsstest du dann bitte als Workarround in der /etc/hosts folgendes eintragen:
176.9.54.248 api.blocklist.de api

Dann sollte das PHP-Skript ipv4 nutzten.
Mfg Martin
http://www.blocklist.de/de/ Fail2Ban Reporting Service

Antworten