Fail2ban mit hostsdeny ohne iptables

Anleitungen zu Fail2Ban, blocklist.de und x-arf
Antworten
thomas
Beiträge: 1
Registriert: 17. Jan 2014, 11:43

Fail2ban mit hostsdeny ohne iptables

Beitrag von thomas » 18. Jan 2014, 09:39

Hallo,

wer auch das Problem hat, das mann auf dem Server keine iptables hat so wie ich kann das ganze auch mit hostsdeny machen....

erstellt euch eine Datei auf dem server Namens blacklist.php mit folgendem inhalt! Kopiert die ins /root/scripts ( wenn nicht vorhanden erstellen)

Code: Alles auswählen

<?php

# blacklisten einlesen

#DSHIELD blacklist
$blacklist_source[0] = file("http://dshield.org/feeds/suspiciousdomains_Low.txt");

# Infiltrated.net Blacklist
$blacklist_source[1] = file("http://www.infiltrated.net/blacklisted"); 

# blocklist.de Blacklist
$blacklist_source[3] = file("http://lists.blocklist.de/lists/all.txt"); 

# Lokale Blacklist
$blacklist_source[2] = file("/usr/local/etc/blacklist.txt");

$hosts = 0;
system("rm /tmp/blacklist");


foreach ($blacklist_source as $bl)
{
echo "Lese Blacklist $bl...";
foreach ($bl as $line)
{

$line = trim($line);

if (substr($line,0,1) == "#") continue;
if (substr($line,0,1) == "-") continue;
if (substr($line,0,1) == "A") continue;
if (substr($line,0,1) == "\r\n") continue;
if (substr($line,0,1) == " ") continue;
if (substr($line,0,1) == "\t") continue;
if (substr($line,0,1) == "\n") continue;
if (strlen($line) < 5) continue;

echo "Gefunden -> " . $line;
echo "\n";
system("echo \"ALL: $line\" >> /tmp/blacklist");
$hosts++;
}

}

echo "$hosts Adressen gefunden.";

system ("rm /etc/hosts.deny");
system ("cp /tmp/blacklist /etc/hosts.deny");
unter blacklist_source[0] könnt ihr verschiedene Listen eintragen die dann inportiert werden
die Listen werden dann in die hosts.deny eingetragen..... zb: ALL: <ip>

jetzt noch ein Cron drauf legen fertig wie

zB:
/usr/bin/php /root/scripts/blacklist.php
(Täglich zu mitternacht)


zu fail2ban

unter /etc/fail2ban/action.d muß die datei hostsdeny.conf erstellt werden (falls nicht vorhanden) mit folgendem inhalt

Code: Alles auswählen

# Fail2Ban configuration file
#
# Author: Cyril Jaquier
#
# $Revision: 660 $
#

[Definition]

# Option:  actionstart
# Notes.:  command executed once at the start of Fail2Ban.
# Values:  CMD
#
actionstart = 

# Option:  actionstop
# Notes.:  command executed once at the end of Fail2Ban
# Values:  CMD
#
actionstop = 

# Option:  actioncheck
# Notes.:  command executed once before each actionban command
# Values:  CMD
#
actioncheck = 

# Option:  actionban
# Notes.:  command executed when banning an IP. Take care that the
#          command is executed with Fail2Ban user rights.
# Tags:    <ip>  IP address
#          <failures>  number of failures
#          <time>  unix timestamp of the ban time
# Values:  CMD
#
actionban = IP=<ip> &&
            printf %%b "ALL: $IP\n" >> <file>

# Option:  actionunban
# Notes.:  command executed when unbanning an IP. Take care that the
#          command is executed with Fail2Ban user rights.
# Tags:    <ip>  IP address
#          <failures>  number of failures
#          <time>  unix timestamp of the ban time
# Values:  CMD
#
actionunban = IP=<ip> && sed -i.old /ALL:\ $IP/d <file>

[Init]

# Option:  file
# Notes.:  hosts.deny file path.
# Values:  STR  Default:  /etc/hosts.deny
#
file = /etc/hosts.deny

datei Speichern fertig

ich fail2ban die jail.conf anpassen
einfügen action = hostsdeny

wie hier zum beispiel

Code: Alles auswählen

[ssh]

enabled = true
port	= ssh
filter	= sshd
action = hostsdeny
logpath  = /var/log/auth.log
maxretry = 2
gut dann sollte es klappen

ich weiß jetzt nur nicht wie und ob er das an blocklist Reportiert
wer mal eine Iddee hat kann sich ja melden


LG
Thomas Martin

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

Re: Fail2ban mit hostsdeny ohne iptables

Beitrag von Martin » 18. Jan 2014, 15:05

Hi Thomas,

danke für die Anleitung.
Ich hab für denyhost ein kleines Plugin-Skript für SSH damals geschrieben:
http://www.blocklist.de/downloads/denyhost-plugin.sh
Das Skript kann man dann bei denyhost als Plugin_Deny eintragen, ist allerdings fest auf SSH angepasst und muss man bei anderen Dienste noch anpassen:
viewtopic.php?f=11&t=130
Mfg Martin
http://www.blocklist.de/de/ Fail2Ban Reporting Service

RobertKuhlmann
Beiträge: 3
Registriert: 22. Mär 2014, 10:53

Re: Fail2ban mit hostsdeny ohne iptables

Beitrag von RobertKuhlmann » 24. Mär 2014, 11:19

Nachdem iptables und ipset bei mir auch nicht funktionierte hat mir die Lösung mit hosts.deny gut geholfen.

Ich habe das Skript etwas optimiert und damit die Laufzeit auf wenige Sekunden verkürzen können:

Code: Alles auswählen

<?php

$blacklist_source = array ();
# blacklisten einlesen

#DSHIELD blacklist
array_push($blacklist_source, file("http://dshield.org/feeds/suspiciousdomains_Low.txt")); 
# Infiltrated.net Blacklist
array_push($blacklist_source, file("http://www.infiltrated.net/blacklisted")); 
# blocklist.de Blacklist
array_push($blacklist_source, file("http://lists.blocklist.de/lists/all.txt")); 
# Lokale Blacklist
array_push($blacklist_source, file("/usr/local/etc/blacklist.txt")); 

$hosts = 0;

$thelist="";

foreach ($blacklist_source as $bl)
{
  #echo "Lese Blacklist...\n";
  foreach ($bl as $line)
  {
  
    $line = trim($line);
    
    if (substr($line,0,1) == "#") continue;
    if (substr($line,0,1) == "-") continue;
    if (substr($line,0,1) == "A") continue;
    if (substr($line,0,1) == "\r\n") continue;
    if (substr($line,0,1) == " ") continue;
    if (substr($line,0,1) == "\t") continue;
    if (substr($line,0,1) == "\n") continue;
    if (strlen($line) < 5) continue;
    
    $thelist .= "ALL: $line\n";
    $hosts++;
  }

}

#Neue Deny-Liste speichern
$fp = fopen('/etc/hosts.deny', 'w');
fputs($fp, $thelist);
fclose($fp);

echo "$hosts Einträge werden blockiert.\n";

Antworten